36 lines
967 B
C
36 lines
967 B
C
|
#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
|