26#include "../../include/cfg.h"
28#define PREFIX_TK(tk) TK_ ## tk
29#define PREFIX_NT(nt) NT_ ## nt
31#include "../../include/bnf_dsl.h"
37#define BC_NT_VARIANT_COUNT 4
38#define BC_NT_BODY_LENGTH 5
43 TK_MINUS, TK_PLUS, TK_MULT, TK_DIV,
44 TK_LPAREN, TK_RPAREN, TK_ENDSYM,
46 TK_DUMMY_AMBIGUITY_TRIGGER,
50 NT_UNSIGNED, NT_OPTSIGN, NT_SIGNED,
52 NT_EXPR, NT_EXPR_REST,
53 NT_TERM, NT_TERM_REST,
59const char bc_tks[BC_TK_COUNT] = {
67const char *
const bc_nt_names[BC_NT_COUNT] = {
68 "unsigned",
"optsign",
"sign",
78bc[BC_NT_COUNT][BC_NT_VARIANT_COUNT][BC_NT_BODY_LENGTH] = {
90 NT(OPTSIGN),
NT(UNSIGNED),
95 NT(TERM),
NT(EXPR_REST),
104 NT(FACTOR),
NT(TERM_REST),
115 alt TK(LPAREN),
NT(EXPR),
TK(RPAREN),
TK(DUMMY_AMBIGUITY_TRIGGER),
120 NT(EXPR),
TK(ENDSYM),
#define EPSILON
Macro to create an epsilon production symbol.
Definition: bnf_dsl.h:65
#define NT(nt)
Macro to create a non-terminal production symbol.
Definition: bnf_dsl.h:63
#define TK(tk)
Macro to create a terminal (token) production symbol.
Definition: bnf_dsl.h:61
#define r(...)
Macro to define a grammar rule. Adds end-of-body and construct sentinels to grammar rules.
Definition: bnf_dsl.h:72
#define alt
Macro for syntactic sugar to separate non-terminal alternatives.
Definition: bnf_dsl.h:106
A terminal/non-terminal to describe body (right side) of a production rule.
Definition: cfg.h:45