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