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
84
94
95
96#ifdef __cplusplus
97extern "C" {
98#endif
99
106 uint16_t production_count,
107 uint16_t max_alternative_count,
108 uint16_t max_alternative_size,
109 const struct rdesc_grammar_symbol *production_rules) _rdesc_wur;
110
113
115/* Use with rdesc_grammar_init checked. */
116int _rdesc_priv_grammar_init_checked(struct rdesc_grammar *,
117 uint16_t, uint16_t, uint16_t,
118 const struct rdesc_grammar_symbol *,
119 int) _rdesc_wur;
122#ifdef __cplusplus
123}
124#endif
125
126
127#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_NONTERMINAL
Nonterminal.
Definition grammar.h:77
@ RDESC_SENTINEL
Sentinel marking the end of a production body or the end of all alternatives for a nonterminal.
Definition grammar.h:82
@ RDESC_TOKEN
Token.
Definition grammar.h:75
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:89
enum rdesc_grammar_symbol_type ty
Type of the symbol.
Definition grammar.h:90
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