diff options
| author | mryouse | 2022-05-11 01:52:25 +0000 | 
|---|---|---|
| committer | mryouse | 2022-05-11 01:52:25 +0000 | 
| commit | 99a327a942028ec33e746a7ffbb2a3731cb4a370 (patch) | |
| tree | 363b5af54cb1dc421b1e4195cad8af3c407fb4df | |
| parent | ee318d229463b1b963862f3bda9e2cdddd604a67 (diff) | |
start enhancing types
| -rw-r--r-- | tokens.py | 40 | 
1 files changed, 25 insertions, 15 deletions
| @@ -6,22 +6,27 @@ T = TypeVar("T", int, float, str, bool)  # classes  class NebType(Enum): +    ANY = auto()      INT = auto()      FLOAT = auto() +    NUMBER = auto()      STRING = auto()      BOOL = auto() +    EXPR = auto() +    SYMBOL = auto()      def __str__(self):          return ":" + self.name.lower()  @dataclass  class NebToken: -    pass +    type_: NebType -@dataclass  class NebLiteral(NebToken): -    type_: NebType -    value: T + +    def __init__(self, type_, value): +        super().__init__(type_) +        self.value = value      def __str__(self):          fixed = str(self.value) @@ -31,7 +36,7 @@ class NebLiteral(NebToken):              fixed = f'"{self.value}"'          return f"{fixed} <{self.type_}>" -class NebSeparator(NebToken): +class NebSeparator():      pass  class NebOpen(NebSeparator): @@ -40,14 +45,18 @@ class NebOpen(NebSeparator):  class NebClose(NebSeparator):      pass -@dataclass  class NebSymbol(NebToken): -    name: str -@dataclass +    def __init__(self, name): +        super().__init__(NebType.SYMBOL) +        self.name = name +  class NebExpression(NebToken): -    symbol: NebSymbol -    args: List[NebToken] + +    def __init__(self, symbol, args): +        super().__init__(NebType.EXPR) +        self.symbol = symbol +        self.args = args      def maybe_sig(self):          out = [] @@ -58,11 +67,12 @@ class NebExpression(NebToken):                  raise Exception("expressions must have a list of literals") #TODO not true          return " ".join(out) -@dataclass -class NebFunction(NebToken): -    name: str -    args: List[NebType] -    returns: NebType +class NebFunction(): + +    def __init__(self, name, args, returns): +        self.name = name +        self.args = args +        self.returns = returns      def in_sig(self):          return " ".join(":" + x.name.lower() for x in self.args) | 
