]> www.git.momoyon.org Git - lang.git/commitdiff
WIP: Improve parseStatement()
authorahmedsamyh <ahmedsamyh10@gmail.com>
Thu, 28 Nov 2024 17:02:26 +0000 (22:02 +0500)
committerahmedsamyh <ahmedsamyh10@gmail.com>
Thu, 28 Nov 2024 17:02:26 +0000 (22:02 +0500)
main.momo
main.py

index 08ac0a156c1416bf6cd9b8d57cfbae1da7da9499..7764457adce91cdbfb088903c0fbc696fe61d439 100644 (file)
--- a/main.momo
+++ b/main.momo
@@ -1 +1,4 @@
-msg: string = 1;
+msg != 0;
+msg: string = "test";
+msg = string;
+// msg: string = "Hello, World";
diff --git a/main.py b/main.py
index 0201fb8d10b4f03e77b5c47d546a0cf2368d2d50..94755404e97da32ed241ca93d321d60ae28c16eb 100644 (file)
--- a/main.py
+++ b/main.py
@@ -542,17 +542,21 @@ class Parser:
         except ParseUnexpectedType:
             pass
 
+        # Didn't have :
         if colon_ast == None:
-            semicolon = self.parseSemicolon()
-            return AstNodeStatement(var_name_ast.token, var_name_ast, None, None)
+            # Have =
+            equal = self.parseEqual()
+            if equal == None:
+                # Only a <name>; statement
+                semicolon = self.parseSemicolon()
+                return AstNodeStatement(var_name_ast.token, var_name_ast, None, None, None)
+            else:
+                return AstNodeStatement(var_name_ast.token, var_name_ast, None, equal, None)
 
         dlog(var_name_ast)
         dlog(colon_ast)
 
-        if len(self.tokens) <= 0: raise ParseEOF(TokenType.EQUAL)
-        if tokens[0].typ != TokenType.EQUAL: raise ParseUnexpectedType(TokenType.EQUAL, tokens[0])
-
-        equal = tokens.pop(0)
+        equal = self.parseEqual()
 
         expr = self.parseExpression()
 
@@ -562,6 +566,13 @@ class Parser:
 
         return AstNodeStatement(var_name_ast.token, var_name_ast, colon_ast, equal, expr)
 
+    def parseEqual(self) -> Token | None:
+        if len(self.tokens) <= 0: raise ParseEOF(TokenType.EQUAL, TokenType.SEMICOLON)
+        if self.tokens[0].typ != TokenType.EQUAL:
+            return None
+            # raise ParseUnexpectedType(TokenType.EQUAL, self.tokens[0])
+        return self.tokens.pop(0)
+
     def parseSemicolon(self) -> Token:
         if len(self.tokens) <= 0: raise ParseEOF(TokenType.SEMICOLON)
         if self.tokens[0].typ != TokenType.SEMICOLON: raise ParseUnexpectedType(self.tokens[0], TokenType.SEMICOLON, TokenType.COLON)