#ifndef AST_H #define AST_H #include "lexer.h" typedef struct node_t *ast_t; struct ast_node { enum { NODE_SEXP, NODE_SYMBOL, NODE_LITERAL, } type; union { struct sexp { struct ast_node **children; size_t nchildren; } sexp; char *symbol; union { enum { NODE_LITERAL_NUM, NODE_LITERAL_STR, } type; int number; char *string; } literal; }; }; ast_t ast_create(); void ast_destroy(ast_t ast); int ast_parse_lexer(ast_t ast, lexer_t lex); #endif