librdesc
Loading...
Searching...
No Matches
grammar.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2025-2026 Metehan Selvi <me@metehanselvi.com>
2//
3// SPDX-License-Identifier: LGPL-2.1-or-later
4
13#ifndef RDESC_GRAMMAR_H
14#define RDESC_GRAMMAR_H
15
16#include "detail.h"
17
18#include <stdint.h>
19
20
27#define rdesc_grammar_init_checked(grammar, \
28 production_count, \
29 max_alternative_count, \
30 max_alternative_size, \
31 production_rules) \
32 _rdesc_priv_grammar_init_checked( \
33 grammar, \
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) == \
37 production_count * \
38 (max_alternative_count + 1) * \
39 (max_alternative_size + 1)\
40 )
41
42
53
56
59
62
69 uint16_t *child_caps;
70};
71
74 RDESC_TOKEN,
75 RDESC_NONTERMINAL,
81};
82
92
93
94#ifdef __cplusplus
95extern "C" {
96#endif
97
104 uint16_t production_count,
105 uint16_t max_alternative_count,
106 uint16_t max_alternative_size,
107 const struct rdesc_grammar_symbol *production_rules) _rdesc_wur;
108
111
113/* Use with rdesc_grammar_init checked. */
114int _rdesc_priv_grammar_init_checked(struct rdesc_grammar *,
115 uint16_t, uint16_t, uint16_t,
116 const struct rdesc_grammar_symbol *,
117 int) _rdesc_wur;
120#ifdef __cplusplus
121}
122#endif
123
124
125#endif
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.
Definition grammar.h:73
@ RDESC_SENTINEL
Sentinel marking the end of a production body or the end of all alternatives for a nonterminal.
Definition grammar.h:80
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.
Definition grammar.h:87
enum rdesc_grammar_symbol_type ty
Type of the symbol.
Definition grammar.h:88
Grammar definition.
Definition grammar.h:50
const struct rdesc_grammar_symbol * rules
Grammar production rules.
Definition grammar.h:52
uint16_t max_alternative_size
Maximum length of an alternative.
Definition grammar.h:61
uint16_t production_count
Total number of nonterminals.
Definition grammar.h:55
uint16_t max_alternative_count
Maximum number of alternatives in a production rule.
Definition grammar.h:58
uint16_t * child_caps
Array of child capacities for each nonterminal.
Definition grammar.h:69