#include "parser/parser.h" #include #include "ast/ast_accessors.h" #include "lexer/token.h" #include "parser/parser_functions.h" #include "parser/parser_utils.h" struct ast *parse(struct lexer *lexer, enum parser_state *state) { struct token next = lexer_peek(lexer); if (next.type == TOKEN_EOF || next.type == TOKEN_NEWLINE) { lexer_pop(lexer); return NULL; } struct ast *res = parse_list(lexer, state); next = lexer_peek(lexer); if (error_check(res, state, next)) { return NULL; } lexer_pop(lexer); if (next.type == TOKEN_EOF || next.type == TOKEN_NEWLINE) { return res; } else { cleanup(res, state); return NULL; } }