fix(lexer): correct token positions
This commit is contained in:
20
src/lexer.py
20
src/lexer.py
@@ -13,8 +13,8 @@ class Lexer:
|
||||
self.start: int = 0
|
||||
self.idx: int = 0
|
||||
self.length: int = 0
|
||||
self.line: int = 0
|
||||
self.column: int = 0
|
||||
self.line: int = 1
|
||||
self.column: int = 1
|
||||
self.start_pos: Position = self.get_position()
|
||||
|
||||
def error(self, msg: str):
|
||||
@@ -27,8 +27,8 @@ class Lexer:
|
||||
self.start = 0
|
||||
self.idx = 0
|
||||
self.length = len(self.source)
|
||||
self.line = 0
|
||||
self.column = 0
|
||||
self.line = 1
|
||||
self.column = 1
|
||||
|
||||
while not self.is_at_end():
|
||||
self.start_pos = self.get_position()
|
||||
@@ -59,8 +59,14 @@ class Lexer:
|
||||
char: str = self.peek()
|
||||
self.idx += 1
|
||||
self.column += 1
|
||||
if char == "\n":
|
||||
self.newline()
|
||||
return char
|
||||
|
||||
def newline(self):
|
||||
self.line += 1
|
||||
self.column = 1
|
||||
|
||||
def match(self, expected: str) -> bool:
|
||||
if self.peek() == expected:
|
||||
self.advance()
|
||||
@@ -119,9 +125,6 @@ class Lexer:
|
||||
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)
|
||||
@@ -138,9 +141,6 @@ class Lexer:
|
||||
|
||||
def scan_string(self):
|
||||
while self.peek() != '"' and not self.is_at_end():
|
||||
if self.peek() == "\n":
|
||||
self.line += 1
|
||||
self.column = 0
|
||||
self.advance()
|
||||
|
||||
if self.is_at_end():
|
||||
|
||||
Reference in New Issue
Block a user