#ifndef CCM_PARSER_H #define CCM_PARSER_H #include "commons.h" #include "lexer.h" #include "str.h" #include "err.h" typedef struct { err_t err; lexer_t* lexer; node_t* current; } parser_t; typedef node_t* (*rule_t)(parser_t*); void parser_init(parser_t* self, lexer_t* lexer); void parser_free(parser_t* self); node_t* parser_try_new_parse(parser_t* self); node_t* parser_try_new_rule(parser_t* self, rule_t rule); int parser_ensure(parser_t* self, node_t* node, NodeKind kind); node_t* parser_try_new_module(parser_t* self); node_t* parser_try_new_expr(parser_t* self); node_t* parser_try_new_assert(parser_t* self); node_t* parser_try_new_term(parser_t* self); node_t* parser_try_new_factor(parser_t* self); node_t* parser_try_new_usub(parser_t* self); node_t* parser_try_new_pow(parser_t* self); node_t* parser_try_new_literal(parser_t* self); node_t* parser_try_new_tuple(parser_t* self); node_t* parser_try_new_builtin(parser_t* self); #endif