From: ahmedsamyh Date: Wed, 20 Nov 2024 11:24:44 +0000 (+0500) Subject: Can Parse Binary and Logical Comparisions. X-Git-Url: https://www.git.momoyon.org/?a=commitdiff_plain;h=19e79b646be33b6a59a938b92f218cda3017040a;p=lang.git Can Parse Binary and Logical Comparisions. --- diff --git a/main.py b/main.py index 8f5a17e..92eebbe 100644 --- a/main.py +++ b/main.py @@ -66,6 +66,13 @@ class TokenType(IntEnum): 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 } = { @@ -96,6 +103,11 @@ 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", } @@ -300,6 +312,21 @@ class Lexer: 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}'") diff --git a/tests/01-unterminated-string.momo.test b/tests/01-unterminated-string.momo.test index 88b52ed..8fca335 100644 --- a/tests/01-unterminated-string.momo.test +++ b/tests/01-unterminated-string.momo.test @@ -1 +1 @@ -'[ERROR] ./tests/01-unterminated-string.momo:1:21: Unterminated string!' +[ERROR] ./tests/01-unterminated-string.momo:1:21: Unterminated string! diff --git a/tests/06-single-char-symbols.momo b/tests/06-single-char-symbols.momo deleted file mode 100644 index 356da73..0000000 --- a/tests/06-single-char-symbols.momo +++ /dev/null @@ -1,6 +0,0 @@ -() {} [] -> -- + / * % -= ! ->= > < <= != == -, : ; . - diff --git a/tests/06-single-char-symbols.momo.test b/tests/06-single-char-symbols.momo.test deleted file mode 100644 index 013b553..0000000 --- a/tests/06-single-char-symbols.momo.test +++ /dev/null @@ -1,24 +0,0 @@ -"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)" diff --git a/tests/06-symbols.momo b/tests/06-symbols.momo new file mode 100644 index 0000000..e3c1f3c --- /dev/null +++ b/tests/06-symbols.momo @@ -0,0 +1,10 @@ +() {} [] -> +- + / * % += ! +>= > < <= != == +, : ; . + +& | ~ + +&& || + diff --git a/tests/06-symbols.momo.test b/tests/06-symbols.momo.test new file mode 100644 index 0000000..04e9eaf --- /dev/null +++ b/tests/06-symbols.momo.test @@ -0,0 +1,29 @@ +"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)"