diff options
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(): | 
