parser.h (1924B)
1 #pragma once 2 3 #include "types.h" 4 5 #include <stdlib.h> 6 #include <stdbool.h> 7 8 #define IDENTSZ 256 9 10 Parser parser_init(Lexer*); 11 void parser_parse(Ast*, Parser*); 12 void ast_print(Ast*); 13 14 Token peek(Parser*); 15 Token peek2(Parser*); 16 Token consume(Parser*); 17 Token expect(Parser*, TokenType); 18 bool match(Parser*, TokenType); 19 bool check(Parser*, TokenType); 20 21 Node* parse_declarations(Parser*); 22 23 Node* parse_number(Parser*); 24 Node* parse_ident(Parser*); 25 Node* parse_primary(Parser*); 26 Node* parse_postfix(Parser*); 27 Node* parse_primary(Parser*); 28 Node* parse_unary(Parser*); 29 Node* parse_term(Parser*); 30 Node* parse_expression(Parser*); 31 Node* parse_expression_statement(Parser*); 32 Node* parse_assignment_expr(Parser*); 33 Node* parse_statement(Parser*); 34 Node* parse_block(Parser*); 35 Node* parse_declaration_statement(Parser*); 36 Node* parse_decl_or_func_decl(Parser*); 37 NodeVec parse_param_list(Parser*); 38 Node* parse_type(Parser*); 39 Node* parse_func_call(Parser*); 40 NodeVec parse_func_arguments(Parser*); 41 Node* parse_if(Parser*); 42 Node* parse_while(Parser*); 43 Node* parse_for(Parser*); 44 Node* parse_assignment(Parser*); 45 Node* parse_break(Parser*); 46 Node* parse_continue_statement(Parser*); 47 Node* parse_expression(Parser*); 48 Node* make_program_node(Parser*); 49 Node* make_ident_node(Span name); 50 Node* make_param_decl(Parser*); 51 Node* make_postfix_node(UnaryOp, Node*); 52 Node* make_subscript_node(Node*, Node*); 53 Node* make_ident_node(Span); 54 Node* make_postfix_node(UnaryOp, Node*); 55 Node* make_number_node(Parser*); 56 Node* make_unary_node(UnaryOp, Node*); 57 Node* make_string_node(Parser*); 58 Node* make_binary_node(OpType, Node*, Node*); 59 Node* parse_return_statement(Parser*); 60 Node* make_empty_statement(void); 61 Node* make_call_node(Node*, NodeVec); 62 63 const char* span_str(const char* src, Span s, char* stack_alloc_chptr); 64 const char* range_str(const char* src, size_t start, size_t end, char* stack_alloc_chptr); 65 bool span_ident_same(Span a, Span b, const char* src);