13#ifndef RDESC_GRAMMAR_H
14#define RDESC_GRAMMAR_H
27#define rdesc_grammar_init_checked(grammar, \
29 max_alternative_count, \
30 max_alternative_size, \
32 _rdesc_priv_grammar_init_checked( \
34 production_count, max_alternative_count, max_alternative_size, \
35 (struct rdesc_grammar_symbol *) production_rules, \
36 sizeof(production_rules) / sizeof(struct rdesc_grammar_symbol) == \
38 (max_alternative_count + 1) * \
39 (max_alternative_size + 1)\
106 uint16_t production_count,
107 uint16_t max_alternative_count,
108 uint16_t max_alternative_size,
117 uint16_t, uint16_t, uint16_t,
void rdesc_grammar_destroy(struct rdesc_grammar *grammar)
Frees resources allocated by the grammar.
rdesc_grammar_symbol_type
Symbol type discriminator for rdesc_grammar_symbol.
@ RDESC_NONTERMINAL
Nonterminal.
@ RDESC_SENTINEL
Sentinel marking the end of a production body or the end of all alternatives for a nonterminal.
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.
A terminal or nonterminal representing the body (right side) of a production rule.
enum rdesc_grammar_symbol_type ty
Type of the symbol.
const struct rdesc_grammar_symbol * rules
Grammar production rules.
uint16_t max_alternative_size
Maximum length of an alternative.
uint16_t production_count
Total number of nonterminals.
uint16_t max_alternative_count
Maximum number of alternatives in a production rule.
uint16_t * child_caps
Array of child capacities for each nonterminal.