INT = auto()
FLOAT = auto()
+
+ BINARY_AND = auto()
+ BINARY_NOT = auto()
+ BINARY_OR = auto()
+ LOGICAL_AND = auto()
+ LOGICAL_OR = 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.BINARY_AND : "Binary And",
+ TokenType.BINARY_OR : "Binary Or",
+ TokenType.BINARY_NOT : "Binary Not",
+ TokenType.LOGICAL_AND : "Logical And",
+ TokenType.LOGICAL_OR : "Logical Or",
TokenType.INT : "Int",
TokenType.FLOAT : "Float",
}
elif c.isdigit():
num, loc = self.consume_number()
return Token(TokenType.FLOAT if num.find(".") != -1 else TokenType.INT, num, loc)
+ elif c == '&':
+ loc = Loc(self.filename, self.line, self.row())
+ # Check if '&&'
+ if self.peek_next_char() == '&':
+ return Token(TokenType.LOGICAL_AND, self.consume_char() + self.consume_char(), loc)
+ return Token(TokenType.BINARY_AND, self.consume_char(), loc)
+ elif c == '|':
+ loc = Loc(self.filename, self.line, self.row())
+ # Check if '||'
+ if self.peek_next_char() == '|':
+ return Token(TokenType.LOGICAL_OR, self.consume_char() + self.consume_char(), loc)
+ return Token(TokenType.BINARY_OR, self.consume_char(), loc)
+ elif c == '~':
+ loc = Loc(self.filename, self.line, self.row())
+ return Token(TokenType.BINARY_NOT, self.consume_char(), loc)
else:
fatal(f"Unrecognized character '{c}'")
-'[ERROR] ./tests/01-unterminated-string.momo:1:21: Unterminated string!'
+[ERROR] ./tests/01-unterminated-string.momo:1:21: Unterminated string!
+++ /dev/null
-() {} [] ->
-- + / * %
-= !
->= > < <= != ==
-, : ; .
-
+++ /dev/null
-"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)"
-"Token (Multiply, '*', ./tests/06-single-char-symbols.momo:2:6)"
-"Token (Modulus, '%', ./tests/06-single-char-symbols.momo:2:8)"
-"Token (Equal, '=', ./tests/06-single-char-symbols.momo:3:0)"
-"Token (Not, '!', ./tests/06-single-char-symbols.momo:3:2)"
-"Token (Greater Than or Equal, '>=', ./tests/06-single-char-symbols.momo:4:0)"
-"Token (Greater Than, '>', ./tests/06-single-char-symbols.momo:4:3)"
-"Token (Less Than, '<', ./tests/06-single-char-symbols.momo:4:5)"
-"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)"
-"Token (Dot, '.', ./tests/06-single-char-symbols.momo:5:6)"
--- /dev/null
+() {} [] ->
+- + / * %
+= !
+>= > < <= != ==
+, : ; .
+
+& | ~
+
+&& ||
+
--- /dev/null
+"Token (Left Paren, '(', ./tests/06-symbols.momo:1:0)"
+"Token (Right Paren, ')', ./tests/06-symbols.momo:1:1)"
+"Token (Left Brace, '{', ./tests/06-symbols.momo:1:3)"
+"Token (Right Brace, '}', ./tests/06-symbols.momo:1:4)"
+"Token (Left Square Brace, '[', ./tests/06-symbols.momo:1:6)"
+"Token (Right Square Brace, ']', ./tests/06-symbols.momo:1:7)"
+"Token (Returner, '->', ./tests/06-symbols.momo:1:9)"
+"Token (Minus, '-', ./tests/06-symbols.momo:2:0)"
+"Token (Plus, '+', ./tests/06-symbols.momo:2:2)"
+"Token (Divide, '/', ./tests/06-symbols.momo:2:4)"
+"Token (Multiply, '*', ./tests/06-symbols.momo:2:6)"
+"Token (Modulus, '%', ./tests/06-symbols.momo:2:8)"
+"Token (Equal, '=', ./tests/06-symbols.momo:3:0)"
+"Token (Not, '!', ./tests/06-symbols.momo:3:2)"
+"Token (Greater Than or Equal, '>=', ./tests/06-symbols.momo:4:0)"
+"Token (Greater Than, '>', ./tests/06-symbols.momo:4:3)"
+"Token (Less Than, '<', ./tests/06-symbols.momo:4:5)"
+"Token (Less Than or Equal, '<=', ./tests/06-symbols.momo:4:7)"
+"Token (Not Equal, '!=', ./tests/06-symbols.momo:4:10)"
+"Token (Equal Equal, '==', ./tests/06-symbols.momo:4:13)"
+"Token (Comma, ',', ./tests/06-symbols.momo:5:0)"
+"Token (Colon, ':', ./tests/06-symbols.momo:5:2)"
+"Token (Semicolon, ';', ./tests/06-symbols.momo:5:4)"
+"Token (Dot, '.', ./tests/06-symbols.momo:5:6)"
+"Token (Binary And, '&', ./tests/06-symbols.momo:7:0)"
+"Token (Binary Or, '|', ./tests/06-symbols.momo:7:2)"
+"Token (Binary Not, '~', ./tests/06-symbols.momo:7:4)"
+"Token (Logical And, '&&', ./tests/06-symbols.momo:9:0)"
+"Token (Logical Or, '||', ./tests/06-symbols.momo:9:3)"