feat(lexer): add comments and whitespace
This commit is contained in:
3
main.py
3
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)
|
||||
|
||||
19
src/lexer.py
19
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")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user