ox

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

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