]> www.git.momoyon.org Git - lang.git/commitdiff
[main.c] Can parse Grouping in primary()
authormomoyon <ahmedsamyh10@gmail.com>
Sat, 12 Apr 2025 11:06:21 +0000 (16:06 +0500)
committermomoyon <ahmedsamyh10@gmail.com>
Sat, 12 Apr 2025 11:06:21 +0000 (16:06 +0500)
main.c
main.momo

diff --git a/main.c b/main.c
index daec5cc11af16f4c65eb78752c4fbb952a24247b..6950127d6895a2c2153690f705f81e724fb4d538 100644 (file)
--- a/main.c
+++ b/main.c
@@ -540,12 +540,11 @@ Expression *primary(Arena *arena, Parser *p) {
     // NOTE: We can advance here because primary is the last rule
     Token t = parser_advance(p);
 
-    Expression *expr = (Expression *)arena_alloc(arena, sizeof(Expression));
-    expr->kind = EXPR_PRIMARY;
-    expr->loc = t.loc;
-    expr->prim_expr = (Primary_expression *)arena_alloc(arena, sizeof(Primary_expression));
-
     if (token_is_number(t)) {
+        Expression *expr = (Expression *)arena_alloc(arena, sizeof(Expression));
+        expr->kind = EXPR_PRIMARY;
+        expr->loc = t.loc;
+        expr->prim_expr = (Primary_expression *)arena_alloc(arena, sizeof(Primary_expression));
         if (t.type == TK_INT) {
             int i_count = -1;
             int i = sv_to_int(t.lexeme, &i_count, 10);
@@ -569,9 +568,13 @@ Expression *primary(Arena *arena, Parser *p) {
         ASSERT(false, "UNIMPLEMENTED");
     } else if (t.type == TK_NULL) {
         ASSERT(false, "UNIMPLEMENTED");
+    } else if (t.type == TK_LEFT_PAREN) {
+        /*parser_advance(p); // Skip (*/
+        Expression *expr = factor(arena, p);
+        parser_advance(p); // Skip )
+        return expr;
     }
-    // TODO: Else Grouping
-    //
+    print_token(stdout, t); printf("\n");
     ASSERT(false, "UNREACHABLE!");
 }
 
@@ -594,8 +597,6 @@ Expression *unary(Arena *arena, Parser *p) {
 }
 
 Expression *factor(Arena *arena, Parser *p) {
-    Token t = parser_peek(p);
-
     Expression *expr = unary(arena, p);
 
     while (parser_match_token(p, TK_DIVIDE) || parser_match_token(p, TK_MULTIPLY)) {
index 2d82fcd8f3085cb81890d07423f069ea2d3ea352..a43cf018caa56b18d1cdcdf6570ea965f75fa2a6 100644 (file)
--- a/main.momo
+++ b/main.momo
@@ -1 +1 @@
-1 * 2 / 4 * 3 / 4 * 3 9;
+1 * (2 / 1);