2#include "interpreter.h"
4#include <rdesc/grammar.h>
6#include <rdesc/rdesc.h>
8#include "../../../examples/lib/exblex.h"
16int main(
int argc,
char *argv[])
19#include <rdesc/grammar.h>
28 PM_MAX_ALTERNATIVE_COUNT,
29 PM_MAX_ALTERNATIVE_SIZE,
35#include <rdesc/util.h>
38if (argc > 1 && strcmp(argv[1],
"dump_bnf") == 0) {
45#include <rdesc/rdesc.h>
51assert(
rdesc_init(&parser, &grammar,
sizeof(
char *), tk_destroyer) == 0);
61if (fgets(
buf, 4096, stdin) == NULL)
89#include <rdesc/util.h>
92if (argc > 1 && strcmp(argv[1],
"dump_cst") == 0 && res ==
RDESC_READY) {
100 printf(
">> %.2lf\n", pm_interpreter(&parser,
rdesc_root(&parser)));
static char * exblex_current_seminfo(struct exblex *l)
Retrieves the semantic information for the last token.
static uint16_t exblex_next(struct exblex *l)
Fetches the next token.
static void exblex_init(struct exblex *l, const char *buf, const char *tokens)
Initializes the basic lexer with a null-terminated list of chars.
#define rdesc_grammar_init_checked(grammar, production_count, max_alternative_count, max_alternative_size, production_rules)
Grammar initialization instrumented with size assertion.
void rdesc_grammar_destroy(struct rdesc_grammar *grammar)
Frees resources allocated by the grammar.
int rdesc_start(struct rdesc *parser, uint16_t start_symbol) _rdesc_wur
Sets start symbol for the next match.
int rdesc_init(struct rdesc *parser, const struct rdesc_grammar *grammar, size_t seminfo_size, void(*token_destroyer)(uint16_t id, void *seminfo)) _rdesc_wur
Initializes a new parser.
enum rdesc_result rdesc_pump(struct rdesc *parser, uint16_t id, void *seminfo) _rdesc_wur
Drives the parsing process, the pump.
void rdesc_destroy(struct rdesc *parser)
Frees memory allocated by the parser and destroys the parser instance.
enum rdesc_result rdesc_resume(struct rdesc *parser) _rdesc_wur
Resume parsing without providing a new token.
struct rdesc_node * rdesc_root(struct rdesc *parser)
Returns the root of the CST.
rdesc_result
Parse operation result codes.
const char * buf
Underlying null-terminated input buffer.
Recursive descent parser state.
void rdesc_dump_bnf(FILE *out, const struct rdesc_grammar *grammar, const char *const tk_names[], const char *const nt_names[])
Dumps the grammar in BNF format.
void rdesc_dump_cst(FILE *out, const struct rdesc *parser, void(*node_printer)(FILE *out, const struct rdesc_node *))
Dumps the concrete syntax tree (CST) as a graphviz DOT graph.