diff --git a/lexer/keyword.py b/lexer/keyword.py index 2ab3f45..e5c4b64 100644 --- a/lexer/keyword.py +++ b/lexer/keyword.py @@ -3,7 +3,9 @@ from lexer.token import TokenType KEYWORDS: dict[str, TokenType] = { "type": TokenType.TYPE, "op": TokenType.OP, - "constraint": TokenType.CONSTRAINT, + "predicate": TokenType.PREDICATE, + "extend": TokenType.EXTEND, + "where": TokenType.WHERE, "true": TokenType.TRUE, "false": TokenType.FALSE, "none": TokenType.NONE, diff --git a/lexer/midas.py b/lexer/midas.py index b366f09..be3bfdf 100644 --- a/lexer/midas.py +++ b/lexer/midas.py @@ -31,30 +31,32 @@ class MidasLexer(Lexer): self.add_token( TokenType.EQUAL_EQUAL if self.match("=") else TokenType.EQUAL ) - case "!": - if self.match("="): - self.add_token(TokenType.BANG_EQUAL) - else: - self.error("Unexpected single bang. Did you mean '!=' ?") + case "!" if self.match("="): + self.add_token(TokenType.BANG_EQUAL) case ":": self.add_token(TokenType.COLON) - case ",": - self.add_token(TokenType.COMMA) + case ".": + self.add_token(TokenType.DOT) + case "&": + self.add_token(TokenType.AND) + case "?": + self.add_token(TokenType.QMARK) + # case ",": + # self.add_token(TokenType.COMMA) case "_": self.add_token(TokenType.UNDERSCORE) - case "+": - self.add_token(TokenType.PLUS) + case "-" if self.match(">"): + self.add_token(TokenType.ARROW) + # case "+": + # self.add_token(TokenType.PLUS) case "-": self.add_token(TokenType.MINUS) - case "*": - self.add_token(TokenType.STAR) - case "/": - if self.match("/"): - self.scan_comment() - elif self.match("*"): - self.scan_comment_multiline() - else: - self.add_token(TokenType.SLASH) + # case "*": + # self.add_token(TokenType.STAR) + case "/" if self.match("/"): + self.scan_comment() + case "/" if self.match("*"): + self.scan_comment_multiline() case "\n": self.add_token(TokenType.NEWLINE) case " " | "\r" | "\t": diff --git a/lexer/token.py b/lexer/token.py index 70a7a1b..1097493 100644 --- a/lexer/token.py +++ b/lexer/token.py @@ -14,14 +14,18 @@ class TokenType(Enum): LEFT_BRACE = auto() RIGHT_BRACE = auto() COLON = auto() - COMMA = auto() + # COMMA = auto() UNDERSCORE = auto() + ARROW = auto() + AND = auto() + QMARK = auto() + DOT = auto() # Operators - PLUS = auto() + # PLUS = auto() MINUS = auto() - STAR = auto() - SLASH = auto() + # STAR = auto() + # SLASH = auto() GREATER = auto() GREATER_EQUAL = auto() LESS = auto() @@ -40,7 +44,9 @@ class TokenType(Enum): # Keywords TYPE = auto() OP = auto() - CONSTRAINT = auto() + PREDICATE = auto() + EXTEND = auto() + WHERE = auto() # Misc COMMENT = auto()