]> www.git.momoyon.org Git - lang.git/commitdiff
[main.c] Can parse multiple Statements*...
authorahmedsamyh <ahmedsamyh10@gmail.com>
Sun, 27 Apr 2025 13:57:29 +0000 (18:57 +0500)
committerahmedsamyh <ahmedsamyh10@gmail.com>
Sun, 27 Apr 2025 13:57:29 +0000 (18:57 +0500)
- Statement is not yet defined but its basically one or more expressions
ending in a semicolon.

main.c
main.momo

diff --git a/main.c b/main.c
index bf2583cfdb4b9677a29de59e2dff5ddd22169036..8aa9c85b9b447995acd99ef5bac56e1e355fa926 100644 (file)
--- a/main.c
+++ b/main.c
@@ -340,6 +340,12 @@ struct Expression {
 void print_expression_as_value(FILE *f, Expression e);
 void print_expression(FILE *f, Expression e);
 
+typedef struct {
+    Expression **items;
+    size_t count;
+    size_t capacity;
+} Expression_refs;
+
 ///
 
 /// Identifiers
@@ -1551,16 +1557,25 @@ int main(int argc, char **argv) {
 
     Arena expr_arena = arena_make(0);
 
-    Expression *expr = expression(&expr_arena, &p);
-
-    if (expr == NULL) return 1;
+    Expression_refs expr_refs = {0};
 
-    if (!parser_match(&p, TK_SEMICOLON)) {
-        error_pretty(parser_peek(&p).loc, (*p.lexer), "Expected semicolon but got '%s'", token_type_as_str(parser_peek(&p).type));
-        return 1;
+    Expression *expr = expression(&expr_arena, &p);
+    while (expr != NULL) {
+        if (!parser_match(&p, TK_SEMICOLON)) {
+            error_pretty(parser_peek(&p).loc, (*p.lexer), "Expected semicolon but got '%s'", token_type_as_str(parser_peek(&p).type));
+            return 1;
+        }
+        da_append(expr_refs, expr);
+        if (parser_eof(&p)) {
+            break;
+        };
+        expr = expression(&expr_arena, &p);
     }
 
-    print_expression(stdout, *expr); printf("\n");
+    for (size_t i = 0; i < expr_refs.count; ++i) {
+        Expression *expr = expr_refs.items[i];
+        print_expression(stdout, *expr); printf("\n");
+    }
 
     arena_free(&expr_arena);
     free_parser(&p);
index 9a849bb6100686d213b179abadd7fcd8daffac8b..adc82c94efa45013165404c639bfa78406b33266 100644 (file)
--- a/main.momo
+++ b/main.momo
@@ -1 +1,2 @@
-1 + (1 0);
+1 / (1 - 0);
+2 * (1 + 3);