feat(lexer): add comments and whitespace

This commit is contained in:
2026-02-05 03:12:34 +01:00
parent f9232a6bb2
commit 84e9a8bb1e
2 changed files with 16 additions and 6 deletions

View File

@@ -3,7 +3,8 @@ from src.token import Token
def main():
source: str = """(),{;:}.."""
source: str = """() {} +- += / /= // sefs + {, )
}:: *"""
lexer: Lexer = Lexer()
tokens: list[Token] = lexer.process(source)
print(tokens)

View File

@@ -50,9 +50,6 @@ class Lexer:
char: str = self.peek()
self.idx += 1
self.column += 1
if char == "\n":
self.line += 1
self.column = 0
return char
def match(self, expected: str) -> bool:
@@ -95,8 +92,6 @@ class Lexer:
self.add_token(TokenType.PLUS_EQUAL if self.match("=") else TokenType.PLUS)
case "-":
self.add_token(TokenType.MINUS_EQUAL if self.match("=") else TokenType.MINUS)
case "/":
self.add_token(TokenType.SLASH_EQUAL if self.match("=") else TokenType.SLASH)
case "*":
self.add_token(TokenType.STAR_EQUAL if self.match("=") else TokenType.STAR)
case "=":
@@ -107,6 +102,20 @@ class Lexer:
self.add_token(TokenType.GREATER_EQUAL if self.match("=") else TokenType.GREATER)
case "<":
self.add_token(TokenType.LESS_EQUAL if self.match("=") else TokenType.LESS)
case "/":
if self.match("/"):
while self.peek() != "\n" and not self.is_at_end():
self.advance()
self.add_token(TokenType.COMMENT)
else:
self.add_token(TokenType.SLASH_EQUAL if self.match("=") else TokenType.SLASH)
case " " | "\r" | "\t" | "\n":
if char == "\n":
self.line += 1
self.column = 0
while self.peek().isspace() and not self.is_at_end():
self.advance()
self.add_token(TokenType.WHITESPACE)
case _:
self.error("Unexpected character")