VARIABLESSSS

This commit is contained in:
SpookyDervish
2025-10-13 21:05:03 +11:00
parent 4e17674361
commit f9cd1dba29
17 changed files with 366 additions and 65 deletions

View File

@@ -1,4 +1,4 @@
from lexer_token import Token, TokenType
from lexer_token import Token, TokenType, lookup_ident
from typing import Any
@@ -36,6 +36,9 @@ class Lexer:
def __is_digit(self, char: str) -> bool:
return "0" <= char and char <= "9"
def __is_letter(self, char: str) -> bool:
return "a" <= char and char <= "z" or "A" <= char and char <= "Z" or char == "_"
def __read_number(self) -> Token:
start_pos: int = self.position
dot_count: int = 0
@@ -61,6 +64,13 @@ class Lexer:
else:
return self.__new_token(TokenType.FLOAT, float(output))
def __read_identifier(self) -> str:
position = self.position
while self.current_char is not None and (self.__is_letter(self.current_char) or self.current_char.isalnum()):
self.__read_char()
return self.source[position:self.position]
def next_token(self) -> Token:
tok: Token = None
@@ -79,6 +89,8 @@ class Lexer:
tok = self.__new_token(TokenType.POW, self.current_char)
case "%":
tok = self.__new_token(TokenType.MODULUS, self.current_char)
case "=":
tok = self.__new_token(TokenType.EQ, self.current_char)
case "(":
tok = self.__new_token(TokenType.LPAREN, self.current_char)
case ")":
@@ -98,6 +110,12 @@ class Lexer:
case None:
tok = self.__new_token(TokenType.EOF, "")
case _:
if self.__is_letter(self.current_char):
literal: str = self.__read_identifier()
tt: TokenType = lookup_ident(literal)
tok = self.__new_token(tt, literal)
return tok
if self.__is_digit(self.current_char):
tok = self.__read_number()
return tok