Abstract syntax tree

This commit is contained in:
2025-09-02 20:41:17 +10:00
parent 5ebf653342
commit 8d3ffb7b9c
5 changed files with 222 additions and 50 deletions

View File

@@ -7,31 +7,38 @@ class TokenType(Enum):
CHAR = 4
BOOLEAN = 5
FUNCTION = 6
VARIABLE = 7
IF = 8
ELSE = 9
WHILE = 10
LET = 11
END = 12
VARIABLE = 8
IF = 9
ELSE = 10
WHILE = 11
LET = 12
END = 13
ADD = 13
SUBTRACT = 14
MULTIPLY = 15
DIVIDE = 16
ADD = 14
SUBTRACT = 15
MULTIPLY = 16
DIVIDE = 17
SET = 17
SET = 18
EQUAL = 18
GREATER = 19
LESSER = 20
EQUAL = 19
GREATER = 20
LESSER = 21
PARAMOPEN = 22
PARAMCLOSE = 23
ROOT = 24
UNKNOWN = 0
class Token:
def __init__(self, tok: str):
def __init__(self, tok: str, isroot = False):
self.value = tok
self.type = get_type(tok)
if isroot:
self.type = TokenType.ROOT
else:
self.type = get_type(tok)
def __repr__(self) -> str:
return f"Token(type={self.type.name}, value='{self.value}')"
@@ -69,6 +76,10 @@ def get_type(process: str) -> TokenType:
return TokenType.GREATER
case "<":
return TokenType.LESSER
case "(":
return TokenType.PARAMOPEN
case ")":
return TokenType.PARAMCLOSE
# String/Char Literals
if len(process) >= 2: