aboutsummaryrefslogtreecommitdiff
path: root/tokens.py
diff options
context:
space:
mode:
authormryouse2022-05-11 03:01:27 +0000
committermryouse2022-05-11 03:01:27 +0000
commitd372f1cca2ae357feb2d4524087dd15646356faa (patch)
tree909b7e7848e1d36527e947fc74519d545239125e /tokens.py
parent99a327a942028ec33e746a7ffbb2a3731cb4a370 (diff)
refactor: only evaluate expressions as needed
Diffstat (limited to 'tokens.py')
-rw-r--r--tokens.py37
1 files changed, 28 insertions, 9 deletions
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():