From aad7c835166b9aa13f9a057b21e4cc8d64d2e285 Mon Sep 17 00:00:00 2001 From: ahmedsamyh Date: Sat, 16 Nov 2024 23:00:13 +0500 Subject: [PATCH] Can Parse , ; : too - Update tests. --- main.momo | 1 + main.py | 15 +++++++++++++++ tests/06-single-char-symbols.momo | 1 + tests/06-single-char-symbols.momo.test | 3 +++ 4 files changed, 20 insertions(+) diff --git a/main.momo b/main.momo index 0d54893..305c98f 100644 --- a/main.momo +++ b/main.momo @@ -2,3 +2,4 @@ - + / * % = ! >= > < <= != == +, : ; diff --git a/main.py b/main.py index b53ec07..9e8f376 100644 --- a/main.py +++ b/main.py @@ -55,6 +55,9 @@ class TokenType(IntEnum): LT = auto() GTE = auto() LTE = auto() + COMMA = auto() + COLON = auto() + SEMICOLON = auto() COUNT = auto() token_type_as_str_map: { TokenType : str } = { @@ -78,6 +81,9 @@ token_type_as_str_map: { TokenType : str } = { TokenType.LT : "Less Than", TokenType.GTE : "Greater Than or Equal", TokenType.LTE : "Less Than or Equal", + TokenType.COMMA : "Comma", + TokenType.COLON : "Colon", + TokenType.SEMICOLON : "Semicolon", } # NOTE: TokenType.COUNT - 1 because auto() starts from 1 assert len(token_type_as_str_map) == TokenType.COUNT-1 @@ -236,6 +242,15 @@ class Parser: if self.peek_next_char() == '=': return Token(TokenType.LTE, self.consume_char() + self.consume_char(), loc) return Token(TokenType.LT, self.consume_char(), loc) + elif c == ',': + loc = Loc(self.filename, self.line, self.row()) + return Token(TokenType.COMMA, self.consume_char(), loc) + elif c == ':': + loc = Loc(self.filename, self.line, self.row()) + return Token(TokenType.COLON, self.consume_char(), loc) + elif c == ';': + loc = Loc(self.filename, self.line, self.row()) + return Token(TokenType.SEMICOLON, self.consume_char(), loc) else: fatal(f"Unrecognized character '{c}'") diff --git a/tests/06-single-char-symbols.momo b/tests/06-single-char-symbols.momo index 0d54893..305c98f 100644 --- a/tests/06-single-char-symbols.momo +++ b/tests/06-single-char-symbols.momo @@ -2,3 +2,4 @@ - + / * % = ! >= > < <= != == +, : ; diff --git a/tests/06-single-char-symbols.momo.test b/tests/06-single-char-symbols.momo.test index bf87c03..64ba762 100644 --- a/tests/06-single-char-symbols.momo.test +++ b/tests/06-single-char-symbols.momo.test @@ -16,4 +16,7 @@ "Token (Less Than or Equal, '<=', ./tests/06-single-char-symbols.momo:4:7)" "Token (Not Equal, '!=', ./tests/06-single-char-symbols.momo:4:10)" "Token (Equal Equal, '==', ./tests/06-single-char-symbols.momo:4:13)" +"Token (Comma, ',', ./tests/06-single-char-symbols.momo:5:0)" +"Token (Colon, ':', ./tests/06-single-char-symbols.momo:5:2)" +"Token (Semicolon, ';', ./tests/06-single-char-symbols.momo:5:4)" 'None' -- 2.39.5