From 7d9fb2c733c8c64f6f74eefa0eea35b36be102cd Mon Sep 17 00:00:00 2001 From: Carson Fleming Date: Thu, 26 Mar 2026 16:21:29 -0400 Subject: let's go we can parse return zero most useful program ever --- ast.h | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 ast.h (limited to 'ast.h') diff --git a/ast.h b/ast.h new file mode 100644 index 0000000..c82f089 --- /dev/null +++ b/ast.h @@ -0,0 +1,77 @@ +#ifndef AST_H +#define AST_H + +struct stmt_node; +struct expr_node; + +struct type_node { + char* type; +}; + +struct var_decl_node { + struct type_node type; + char* ident; + + struct var_decl_node* next; +}; + +struct group_node { + struct stmt_node* body_head; +}; + +struct fn_decl_node { + struct type_node return_type; + char* name; + struct var_decl_node* args_head; + struct group_node body; +}; + +struct return_node { + struct expr_node* ret_val; /* null to return void */ +}; + +struct int_lit_node { + long long val; +}; + +struct expr_node { + enum { + EXPR_EMPTY, + EXPR_VAR_DECL, + EXPR_RETURN, + EXPR_INT_LIT, + } type; + union { + struct var_decl_node _var_decl; + struct return_node _return; + struct int_lit_node _int_lit; + } as; +}; + +struct stmt_node { + enum { + STMT_EXPR, + STMT_GROUP, + } type; + union { + struct expr_node _expr; + struct group_node _group; + } as; + + struct stmt_node* next; +}; + +struct root_node { + enum { + ROOT_FN_DECL, + } type; + union { + struct fn_decl_node _fn_decl; + } as; + + struct root_node* next; +}; + +void ast_destroy(struct root_node* head); + +#endif -- cgit v1.2.3