From 84e9a8bb1ecc2e6ed4cd4a669fd06562b1c8a326 Mon Sep 17 00:00:00 2001 From: LordBaryhobal Date: Thu, 5 Feb 2026 03:12:34 +0100 Subject: [PATCH] feat(lexer): add comments and whitespace --- main.py | 3 ++- src/lexer.py | 19 ++++++++++++++----- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/main.py b/main.py index 173ca3c..26151f9 100644 --- a/main.py +++ b/main.py @@ -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) diff --git a/src/lexer.py b/src/lexer.py index e51105f..4384741 100644 --- a/src/lexer.py +++ b/src/lexer.py @@ -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")