function calls work!!!
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user