diff options
| author | mryouse | 2022-05-22 20:34:02 +0000 |
|---|---|---|
| committer | mryouse | 2022-05-22 20:34:02 +0000 |
| commit | 28e89dff46b23b2fd73704d46db96b86e7e35e3c (patch) | |
| tree | bd6c8de5d5f302a52855d6896c21c6927d73398b /structs.py | |
| parent | 435934f89b9d3d15b7a22514a40a641d2fe74c31 (diff) | |
refactor: structs into their own file
Diffstat (limited to 'structs.py')
| -rw-r--r-- | structs.py | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/structs.py b/structs.py new file mode 100644 index 0000000..02f2c50 --- /dev/null +++ b/structs.py @@ -0,0 +1,92 @@ +from dataclasses import dataclass +from enum import Enum, auto +from typing import Any + +# tokens and types +# NOTE: this can probably be simplified +class TokenType(Enum): + + PRINT = auto() + + OPEN_PAREN = auto() + CLOSE_PAREN = auto() + + EOF = auto() + + # literals + INT = auto() + FLOAT = auto() + STRING = auto() + TRUE = auto() + FALSE = auto() + + # arithmetic + PLUS = auto() + DASH = auto() + STAR = auto() + SLASH = auto() + + # strings + DOUBLE_QUOTE = auto() + + # comparison + GREATER = auto() + GREATER_EQUAL = auto() + LESS = auto() + LESS_EQUAL = auto() + EQUAL = auto() + NOT = auto() + AND = auto() + OR = auto() + + # flow + IF = auto() + FOR_COUNT = auto() + PIPE = auto() + + # keywords + DEF = auto() + LAMBDA = auto() + + # symbols + SYMBOL = auto() + + # types + INT_TYPE = auto() + FLOAT_TYPE = auto() + STRING_TYPE = auto() + ANY_TYPE = 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): + self.value = value + def __str__(self): + return f"{self.value}" + +class Type: + def __init__(self, name): + self.name = name + def __str__(self): + return self.name + +class Symbol: + def __init__(self, name): + self.name = name + def __str__(self): + return f"'{self.name}" + +class List: + def __init__(self, args): + self.args = args + def __str__(self): + return "(" + " ".join(f"{arg}" for arg in self.args) + ")" |
