ox

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

parser.h (2031B)



#pragma once

#include "types.h"

#include <stdlib.h>
#include <stdbool.h>

#define IDENTSZ 256

Parser parser_init(Lexer*);
void parser_parse(Ast*, Parser*);
void ast_print(Ast*);

Token peek(Parser*);
Token peek2(Parser*);
Token consume(Parser*);
Token expect(Parser*, TokenType);
bool match(Parser*, TokenType);
bool check(Parser*, TokenType);

Node* parse_declarations(Parser*);

Node* parse_number(Parser*);
Node* parse_ident(Parser*);
Node* parse_primary(Parser*);
Node* parse_postfix(Parser*);
Node* parse_primary(Parser*);
Node* parse_unary(Parser*);
Node* parse_term(Parser*);
Node* parse_expression(Parser*);
Node* parse_expression_statement(Parser*);
Node* parse_assignment_expr(Parser*);
Node* parse_statement(Parser*);
Node* parse_block(Parser*);
Node* parse_declaration_statement(Parser*);
Node* parse_func_decl(Parser*);
Node* parse_decl_or_func_decl(Parser*);
NodeVec parse_param_list(Parser*);
Node* parse_type(Parser*);
Node* parse_type_or_void(Parser*);
Node* parse_func_call(Parser*);
NodeVec parse_func_arguments(Parser*);
Node* parse_if(Parser*);
Node* parse_while(Parser*);
Node* parse_for(Parser*);
Node* parse_assignment(Parser*);
Node* parse_break(Parser*);
Node* parse_continue_statement(Parser*);
Node* parse_expression(Parser*);
Node* make_program_node(Parser*);
Node* make_ident_node(Span name);
Node* make_param_decl(Parser*);
Node* make_postfix_node(UnaryOp, Node*);
Node* make_subscript_node(Node*, Node*);
Node* make_ident_node(Span);
Node* make_postfix_node(UnaryOp, Node*);
Node* make_number_node(Parser*);
Node* make_unary_node(UnaryOp, Node*);
Node* make_boolean_node(Parser*, bool);
Node* make_string_node(Parser*);
Node* make_binary_node(OpType, Node*, Node*);
Node* parse_return_statement(Parser*);
Node* make_empty_statement(void);
Node* make_call_node(Node*, NodeVec);

const char* span_str(const char* src, Span s, char* stack_alloc_chptr);
const char* range_str(const char* src, size_t start, size_t end, char* stack_alloc_chptr);
bool span_ident_same(Span a, Span b, const char* src);