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/parser/ast.h | |
| parent | 53946c982cb3290a25f7c8529ef1399f0635ef37 (diff) | |
add: parse expressions
Diffstat (limited to 'src/parser/ast.h')
| -rw-r--r-- | src/parser/ast.h | 41 |
1 files changed, 40 insertions, 1 deletions
diff --git a/src/parser/ast.h b/src/parser/ast.h index 4604e1a..199d802 100644 --- a/src/parser/ast.h +++ b/src/parser/ast.h @@ -23,6 +23,42 @@ struct Param struct Token reg; }; +enum ExprKind +{ + EXPR_PRIMARY, + EXPR_BINARY, + EXPR_MEMBER, +}; + +struct PrimaryExpr +{ + struct Token token; +}; + +struct BinaryExpr +{ + struct Expr* left; + struct Token op; + struct Expr* right; +}; + +struct MemberExpr +{ + struct Expr* object; + struct Token member; +}; + +struct Expr +{ + enum ExprKind kind; + union + { + struct PrimaryExpr primary; + struct BinaryExpr binary; + struct MemberExpr member; + }; +}; + enum StatementKind { STATEMENT_ASSIGN, @@ -36,7 +72,7 @@ struct AssignStatement bool target_deref; struct Token target; struct Token op; - struct Token value; + struct Expr* value; }; struct LabelStatement @@ -93,6 +129,9 @@ void add_const(struct Program* program, struct ConstDecl decl); void add_data(struct Program* program, struct DataDecl decl); struct ProcDecl create_proc(void); +void free_proc(struct ProcDecl* proc); void add_param(struct ProcDecl* proc, struct Param param); void add_statement(struct ProcDecl* proc, struct Statement statement); void add_proc(struct Program* program, struct ProcDecl decl); + +void free_expr(struct Expr* expr); |
