file imports work!!!!!

This commit is contained in:
SpookyDervish
2025-10-18 07:21:19 +11:00
parent 24fcbb3fb7
commit 52686fa314
15 changed files with 210 additions and 73 deletions

View File

@@ -5,8 +5,8 @@ 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, PrefixExpression
from AST import BreakStatement, ContinueStatement, ForStatement
from AST import InfixExpression, CallExpression, PrefixExpression, PostfixExpression
from AST import BreakStatement, ContinueStatement, ForStatement, DependStatement
from AST import IntegerLiteral, FloatLiteral, IdentifierLiteral, BooleanLiteral, StringLiteral
from AST import FunctionParameter
@@ -34,7 +34,10 @@ PRECEDENCES: dict[TokenType, PrecedenceType] = {
TokenType.GT: PrecedenceType.P_LESSGREATER,
TokenType.LT_EQ: PrecedenceType.P_LESSGREATER,
TokenType.GT_EQ: PrecedenceType.P_LESSGREATER,
TokenType.DOLLARSIGN: PrecedenceType.P_CALL
TokenType.DOLLARSIGN: PrecedenceType.P_CALL,
TokenType.PLUS_PLUS: PrecedenceType.P_INDEX,
TokenType.MINUS_MINUS: PrecedenceType.P_INDEX
}
class Parser:
@@ -76,6 +79,10 @@ class Parser:
TokenType.GT: self.__parse_infix_expression,
TokenType.LT_EQ: self.__parse_infix_expression,
TokenType.GT_EQ: self.__parse_infix_expression,
TokenType.PLUS_PLUS: self.__parse_postfix_expression,
TokenType.MINUS_MINUS: self.__parse_postfix_expression
}
@@ -158,6 +165,8 @@ class Parser:
return self.__parse_continue_statement()
case TokenType.FOR:
return self.__parse_for_statement()
case TokenType.DEPEND:
return self.__parse_depend_statement()
case _:
return self.__parse_expression_statement()
@@ -372,9 +381,7 @@ class Parser:
self.__next_token() # skip ;
stmt.action = self.__parse_assignment_statement()
stmt.action = self.__parse_expression(PrecedenceType.P_LOWEST)
self.__next_token()
@@ -384,6 +391,17 @@ class Parser:
stmt.body = self.__parse_block_statement()
return stmt
def __parse_depend_statement(self) -> DependStatement:
if not self.__expect_peek(TokenType.STRING):
return None
stmt: DependStatement = DependStatement(self.current_token.literal)
if not self.__expect_peek(TokenType.SEMICOLON):
return None
return stmt
# endregion
# region Expression Methods
@@ -393,9 +411,9 @@ class Parser:
self.__no_prefix_parse_function_error(self.current_token.type)
return None
left_expr: Expression = prefix_func()
while not self.__peek_token_is(TokenType.SEMICOLON) and precedence.value < self.__peek_precedence().value:
infix_func: Callable | None = self.infix_parse_functions.get(self.peek_token.type)
if infix_func is None:
return left_expr
@@ -403,6 +421,7 @@ class Parser:
self.__next_token()
left_expr = infix_func(left_expr)
return left_expr
@@ -457,6 +476,9 @@ class Parser:
prefix_expr.right_node = self.__parse_expression(PrecedenceType.P_PREFIX)
return prefix_expr
def __parse_postfix_expression(self, left_node: Expression) -> PostfixExpression:
return PostfixExpression(left_node, self.current_token.literal)
# endregion
# region Prefix Methods