while loops work!

This commit is contained in:
SpookyDervish
2025-10-15 18:44:15 +11:00
parent 549f650b54
commit 9f6fff9977
7 changed files with 155 additions and 86 deletions

View File

@@ -4,7 +4,7 @@ from typing import Callable
from enum import Enum, auto
from AST import Statement, Expression, Program
from AST import ExpressionStatement, AssignmentStatement, FunctionStatement, ReturnStatement, BlockStatement, ReassignStatement, IfStatement
from AST import ExpressionStatement, AssignmentStatement, FunctionStatement, ReturnStatement, BlockStatement, ReassignStatement, IfStatement, WhileStatement
from AST import InfixExpression, CallExpression
from AST import IntegerLiteral, FloatLiteral, IdentifierLiteral, BooleanLiteral, StringLiteral
from AST import FunctionParameter
@@ -136,6 +136,8 @@ class Parser:
return self.__parse_assignment_statement()
case TokenType.RETURN:
return self.__parse_return_statement()
case TokenType.WHILE:
return self.__parse_while_statement()
case _:
return self.__parse_expression_statement()
@@ -301,6 +303,21 @@ class Parser:
alternative = self.__parse_block_statement()
return IfStatement(condition, consequence, alternative)
def __parse_while_statement(self) -> WhileStatement:
condition: Expression = None
body: BlockStatement = None
self.__next_token()
condition = self.__parse_expression(PrecedenceType.P_LOWEST)
if not self.__expect_peek(TokenType.LBRACE):
return None
body = self.__parse_block_statement()
return WhileStatement(condition, body)
# endregion
# region Expression Methods