function calls work!!!

This commit is contained in:
SpookyDervish
2025-10-15 06:59:29 +11:00
parent 170146ee7e
commit 049db7c53a
6 changed files with 119 additions and 15 deletions

View File

@@ -5,7 +5,7 @@ from enum import Enum, auto
from AST import Statement, Expression, Program
from AST import ExpressionStatement, AssignmentStatement, FunctionStatement, ReturnStatement, BlockStatement, ReassignStatement, IfStatement
from AST import InfixExpression
from AST import InfixExpression, CallExpression
from AST import IntegerLiteral, FloatLiteral, IdentifierLiteral, BooleanLiteral
class PrecedenceType(Enum):
@@ -31,7 +31,8 @@ PRECEDENCES: dict[TokenType, PrecedenceType] = {
TokenType.LT: PrecedenceType.P_LESSGREATER,
TokenType.GT: PrecedenceType.P_LESSGREATER,
TokenType.LT_EQ: PrecedenceType.P_LESSGREATER,
TokenType.GT_EQ: PrecedenceType.P_LESSGREATER
TokenType.GT_EQ: PrecedenceType.P_LESSGREATER,
TokenType.LPAREN: PrecedenceType.P_CALL
}
class Parser:
@@ -65,6 +66,7 @@ class Parser:
TokenType.GT: self.__parse_infix_expression,
TokenType.LT_EQ: self.__parse_infix_expression,
TokenType.GT_EQ: self.__parse_infix_expression,
TokenType.LPAREN: self.__parse_call_expression
}
self.__next_token()
@@ -305,6 +307,16 @@ class Parser:
return None
return expr
def __parse_call_expression(self, function: Expression) -> CallExpression:
expr: CallExpression = CallExpression(function=function)
expr.arguments = [] # TODO
if not self.__expect_peek(TokenType.RPAREN):
return None
return expr
# endregion
# region Prefix Methods