#include "../ast.h" #include "../parser.h" #ifndef PROG_MAX_NODE_SIZE #define PROG_MAX_NODE_SIZE (1024 * 4) #endif void parse_func(parser_t* parser); void parse_prog(parser_t* parser) { /** * Program := (Declaration | Definition)* * same as * Program := Declaration* Definition* */ tok_stream_t *tokbuf = &(parser->tokbuf); parser->root = new_ast_node(); ast_node_t* node; parser->root->type = NT_ROOT; vector_init(parser->root->root.children); while (1) { flush_peek_tok(tokbuf); if (peek_tok_type(tokbuf) == TOKEN_EOF) { break; } node = parse_decl(parser); if (node == NULL) { parse_func(parser); } else { vector_push(parser->root->root.children, node); } } return; }