#ifndef NODE_H #define NODE_H #include enum node_type{PROG, FUNC, STMT, EXPR, CONST}; enum node_op{COMP_SYM, NEG_SYM, PLUS_SYM, MINUS_SYM, MULT_SYM, DIV_SYM, MOD_SYM}; extern const char* node_types[]; extern const char* node_ops[]; typedef union { char *name; int val; enum node_op op; } node_field; typedef struct Node { enum node_type type; node_field field; struct Node **children; size_t num_children; } Node; Node *create_node(enum node_type type); Node *create_function(char *name); Node *create_expr(enum node_op op); Node *create_const(int val); void add_child(Node *parent, Node *child); void free_node(Node *node); void *print_node(Node *node, int indent); #endif