ccm/lib/parser.h

54 lines
1.8 KiB
C
Raw Permalink Normal View History

2024-03-18 17:20:40 +00:00
#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*);
typedef node_t* (*rule_ll1_t)(parser_t*, node_t*);
2024-03-18 17:20:40 +00:00
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);
node_t* parser_try_new_rule_ll1(parser_t* self, rule_ll1_t rule, node_t* node);
2024-03-22 15:33:41 +00:00
int parser_consume(parser_t* self, NodeKind kind);
2024-03-18 17:20:40 +00:00
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);
2024-03-22 23:48:16 +00:00
node_t* parser_try_new_for(parser_t* self);
2024-03-22 22:01:20 +00:00
node_t* parser_try_new_while(parser_t* self);
2024-03-22 15:33:41 +00:00
node_t* parser_try_new_if(parser_t* self);
2024-03-22 07:57:44 +00:00
node_t* parser_try_new_begin(parser_t* self);
node_t* parser_try_new_block(parser_t* self);
2024-03-22 07:01:21 +00:00
node_t* parser_try_new_assign(parser_t* self);
2024-03-21 11:00:20 +00:00
node_t* parser_try_new_decl(parser_t* self);
2024-03-18 17:20:40 +00:00
node_t* parser_try_new_assert(parser_t* self);
2024-03-19 06:11:28 +00:00
node_t* parser_try_new_or(parser_t* self);
node_t* parser_try_new_and(parser_t* self);
2024-03-19 15:25:02 +00:00
node_t* parser_try_new_eqne(parser_t* self);
node_t* parser_try_new_cmp(parser_t* self);
2024-03-18 17:20:40 +00:00
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);
2024-03-19 06:11:28 +00:00
node_t* parser_try_new_not(parser_t* self);
2024-03-18 17:20:40 +00:00
node_t* parser_try_new_pow(parser_t* self);
2024-03-20 15:26:59 +00:00
node_t* parser_try_new_in(parser_t* self);
2024-03-18 17:20:40 +00:00
node_t* parser_try_new_literal(parser_t* self);
2024-03-20 15:26:59 +00:00
node_t* parser_try_new_array(parser_t* self);
2024-03-22 07:01:21 +00:00
node_t* parser_try_new_index(parser_t* self);
2024-03-18 17:20:40 +00:00
node_t* parser_try_new_tuple(parser_t* self);
node_t* parser_try_new_builtin(parser_t* self);
#endif