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