LEFT_SQUARE_BRACE = auto()
RIGHT_SQUARE_BRACE = auto()
- NUMBER = auto()
+ INT = auto()
+ FLOAT = auto()
COUNT = auto()
token_type_as_str_map: { TokenType : str } = {
TokenType.HASH : "Hash",
TokenType.LEFT_SQUARE_BRACE : "Left Square Brace",
TokenType.RIGHT_SQUARE_BRACE : "Right Square Brace",
- TokenType.NUMBER : "Number"
+ TokenType.INT : "Int",
+ TokenType.FLOAT : "Float",
}
# NOTE: TokenType.COUNT - 1 because auto() starts from 1
-assert len(token_type_as_str_map) == TokenType.COUNT-1
+assert len(token_type_as_str_map) == TokenType.COUNT-1, "Every TokenType is not handled in token_type_as_str_map"
class Token:
def __init__(self, typ: TokenType, lexeme: str, loc: Loc):
return (number, number_loc)
-
def left_trim(self):
while not self.eof() and self.current_char().isspace():
if self.current_char() == '\n':
return Token(TokenType.HASH, self.consume_char(), loc)
elif c.isdigit():
num, loc = self.consume_number()
- return Token(TokenType.NUMBER, num, loc)
+ return Token(TokenType.FLOAT if num.find(".") != -1 else TokenType.INT, num, loc)
else:
fatal(f"Unrecognized character '{c}'")
-"Token (Number, '69', ./tests/07-numbers.momo:1:1)"
-"Token (Number, '100', ./tests/07-numbers.momo:3:1)"
+"Token (Int, '69', ./tests/07-numbers.momo:1:1)"
+"Token (Int, '100', ./tests/07-numbers.momo:3:1)"
-"Token (Number, '69.0', ./tests/08-floating-point-numbers.momo:1:1)"
-"Token (Number, '100.15134324', ./tests/08-floating-point-numbers.momo:2:1)"
-"Token (Number, '420.11', ./tests/08-floating-point-numbers.momo:3:1)"
+"Token (Float, '69.0', ./tests/08-floating-point-numbers.momo:1:1)"
+"Token (Float, '100.15134324', ./tests/08-floating-point-numbers.momo:2:1)"
+"Token (Float, '420.11', ./tests/08-floating-point-numbers.momo:3:1)"