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
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}'")
-"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)"