diff options
| author | mryouse | 2022-05-11 03:01:27 +0000 |
|---|---|---|
| committer | mryouse | 2022-05-11 03:01:27 +0000 |
| commit | d372f1cca2ae357feb2d4524087dd15646356faa (patch) | |
| tree | 909b7e7848e1d36527e947fc74519d545239125e /tokens.py | |
| parent | 99a327a942028ec33e746a7ffbb2a3731cb4a370 (diff) | |
refactor: only evaluate expressions as needed
Diffstat (limited to 'tokens.py')
| -rw-r--r-- | tokens.py | 37 |
1 files changed, 28 insertions, 9 deletions
@@ -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(): |
