diff options
Diffstat (limited to 'structs.py')
| -rw-r--r-- | structs.py | 108 |
1 files changed, 0 insertions, 108 deletions
diff --git a/structs.py b/structs.py deleted file mode 100644 index b5ea24a..0000000 --- a/structs.py +++ /dev/null @@ -1,108 +0,0 @@ -from dataclasses import dataclass -from enum import Enum, auto -from typing import Any -from typeclass import TypeEnum - -# tokens and types -# NOTE: this can probably be simplified -class TokenType(Enum): - - OPEN_PAREN = auto() - CLOSE_PAREN = auto() - - EOF = auto() - - # literals - INT = auto() - FLOAT = auto() - STRING = auto() - TRUE = auto() - FALSE = auto() - - # keywords - IF = auto() - FOR_COUNT = auto() - DEF = auto() - LAMBDA = auto() - FUNC = auto() - - # symbols - SYMBOL = auto() - - # types - INT_TYPE = auto() - FLOAT_TYPE = auto() - NUMBER_TYPE = auto() - STRING_TYPE = auto() - ANY_TYPE = auto() - LIST_TYPE = auto() - LITERAL_TYPE = auto() - BOOL_TYPE = auto() - - MANY = auto() - -@dataclass -class Token: - type_: TokenType - text: str - value: Any - line: int - - def __str__(self): - return f"{self.type_.name} {self.text} {self.line}" - -class Literal: - def __init__(self, value, type_=None): - self.value = value - if type_ is None: - self.type_ = TypeEnum.ANY - else: - self.type_ = type_ - def __str__(self): - return f"{self.value}:literal" - -class Int(Literal): - def __init__(self, value): - super().__init__(value, TypeEnum.INT) - def __str__(self): - return f"{self.value}" - -class Float(Literal): - def __init__(self, value): - super().__init__(value, TypeEnum.FLOAT) - def __str__(self): - return f"{self.value}" - -class Bool(Literal): - def __init__(self, value): - super().__init__(value, TypeEnum.BOOL) - def __str__(self): - return f"#{str(self.value).lower()}" - -class String(Literal): - def __init__(self, value): - super().__init__(value, TypeEnum.STRING) - def __str__(self): - return f'"{repr(self.value)[1:-1]}"' - -class Type: - def __init__(self, name): - self.name = name - def __str__(self): - return self.name - -class Symbol: - def __init__(self, name, line): - self.name = name - self.line = line - def __str__(self): - return f"'{self.name}" - -class List: - def __init__(self, args, data=False): - self.args = args - self.data = data - self.type_ = TypeEnum.LIST - def __str__(self): - return "(" + " ".join(f"{arg}" for arg in self.args) + ")" - |
