#ifndef INTERPRETER_AST_H #define INTERPRETER_AST_H typedef struct { void* elements; unsigned length; } Array; typedef struct { enum { LITERAL, VARIABLE, FUNCTION, } tag; union { int integer; char* variable; struct { char* name; Array args; } function; } data; } Expr; typedef struct { enum { SET, WHILE, EXPR, } tag; union { struct { char* name; Expr expr; } Set; struct { Expr condition; Array block; } While; struct { Expr expr; } Expr; } data; } Stmt; typedef struct { Stmt* stmts; unsigned length; } StmtArray; void print_expr(Expr); void print_ast(StmtArray); #endif