LT = auto()
GTE = auto()
LTE = auto()
+ COMMA = auto()
+ COLON = auto()
+ SEMICOLON = auto()
COUNT = auto()
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
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}'")
"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'