AST is working!!!!

This commit is contained in:
SpookyDervish
2025-10-13 17:41:07 +11:00
parent 40d695729f
commit 985af13d6a
6 changed files with 219 additions and 6 deletions

66
AST.py
View File

@@ -40,5 +40,67 @@ class Program(Node):
def json(self) -> dict:
return {
"type": self.type().value,
"statements": []
}
"statements": [{stmt.type().value: stmt.json()} for stmt in self.statements]
}
# region Statements
class ExpressionStatement(Statement):
def __init__(self, expr: Expression = None) -> None:
self.expr: Expression = expr
def type(self) -> NodeType:
return NodeType.ExpressionStatement
def json(self) -> dict:
return {
"type": self.type().value,
"expr": self.expr.json()
}
# endregion
# region Expressions
class InfixExpression(Expression):
def __init__(self, left_node: Expression, operator: str, right_node: Expression = None) -> None:
self.left_node: Expression = left_node
self.operator: str = operator
self.right_node: Expression = right_node
def type(self) -> NodeType:
return NodeType.InfixExpression
def json(self) -> dict:
return {
"type": self.type().value,
"left_node": self.left_node.json(),
"operator": self.operator,
"right_node": self.right_node.json()
}
# endregion
# region Literals
class IntegerLiteral(Expression):
def __init__(self, value: int = None) -> None:
self.value: int = value
def type(self) -> NodeType:
return NodeType.IntegerLiteral
def json(self) -> dict:
return {
"type": self.type().value,
"value": self.value
}
class FloatLiteral(Expression):
def __init__(self, value: float = None) -> None:
self.value: float = value
def type(self) -> NodeType:
return NodeType.FloatLiteral
def json(self) -> dict:
return {
"type": self.type().value,
"value": self.value
}
# endregion