parser isnt liking for statements :(

This commit is contained in:
SpookyDervish
2025-10-16 07:24:40 +11:00
parent 9f6fff9977
commit 600bebb9b2
6 changed files with 153 additions and 11 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, 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