From: ahmedsamyh Date: Sat, 16 Nov 2024 18:07:11 +0000 (+0500) Subject: Can parse []. X-Git-Url: https://www.git.momoyon.org/?a=commitdiff_plain;h=8b7aaa26e27965db530f3af14bc160f7e0b015ec;p=lang.git Can parse []. - Update tests. --- diff --git a/main.momo b/main.momo index 305c98f..41c73a8 100644 --- a/main.momo +++ b/main.momo @@ -1,5 +1,6 @@ -( ) {} -> +() {} [] -> - + / * % = ! >= > < <= != == , : ; + diff --git a/main.py b/main.py index 9e8f376..c8be475 100644 --- a/main.py +++ b/main.py @@ -58,32 +58,36 @@ class TokenType(IntEnum): COMMA = auto() COLON = auto() SEMICOLON = auto() + LEFT_SQUARE_BRACE = auto() + RIGHT_SQUARE_BRACE = auto() COUNT = auto() token_type_as_str_map: { TokenType : str } = { - TokenType.IDENT : "Ident", - TokenType.STRING : "String", - TokenType.LEFT_PAREN : "Left paren", - TokenType.RIGHT_PAREN : "Right paren", - TokenType.MINUS : "Minus", - TokenType.LEFT_BRACE : "Left brace", - TokenType.RIGHT_BRACE : "Right brace", - TokenType.RETURNER : "Returner", - TokenType.PLUS : "Plus", - TokenType.DIVIDE : "Divide", - TokenType.MULTIPLY : "Multiply", - TokenType.MODULUS : "Modulus", - TokenType.EQUAL : "Equal", - TokenType.NOT : "Not", - TokenType.NOT_EQUAL : "Not Equal", - TokenType.EQUAL_EQUAL : "Equal Equal", - TokenType.GT : "Greater Than", - 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", + TokenType.IDENT : "Ident", + TokenType.STRING : "String", + TokenType.LEFT_PAREN : "Left Paren", + TokenType.RIGHT_PAREN : "Right Paren", + TokenType.MINUS : "Minus", + TokenType.LEFT_BRACE : "Left Brace", + TokenType.RIGHT_BRACE : "Right Brace", + TokenType.RETURNER : "Returner", + TokenType.PLUS : "Plus", + TokenType.DIVIDE : "Divide", + TokenType.MULTIPLY : "Multiply", + TokenType.MODULUS : "Modulus", + TokenType.EQUAL : "Equal", + TokenType.NOT : "Not", + TokenType.NOT_EQUAL : "Not Equal", + TokenType.EQUAL_EQUAL : "Equal Equal", + TokenType.GT : "Greater Than", + 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", + TokenType.LEFT_SQUARE_BRACE : "Left Square Brace", + TokenType.RIGHT_SQUARE_BRACE : "Right Square Brace", } # NOTE: TokenType.COUNT - 1 because auto() starts from 1 assert len(token_type_as_str_map) == TokenType.COUNT-1 @@ -251,6 +255,12 @@ class Parser: elif c == ';': loc = Loc(self.filename, self.line, self.row()) return Token(TokenType.SEMICOLON, self.consume_char(), loc) + elif c == '[': + loc = Loc(self.filename, self.line, self.row()) + return Token(TokenType.LEFT_SQUARE_BRACE, self.consume_char(), loc) + elif c == ']': + loc = Loc(self.filename, self.line, self.row()) + return Token(TokenType.RIGHT_SQUARE_BRACE, 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 305c98f..41c73a8 100644 --- a/tests/06-single-char-symbols.momo +++ b/tests/06-single-char-symbols.momo @@ -1,5 +1,6 @@ -( ) {} -> +() {} [] -> - + / * % = ! >= > < <= != == , : ; + diff --git a/tests/06-single-char-symbols.momo.test b/tests/06-single-char-symbols.momo.test index 64ba762..7ff8f6f 100644 --- a/tests/06-single-char-symbols.momo.test +++ b/tests/06-single-char-symbols.momo.test @@ -1,8 +1,10 @@ -"Token (Left paren, '(', ./tests/06-single-char-symbols.momo:1:0)" -"Token (Right paren, ')', ./tests/06-single-char-symbols.momo:1:2)" -"Token (Left brace, '{', ./tests/06-single-char-symbols.momo:1:4)" -"Token (Right brace, '}', ./tests/06-single-char-symbols.momo:1:5)" -"Token (Returner, '->', ./tests/06-single-char-symbols.momo:1:7)" +"Token (Left Paren, '(', ./tests/06-single-char-symbols.momo:1:0)" +"Token (Right Paren, ')', ./tests/06-single-char-symbols.momo:1:1)" +"Token (Left Brace, '{', ./tests/06-single-char-symbols.momo:1:3)" +"Token (Right Brace, '}', ./tests/06-single-char-symbols.momo:1:4)" +"Token (Left Square Brace, '[', ./tests/06-single-char-symbols.momo:1:6)" +"Token (Right Square Brace, ']', ./tests/06-single-char-symbols.momo:1:7)" +"Token (Returner, '->', ./tests/06-single-char-symbols.momo:1:9)" "Token (Minus, '-', ./tests/06-single-char-symbols.momo:2:0)" "Token (Plus, '+', ./tests/06-single-char-symbols.momo:2:2)" "Token (Divide, '/', ./tests/06-single-char-symbols.momo:2:4)"