diff options
Diffstat (limited to 'tokens.py')
| -rw-r--r-- | tokens.py | 68 |
1 files changed, 43 insertions, 25 deletions
@@ -16,25 +16,36 @@ class NebType(Enum): SYMBOL = auto() def __str__(self): - return ":" + self.name.lower() + return self.name.lower() -@dataclass -class NebToken: - type_: NebType +class NebBaseType: -class NebLiteral(NebToken): + def __init__(self, type_name, type_): + self.type_name = type_name + self.type_ = type_ - def __init__(self, type_, value): - super().__init__(type_) + def __str__(self): + return f":{self.type_name}" + +class NebAny(NebBaseType): + def __init__(self, type_name, type_): + super().__init__("any", NebType.ANY) + +class NebLiteral(NebBaseType): + + def __init__(self, type_name, type_, value): + super().__init__(type_name, type_) self.value = value def __str__(self): fixed = str(self.value) - if self.type_ == NebType.BOOL: + #if self.type_ == NebBaseType.BOOL: + if isinstance(self, NebBool): fixed = f"#{str(self.value).lower()}" - elif self.type_ == NebType.STRING: + #elif self.type_ == NebBaseType.STRING: + elif isinstance(self, NebString): fixed = f'"{self.value}"' - return f"{fixed} <{self.type_}>" + return f"{fixed} <:{self.type_name}>" class NebSeparator(): pass @@ -47,19 +58,19 @@ class NebClose(NebSeparator): def __str__(self): return ")" -class NebSymbol(NebToken): +class NebSymbol(NebBaseType): def __init__(self, name): - super().__init__(NebType.SYMBOL) + super().__init__("symbol", NebType.SYMBOL) self.name = name def __str__(self): return f"'{self.name}" -class NebExpression(NebToken): +class NebExpression(NebBaseType): def __init__(self, symbol, args): - super().__init__(NebType.EXPR) + super().__init__("expr", NebType.EXPR) self.symbol = symbol self.args = args self.returns = None @@ -71,7 +82,7 @@ class NebExpression(NebToken): out = f"({self.symbol}" for arg in self.args: out += f" {arg}" - out += f") <{self.type_}> -> <{self.out_sig()}>" + out += f") <:{self.type_}> -> <{self.out_sig()}>" return out def in_sig(self): @@ -83,9 +94,6 @@ class NebExpression(NebToken): else: return ":" + self.returns.lower() - def sig(self): - return (self.in_sig() + " > " + self.out_sig()).strip() - class NebFunction(): def __init__(self, name, args, returns): @@ -93,12 +101,22 @@ class NebFunction(): self.args = args self.returns = returns - def in_sig(self): - return " ".join(":" + x.name.lower() for x in self.args) - - def out_sig(self): - return ":" + self.returns.lower() +class NebBool(NebLiteral): + def __init__(self, value): + super().__init__("bool", NebType.BOOL, value) + +class NebString(NebLiteral): + def __init__(self, value): + super().__init__("string", NebType.STRING, value) + +class NebNumber(NebLiteral): + pass + +class NebInt(NebNumber): + def __init__(self, value): + super().__init__("int", NebType.INT, value) - def sig(self): - return (self.in_sig() + " > " + self.out_sig()).strip() +class NebFloat(NebNumber): + def __init__(self, value): + super().__init__("float", NebType.FLOAT, value) |
