IT WORKS
This commit is contained in:
@@ -33,7 +33,7 @@ PRECEDENCES: dict[TokenType, PrecedenceType] = {
|
||||
TokenType.GT: PrecedenceType.P_LESSGREATER,
|
||||
TokenType.LT_EQ: PrecedenceType.P_LESSGREATER,
|
||||
TokenType.GT_EQ: PrecedenceType.P_LESSGREATER,
|
||||
TokenType.LPAREN: PrecedenceType.P_CALL
|
||||
TokenType.DOLLARSIGN: PrecedenceType.P_CALL
|
||||
}
|
||||
|
||||
class Parser:
|
||||
@@ -56,6 +56,8 @@ class Parser:
|
||||
TokenType.FALSE: self.__parse_boolean,
|
||||
|
||||
TokenType.STRING: self.__parse_string_literal,
|
||||
|
||||
TokenType.DOLLARSIGN: self.__parse_call_expression
|
||||
}
|
||||
self.infix_parse_functions: dict[Token, Callable] = { # 5 + 5
|
||||
TokenType.PLUS: self.__parse_infix_expression,
|
||||
@@ -70,7 +72,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()
|
||||
@@ -340,13 +342,6 @@ class Parser:
|
||||
return None
|
||||
|
||||
return expr
|
||||
|
||||
def __parse_call_expression(self, function: Expression) -> CallExpression:
|
||||
expr: CallExpression = CallExpression(function=function)
|
||||
|
||||
expr.arguments = self.__parse_expression_list(TokenType.RPAREN)
|
||||
|
||||
return expr
|
||||
|
||||
def __parse_expression_list(self, end: TokenType) -> list[Expression]:
|
||||
e_list: list[Expression] = []
|
||||
@@ -372,6 +367,15 @@ class Parser:
|
||||
# endregion
|
||||
|
||||
# region Prefix Methods
|
||||
def __parse_call_expression(self) -> CallExpression:
|
||||
self.__next_token()
|
||||
expr: CallExpression = CallExpression(function=self.__parse_expression(PrecedenceType.P_LOWEST))
|
||||
self.__next_token()
|
||||
|
||||
expr.arguments = self.__parse_expression_list(TokenType.RPAREN)
|
||||
|
||||
return expr
|
||||
|
||||
def __parse_identifier(self) -> IdentifierLiteral:
|
||||
return IdentifierLiteral(value=self.current_token.literal)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user