From aa9ec9c0942643ee1bfb8a81af42ac96e3a3f126 Mon Sep 17 00:00:00 2001 From: momoyon Date: Sat, 12 Apr 2025 16:06:21 +0500 Subject: [PATCH] [main.c] Can parse Grouping in primary() --- main.c | 19 ++++++++++--------- main.momo | 2 +- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/main.c b/main.c index daec5cc..6950127 100644 --- 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)) { diff --git a/main.momo b/main.momo index 2d82fcd..a43cf01 100644 --- a/main.momo +++ b/main.momo @@ -1 +1 @@ -1 * 2 / 4 * 3 / 4 * 3 9; +1 * (2 / 1); -- 2.39.5