1#include "../include/rdesc.h"
2#include "../include/grammar.h"
3#include "../src/common.h"
28 if (fgets(buf, 4096, stdin) == NULL) {
48 if (tk == 0 && lex->
cur <= strlen(buf)) {
49 printf(
" %*s", (
int) lex->
cur,
"^\n");
50 printf(
"Invalid token, ignoring tokens after "
51 "index %zu!\n", lex->
cur);
55 printf(
"SYNTAX ERROR!\n");
66 struct rdesc_node *cst;
83 BC_MAX_ALTERNATIVE_COUNT,
84 BC_MAX_ALTERNATIVE_SIZE,
91 printf(
"Basic Calculator, librdesc sample program\n");
Basic interpreter for bc.
static double bc_interpreter(struct rdesc *p, struct rdesc_node *n)
Interprets CST of bc.
static void bc_tk_destroyer(uint16_t tk, void *seminfo_)
Frees seminfo of a bc token.
Basic lexer, used for testing.
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.
void rdesc_grammar_destroy(struct rdesc_grammar *grammar)
Frees resources allocated by the grammar.
int rdesc_grammar_init(struct rdesc_grammar *grammar, uint16_t production_count, uint16_t max_alternative_count, uint16_t max_alternative_size, const struct rdesc_grammar_symbol *production_rules) _rdesc_wur
Initializes a grammar struct.
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.
void rdesc_reset(struct rdesc *parser)
Resets the parser to its initial state.
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.
struct rdesc_node * rdesc_root(struct rdesc *parser)
Returns the root of the CST.
size_t cur
(current) Position in the buffer.
A terminal or nonterminal representing the body (right side) of a production rule.
Recursive descent parser state.