thutt / lrstar

Port of lrstar parser generator to Linux
BSD 3-Clause "New" or "Revised" License
2 stars 2 forks source link

Too many global variables #6

Closed mingodad closed 10 months ago

mingodad commented 10 months ago

The latest changes did a great job to create a saner parser but still there is a bunch of global variables in the generated parser, see for example samples/Calc:

gdb -batch -ex "info variables" -ex quit --args calc
All defined variables:

File Calc_Lexer.cpp:
228:    const unsigned char *templ_lrstar_lexer<true, signed char, unsigned char, unsigned short, unsigned char>::Tc;
180:    const unsigned char *templ_lrstar_lexer<true, signed char, unsigned char, unsigned short, unsigned char>::Tm;
194:    const unsigned short *templ_lrstar_lexer<true, signed char, unsigned char, unsigned short, unsigned char>::Tr;
15: const int templ_lrstar_lexer<true, signed char, unsigned char, unsigned short, unsigned char>::n_Tc;
11: const int templ_lrstar_lexer<true, signed char, unsigned char, unsigned short, unsigned char>::n_Tm;
13: const int templ_lrstar_lexer<true, signed char, unsigned char, unsigned short, unsigned char>::n_Tr;
9:  const int templ_lrstar_lexer<true, signed char, unsigned char, unsigned short, unsigned char>::n_term_numb;
29: const signed char *templ_lrstar_lexer<true, signed char, unsigned char, unsigned short, unsigned char>::term_numb;
197:    static const uint8 Tc_[256];
32: static const uint8 Tm_[1428];
183:    static const uint16 Tr_[55];
18: static const int8 term_numb_[55];

File Calc_Main.cpp:
6:  const char Calc_grammar_name[];
11: static lrstar_parser<&Calc_grammar_name, true, true, true, true, false, 1, true, false, 0, true, true, false, 100, true, templ_lrstar_lexer<true, signed char, unsigned char, unsigned short, unsigned char>, templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char> >::init_func_t Calc_init_funcs_[2];
42: static lrstar_parser<&Calc_grammar_name, true, true, true, true, false, 1, true, false, 0, true, true, false, 100, true, templ_lrstar_lexer<true, signed char, unsigned char, unsigned short, unsigned char>, templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char> >::nact_func_t Calc_nact_funcs_[17];
19: static lrstar_parser<&Calc_grammar_name, true, true, true, true, false, 1, true, false, 0, true, true, false, 100, true, templ_lrstar_lexer<true, signed char, unsigned char, unsigned short, unsigned char>, templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char> >::tact_func_t Calc_tact_funcs_[2];

File Calc_Parser.cpp:
303:    const unsigned char *templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::Bc;
313:    const unsigned char *templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::Bf;
282:    const unsigned char *templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::Bm;
293:    const unsigned char *templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::Br;
378:    const unsigned char *templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::Nc;
357:    const signed char *templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::Nm;
368:    const unsigned char *templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::Nr;
417:    const signed char *templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::PL;
407:    const unsigned char *templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::Rc;
386:    const unsigned char *templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::Rm;
397:    const signed char *templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::Rr;
345:    const unsigned char *templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::Tc;
324:    const signed char *templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::Tm;
335:    const unsigned char *templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::Tr;
116:    const int templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::accept_state;
259:    const signed char *templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::arga;
269:    const signed char *templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::argx;
272:    const int *templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::argy;
128:    const int templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::eof_symb;
131:    const int templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::err_used;
235:    const unsigned char *templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::f_tail;
225:    const unsigned char *templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::head_numb;
181:    const char * const *templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::head_symb;
44: const int templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::n_Bc;
47: const int templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::n_Bf;
38: const int templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::n_Bm;
41: const int templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::n_Br;
65: const int templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::n_Nc;
59: const int templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::n_Nm;
62: const int templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::n_Nr;
77: const int templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::n_PL;
74: const int templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::n_Rc;
68: const int templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::n_Rm;
71: const int templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::n_Rr;
56: const int templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::n_Tc;
50: const int templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::n_Tm;
53: const int templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::n_Tr;
29: const int templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::n_arga;
32: const int templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::n_argx;
35: const int templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::n_argy;
23: const int templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::n_f_tail;
20: const int templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::n_head_numb;
11: const int templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::n_head_symb;
107:    const int templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::n_heads;
98: const int templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::n_nact_numb;
89: const int templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::n_nd_action;
86: const int templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::n_nd_faction;
80: const int templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::n_nd_fterm;
83: const int templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::n_nd_term;
17: const int templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::n_node_name;
95: const int templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::n_node_numb;
125:    const int templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::n_nodeactns;
122:    const int templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::n_nodenames;
110:    const int templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::n_prods;
101:    const int templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::n_reverse;
113:    const int templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::n_states;
14: const int templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::n_tact_name;
92: const int templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::n_tact_numb;
26: const int templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::n_tail;
8:  const int templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::n_term_symb;
119:    const int templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::n_termactns;
104:    const int templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::n_terms;
459:    const signed char *templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::nact_numb;
429:    const int *templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::nd_action;
426:    const int *templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::nd_faction;
420:    const int *templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::nd_fterm;
423:    const int *templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::nd_term;
215:    const char * const *templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::node_name;
449:    const signed char *templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::node_numb;
469:    const unsigned char *templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::reverse;
190:    const char * const *templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::tact_name;
439:    const signed char *templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::tact_numb;
249:    const signed char *templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::tail;
161:    const char * const *templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char>::term_symb;
296:    static const uint8 Bc_[22];
306:    static const uint8 Bf_[22];
275:    static const uint8 Bm_[30];
285:    static const uint8 Br_[36];
371:    static const uint8 Nc_[26];
348:    static const int8 Nm_[47];
360:    static const uint8 Nr_[36];
410:    static const int8 PL_[26];
400:    static const uint8 Rc_[22];
381:    static const uint8 Rm_[5];
389:    static const int8 Rr_[36];
338:    static const uint8 Tc_[22];
316:    static const int8 Tm_[33];
327:    static const uint8 Tr_[36];
252:    static const int8 arga_[22];
262:    static const int8 argx_[26];
228:    static const uint8 f_tail_[27];
218:    static const uint8 head_numb_[26];
164:    static const char *head_symb_[13];
452:    static const int8 nact_numb_[26];
193:    static const char *node_name_[17];
442:    static const int8 node_numb_[26];
462:    static const uint8 reverse_[26];
184:    static const char *tact_name_[2];
432:    static const int8 tact_numb_[22];
238:    static const int8 tail_[61];
135:    static const char *term_symb_[22];

File Calc_user_main.cpp:
22: options_t options;
24: static option long_options[4];

Non-debugging symbols:
0x0000000000009500  _IO_stdin_used
0x000000000000c506  lrstar_parser<&Calc_grammar_name, true, true, true, true, false, 1, true, false, 0, true, true, false, 100ul, true, templ_lrstar_lexer<true, signed char, unsigned char, unsigned short, unsigned char>, templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char> >::traverse_print_ast(_IO_FILE*, char*, Node*)::draw_last
0x000000000000c509  lrstar_parser<&Calc_grammar_name, true, true, true, true, false, 1, true, false, 0, true, true, false, 100ul, true, templ_lrstar_lexer<true, signed char, unsigned char, unsigned short, unsigned char>, templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char> >::traverse_print_ast(_IO_FILE*, char*, Node*)::draw_vbar
0x000000000000c50c  lrstar_parser<&Calc_grammar_name, true, true, true, true, false, 1, true, false, 0, true, true, false, 100ul, true, templ_lrstar_lexer<true, signed char, unsigned char, unsigned short, unsigned char>, templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char> >::traverse_print_ast(_IO_FILE*, char*, Node*)::draw_plus
0x000000000000c580  __GNU_EH_FRAME_HDR
0x000000000000ceb4  __FRAME_END__
0x000000000020dcb0  __frame_dummy_init_array_entry
0x000000000020dcb0  __init_array_start
0x000000000020dcb8  __do_global_dtors_aux_fini_array_entry
0x000000000020dcb8  __init_array_end
0x000000000020dcc0  _DYNAMIC
0x000000000020ded0  _GLOBAL_OFFSET_TABLE_
0x000000000020e000  __data_start
0x000000000020e000  data_start
0x000000000020e008  __dso_handle
0x000000000020e0f0  DW.ref.__gxx_personality_v0
0x000000000020e440  __TMC_END__
0x000000000020e440  __bss_start
0x000000000020e440  _edata
0x000000000020e440  optarg@@GLIBC_2.2.5
0x000000000020e460  stderr@@GLIBC_2.2.5
0x000000000020e468  optind@@GLIBC_2.2.5
0x000000000020e46c  completed
0x000000000020e4a0  lrstar_parser<&Calc_grammar_name, true, true, true, true, false, 1, true, false, 0, true, true, false, 100ul, true, templ_lrstar_lexer<true, signed char, unsigned char, unsigned short, unsigned char>, templ_lrstar_parser_tables<char const* const, char const* const, char const* const, char const* const, unsigned char, unsigned char, signed char, signed char, signed char, int, unsigned char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, signed char, unsigned char, unsigned char, unsigned char, signed char, unsigned char, signed char, int, int, int, int, signed char, signed char, signed char, unsigned char> >::symbol_name(int)::name
0x000000000020e520  number(long)::string
0x000000000020e540  output_fp
0x000000000020e548  input_start
0x000000000020e550  _end
thutt commented 10 months ago

The original version of the code always created lexer and parser table arrays. These were static class variables. I changed the arrays into pointers so that they could be 'missing' when not needed, but still allow the code to compile because the symbol would be present (without conditional compilation). The arrays are static variables (so not visible beyond the translation unit in which they are used), and the pointers are assigned the address of array.

However, the tables need to exist; they are either going to be static class variables, or static file variables.

The same applies for the parser tables.

If you have a suggestion on how to have the fields present at all times (particularly important for the parser tables), and to not use static variables, I'd love to hear it.

mingodad commented 10 months ago

The tables that you're right need to exist should be prefixed somehow to allow multiple parsers/lexers on the same application.

All other probably need be included as a class/struct field that is allocated when instantiating the parser/lexer.

Easy saying than doing but doable.

thutt commented 10 months ago

There should not be a problem because all the tables generated for the lexer & the parser are static. They will not be visible to anything outside of the owning translation unit.