feat(parser): split annotation and Midas keywords

This commit is contained in:
2026-05-18 11:33:33 +02:00
parent 8bc0918517
commit e10d71a66b
3 changed files with 15 additions and 4 deletions

View File

@@ -1,4 +1,5 @@
from lexer.base import Lexer from lexer.base import Lexer
from lexer.keyword import ANNOTATION_KEYWORDS
from lexer.token import TokenType from lexer.token import TokenType
@@ -86,7 +87,10 @@ class AnnotationLexer(Lexer):
""" """
while self.peek().isalnum() or self.peek() == "_": while self.peek().isalnum() or self.peek() == "_":
self.advance() self.advance()
self.add_token(TokenType.IDENTIFIER)
lexeme: str = self.source[self.start : self.idx]
token_type: TokenType = ANNOTATION_KEYWORDS.get(lexeme, TokenType.IDENTIFIER)
self.add_token(token_type)
def scan_comment(self): def scan_comment(self):
"""Scan the rest of a comment and add it as a token """Scan the rest of a comment and add it as a token

View File

@@ -1,9 +1,16 @@
from lexer.token import TokenType from lexer.token import TokenType
KEYWORDS: dict[str, TokenType] = { ANNOTATION_KEYWORDS: dict[str, TokenType] = {
"True": TokenType.TRUE,
"False": TokenType.FALSE,
"None": TokenType.NONE,
}
MIDAS_KEYWORDS: dict[str, TokenType] = {
"type": TokenType.TYPE, "type": TokenType.TYPE,
"op": TokenType.OP, "op": TokenType.OP,
"constraint": TokenType.CONSTRAINT, "constraint": TokenType.CONSTRAINT,
"true": TokenType.TRUE, "true": TokenType.TRUE,
"false": TokenType.FALSE, "false": TokenType.FALSE,
"none": TokenType.NONE,
} }

View File

@@ -1,5 +1,5 @@
from lexer.base import Lexer from lexer.base import Lexer
from lexer.keyword import KEYWORDS from lexer.keyword import MIDAS_KEYWORDS
from lexer.token import TokenType from lexer.token import TokenType
@@ -102,7 +102,7 @@ class MidasLexer(Lexer):
self.advance() self.advance()
lexeme: str = self.source[self.start : self.idx] lexeme: str = self.source[self.start : self.idx]
token_type: TokenType = KEYWORDS.get(lexeme, TokenType.IDENTIFIER) token_type: TokenType = MIDAS_KEYWORDS.get(lexeme, TokenType.IDENTIFIER)
self.add_token(token_type) self.add_token(token_type)
def scan_comment(self): def scan_comment(self):