From d372f1cca2ae357feb2d4524087dd15646356faa Mon Sep 17 00:00:00 2001 From: mryouse Date: Wed, 11 May 2022 03:01:27 +0000 Subject: refactor: only evaluate expressions as needed --- tokens.py | 37 ++++++++++++++++++++++++++++--------- 1 file changed, 28 insertions(+), 9 deletions(-) (limited to 'tokens.py') diff --git a/tokens.py b/tokens.py index 38e669c..cc8e7a7 100644 --- a/tokens.py +++ b/tokens.py @@ -40,10 +40,12 @@ class NebSeparator(): pass class NebOpen(NebSeparator): - pass + def __str__(self): + return "(" class NebClose(NebSeparator): - pass + def __str__(self): + return ")" class NebSymbol(NebToken): @@ -51,21 +53,38 @@ class NebSymbol(NebToken): super().__init__(NebType.SYMBOL) self.name = name + def __str__(self): + return f"'{self.name}" + class NebExpression(NebToken): def __init__(self, symbol, args): super().__init__(NebType.EXPR) self.symbol = symbol self.args = args + self.returns = None + + def set_returns(self, returns): + self.returns = returns - def maybe_sig(self): - out = [] + def __str__(self): + out = f"({self.symbol}" for arg in self.args: - if isinstance(arg, NebLiteral): - out.append(":" + arg.type_.name.lower()) - else: - raise Exception("expressions must have a list of literals") #TODO not true - return " ".join(out) + out += f" {arg}" + out += f") <{self.type_}> -> <{self.out_sig()}>" + return out + + def in_sig(self): + return " ".join(f":{arg.type_.name.lower()}" for arg in self.args) + + def out_sig(self): + if self.returns is None: + return "?" + else: + return ":" + self.returns.lower() + + def sig(self): + return (self.in_sig() + " > " + self.out_sig()).strip() class NebFunction(): -- cgit v1.2.3