diff options
| author | hachem <im@hachem.wtf> | 2026-08-30 13:24:29 +0200 |
|---|---|---|
| committer | hachem <im@hachem.wtf> | 2026-08-30 13:24:29 +0200 |
| commit | 9e979a49b041a9d0e8ba6f8fee50bd11520169af (patch) | |
| tree | f0e5cc0047cfc9c6b11a83175a4e07b7b0917ea7 /src/main.c | |
| parent | 53946c982cb3290a25f7c8529ef1399f0635ef37 (diff) | |
add: parse expressions
Diffstat (limited to 'src/main.c')
| -rw-r--r-- | src/main.c | 26 |
1 files changed, 23 insertions, 3 deletions
@@ -6,6 +6,25 @@ #include "lexer/lexer.h" #include "parser/parser.h" +static void print_expr(struct Expr* expr) +{ + switch (expr->kind) + { + case EXPR_PRIMARY: + printf("%.*s", (int)expr->primary.token.length, expr->primary.token.start); + break; + case EXPR_BINARY: + print_expr(expr->binary.left); + printf(" %.*s ", (int)expr->binary.op.length, expr->binary.op.start); + print_expr(expr->binary.right); + break; + case EXPR_MEMBER: + print_expr(expr->member.object); + printf(".%.*s", (int)expr->member.member.length, expr->member.member.start); + break; + } +} + int main(int argc, char** argv) { struct Args args; @@ -67,11 +86,12 @@ int main(int argc, char** argv) case STATEMENT_ASSIGN: { struct AssignStatement assign = statement.assign; - printf(" %s%.*s %.*s %.*s\n", + printf(" %s%.*s %.*s ", assign.target_deref ? "^" : "", (int)assign.target.length, assign.target.start, - (int)assign.op.length, assign.op.start, - (int)assign.value.length, assign.value.start); + (int)assign.op.length, assign.op.start); + print_expr(assign.value); + printf("\n"); break; } case STATEMENT_LABEL: |
