#pragma once #include #include "globals.h" #include "lex.h" typedef struct Parser { Lexer *lexer; Token current; Token peek; int flag_error; } Parser; Parser *parser_new(Lexer *lexer); void parser_free(Parser *parser); static void parser_next(Parser *parser); static void parser_expect(Parser *parser, TokenType type); /* PARSER PARSE FUNCTIONS */ ASTNode *parser_parse_program(Parser *parser); ASTNode *parser_parse_defn(Parser *parser); ASTNode *parser_parse_type(Parser *parser); ASTNode *parser_parse_expr(Parser *parser); ASTNode *parser_parse_atom(Parser *parser); ASTNode *parser_parse_stmt(Parser *parser); ASTNode *parser_parse_block(Parser *parser); ASTNode *parser_parse_lambda(Parser *parser); ASTNode *parser_parse_compound(Parser *parser); ASTNode *parser_parse_params(Parser *parser);