]> www.git.momoyon.org Git - lang.git/commitdiff
Can Parse Binary and Logical Comparisions.
authorahmedsamyh <ahmedsamyh10@gmail.com>
Wed, 20 Nov 2024 11:24:44 +0000 (16:24 +0500)
committerahmedsamyh <ahmedsamyh10@gmail.com>
Wed, 20 Nov 2024 11:24:44 +0000 (16:24 +0500)
main.py
tests/01-unterminated-string.momo.test
tests/06-single-char-symbols.momo [deleted file]
tests/06-single-char-symbols.momo.test [deleted file]
tests/06-symbols.momo [new file with mode: 0644]
tests/06-symbols.momo.test [new file with mode: 0644]

diff --git a/main.py b/main.py
index 8f5a17e42e954af435f62ade840549effb062e21..92eebbe1854351bf8ac285dcb3c5b86312cbbc89 100644 (file)
--- 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}'")
 
index 88b52ed3b4e85c63f0a7d06c1798084d04e419a9..8fca3353a3b8923573e927682bcc124521137fd4 100644 (file)
@@ -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 (file)
index 356da73..0000000
+++ /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 (file)
index 013b553..0000000
+++ /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 (file)
index 0000000..e3c1f3c
--- /dev/null
@@ -0,0 +1,10 @@
+() {} [] ->
+- + / * %
+= !
+>= > < <= != ==
+, : ; .
+
+& | ~
+
+&& ||
+
diff --git a/tests/06-symbols.momo.test b/tests/06-symbols.momo.test
new file mode 100644 (file)
index 0000000..04e9eaf
--- /dev/null
@@ -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)"