feat(lexer): add operators
This commit is contained in:
43
src/lexer.py
43
src/lexer.py
@@ -75,15 +75,40 @@ class Lexer:
|
||||
def scan_token(self):
|
||||
char: str = self.advance()
|
||||
match char:
|
||||
case "(": self.add_token(TokenType.LEFT_PAREN)
|
||||
case ")": self.add_token(TokenType.RIGHT_PAREN)
|
||||
case "{": self.add_token(TokenType.LEFT_BRACE)
|
||||
case "}": self.add_token(TokenType.RIGHT_BRACE)
|
||||
case ",": self.add_token(TokenType.COMMA)
|
||||
case ".": self.add_token(TokenType.DOT)
|
||||
case ";": self.add_token(TokenType.SEMICOLON)
|
||||
case ":": self.add_token(TokenType.COLON)
|
||||
case _: self.error("Unexpected character")
|
||||
case "(":
|
||||
self.add_token(TokenType.LEFT_PAREN)
|
||||
case ")":
|
||||
self.add_token(TokenType.RIGHT_PAREN)
|
||||
case "{":
|
||||
self.add_token(TokenType.LEFT_BRACE)
|
||||
case "}":
|
||||
self.add_token(TokenType.RIGHT_BRACE)
|
||||
case ",":
|
||||
self.add_token(TokenType.COMMA)
|
||||
case ".":
|
||||
self.add_token(TokenType.DOT)
|
||||
case ";":
|
||||
self.add_token(TokenType.SEMICOLON)
|
||||
case ":":
|
||||
self.add_token(TokenType.COLON)
|
||||
case "+":
|
||||
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 "=":
|
||||
self.add_token(TokenType.EQUAL_EQUAL if self.match("=") else TokenType.EQUAL)
|
||||
case "!":
|
||||
self.add_token(TokenType.BANG_EQUAL if self.match("=") else TokenType.BANG)
|
||||
case ">":
|
||||
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 _:
|
||||
self.error("Unexpected character")
|
||||
|
||||
return None
|
||||
|
||||
|
||||
Reference in New Issue
Block a user