ox

The Ox programming language, compiler and tools (WIP)
Log | Files | Refs | README | LICENSE

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);