aboutsummaryrefslogtreecommitdiff
path: root/src/main.c
diff options
context:
space:
mode:
authorhachem <im@hachem.wtf>2026-08-30 13:24:29 +0200
committerhachem <im@hachem.wtf>2026-08-30 13:24:29 +0200
commit9e979a49b041a9d0e8ba6f8fee50bd11520169af (patch)
treef0e5cc0047cfc9c6b11a83175a4e07b7b0917ea7 /src/main.c
parent53946c982cb3290a25f7c8529ef1399f0635ef37 (diff)
add: parse expressions
Diffstat (limited to 'src/main.c')
-rw-r--r--src/main.c26
1 files changed, 23 insertions, 3 deletions
diff --git a/src/main.c b/src/main.c
index a44350e..b40f90e 100644
--- a/src/main.c
+++ b/src/main.c
@@ -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: