parser isnt liking for statements :(
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, WhileStatement
|
||||
from AST import InfixExpression, CallExpression
|
||||
from AST import InfixExpression, CallExpression, BreakStatement, ContinueStatement, ForStatement
|
||||
from AST import IntegerLiteral, FloatLiteral, IdentifierLiteral, BooleanLiteral, StringLiteral
|
||||
from AST import FunctionParameter
|
||||
|
||||
@@ -138,6 +138,12 @@ class Parser:
|
||||
return self.__parse_return_statement()
|
||||
case TokenType.WHILE:
|
||||
return self.__parse_while_statement()
|
||||
case TokenType.BREAK:
|
||||
return self.__parse_break_statement()
|
||||
case TokenType.CONTINUE:
|
||||
return self.__parse_continue_statement()
|
||||
case TokenType.FOR:
|
||||
return self.__parse_for_statement()
|
||||
case _:
|
||||
return self.__parse_expression_statement()
|
||||
|
||||
@@ -318,6 +324,47 @@ class Parser:
|
||||
body = self.__parse_block_statement()
|
||||
|
||||
return WhileStatement(condition, body)
|
||||
|
||||
def __parse_break_statement(self) -> BreakStatement:
|
||||
self.__next_token()
|
||||
return BreakStatement()
|
||||
|
||||
def __parse_continue_statement(self) -> ContinueStatement:
|
||||
self.__next_token()
|
||||
return ContinueStatement()
|
||||
|
||||
def __parse_for_statement(self) -> ForStatement:
|
||||
stmt: ForStatement = ForStatement()
|
||||
|
||||
if not self.__expect_peek(TokenType.LPAREN):
|
||||
return None
|
||||
|
||||
if not self.__expect_peek(TokenType.IDENT):
|
||||
return None
|
||||
|
||||
stmt.var_declaration = self.__parse_assignment_statement()
|
||||
|
||||
self.__next_token() # skip ;
|
||||
|
||||
stmt.condition = self.__parse_expression(PrecedenceType.P_LOWEST)
|
||||
|
||||
if not self.__expect_peek(TokenType.SEMICOLON):
|
||||
return None
|
||||
|
||||
self.__next_token() # skip ;
|
||||
|
||||
stmt.action = self.__parse_assignment_statement()
|
||||
|
||||
print(stmt.action.json())
|
||||
|
||||
self.__next_token()
|
||||
|
||||
if not self.__expect_peek(TokenType.LBRACE):
|
||||
return None
|
||||
|
||||
stmt.body = self.__parse_block_statement()
|
||||
|
||||
return stmt
|
||||
# endregion
|
||||
|
||||
# region Expression Methods
|
||||
|
||||
Reference in New Issue
Block a user