xref: /netbsd-src/external/bsd/byacc/dist/test/btyacc/btyacc_demo.tab.c (revision 2718af68c3efc72c9769069b5c7f9ed36f6b9def)
1 /*	$NetBSD: btyacc_demo.tab.c,v 1.5 2021/02/20 22:57:56 christos Exp $	*/
2 
3 /* original parser id follows */
4 /* yysccsid[] = "@(#)yaccpar	1.9 (Berkeley) 02/21/93" */
5 /* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
6 
7 #define YYBYACC 1
8 #define YYMAJOR 2
9 #define YYMINOR 0
10 #define YYCHECK "yyyymmdd"
11 
12 #define YYEMPTY        (-1)
13 #define yyclearin      (yychar = YYEMPTY)
14 #define yyerrok        (yyerrflag = 0)
15 #define YYRECOVERING() (yyerrflag != 0)
16 #define YYENOMEM       (-2)
17 #define YYEOF          0
18 #undef YYBTYACC
19 #define YYBTYACC 1
20 #define YYDEBUGSTR (yytrial ? YYPREFIX "debug(trial)" : YYPREFIX "debug")
21 
22 #ifndef yyparse
23 #define yyparse    demo_parse
24 #endif /* yyparse */
25 
26 #ifndef yylex
27 #define yylex      demo_lex
28 #endif /* yylex */
29 
30 #ifndef yyerror
31 #define yyerror    demo_error
32 #endif /* yyerror */
33 
34 #ifndef yychar
35 #define yychar     demo_char
36 #endif /* yychar */
37 
38 #ifndef yyval
39 #define yyval      demo_val
40 #endif /* yyval */
41 
42 #ifndef yylval
43 #define yylval     demo_lval
44 #endif /* yylval */
45 
46 #ifndef yydebug
47 #define yydebug    demo_debug
48 #endif /* yydebug */
49 
50 #ifndef yynerrs
51 #define yynerrs    demo_nerrs
52 #endif /* yynerrs */
53 
54 #ifndef yyerrflag
55 #define yyerrflag  demo_errflag
56 #endif /* yyerrflag */
57 
58 #ifndef yylhs
59 #define yylhs      demo_lhs
60 #endif /* yylhs */
61 
62 #ifndef yylen
63 #define yylen      demo_len
64 #endif /* yylen */
65 
66 #ifndef yydefred
67 #define yydefred   demo_defred
68 #endif /* yydefred */
69 
70 #ifndef yystos
71 #define yystos     demo_stos
72 #endif /* yystos */
73 
74 #ifndef yydgoto
75 #define yydgoto    demo_dgoto
76 #endif /* yydgoto */
77 
78 #ifndef yysindex
79 #define yysindex   demo_sindex
80 #endif /* yysindex */
81 
82 #ifndef yyrindex
83 #define yyrindex   demo_rindex
84 #endif /* yyrindex */
85 
86 #ifndef yygindex
87 #define yygindex   demo_gindex
88 #endif /* yygindex */
89 
90 #ifndef yytable
91 #define yytable    demo_table
92 #endif /* yytable */
93 
94 #ifndef yycheck
95 #define yycheck    demo_check
96 #endif /* yycheck */
97 
98 #ifndef yyname
99 #define yyname     demo_name
100 #endif /* yyname */
101 
102 #ifndef yyrule
103 #define yyrule     demo_rule
104 #endif /* yyrule */
105 
106 #ifndef yyloc
107 #define yyloc      demo_loc
108 #endif /* yyloc */
109 
110 #ifndef yylloc
111 #define yylloc     demo_lloc
112 #endif /* yylloc */
113 
114 #if YYBTYACC
115 
116 #ifndef yycindex
117 #define yycindex   demo_cindex
118 #endif /* yycindex */
119 
120 #ifndef yyctable
121 #define yyctable   demo_ctable
122 #endif /* yyctable */
123 
124 #endif /* YYBTYACC */
125 
126 #define YYPREFIX "demo_"
127 
128 #define YYPURE 0
129 
130 #line 15 "btyacc_demo.y"
131 /* dummy types just for compile check */
132 typedef int Code;
133 typedef int Decl_List;
134 typedef int Expr;
135 typedef int Expr_List;
136 typedef int Scope;
137 typedef int Type;
138 enum Operator { ADD, SUB, MUL, MOD, DIV, DEREF };
139 
140 typedef unsigned char bool;
141 typedef struct Decl {
142     Scope *scope;
143     Type  *type;
144     bool (*istype)(void);
145 } Decl;
146 
147 #include "btyacc_demo.tab.h"
148 #include <stdlib.h>
149 #include <stdio.h>
150 #ifdef YYSTYPE
151 #undef  YYSTYPE_IS_DECLARED
152 #define YYSTYPE_IS_DECLARED 1
153 #endif
154 #ifndef YYSTYPE_IS_DECLARED
155 #define YYSTYPE_IS_DECLARED 1
156 #line 36 "btyacc_demo.y"
157 typedef union {
158     Scope	*scope;
159     Expr	*expr;
160     Expr_List	*elist;
161     Type	*type;
162     Decl	*decl;
163     Decl_List	*dlist;
164     Code	*code;
165     char	*id;
166     } YYSTYPE;
167 #endif /* !YYSTYPE_IS_DECLARED */
168 #line 167 "btyacc_demo.tab.c"
169 
170 #if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED
171 /* Default: YYLTYPE is the text position type. */
172 typedef struct YYLTYPE
173 {
174     int first_line;
175     int first_column;
176     int last_line;
177     int last_column;
178     unsigned source;
179 } YYLTYPE;
180 #define YYLTYPE_IS_DECLARED 1
181 #endif
182 #define YYRHSLOC(rhs, k) ((rhs)[k])
183 
184 /* compatibility with bison */
185 #ifdef YYPARSE_PARAM
186 /* compatibility with FreeBSD */
187 # ifdef YYPARSE_PARAM_TYPE
188 #  define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
189 # else
190 #  define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
191 # endif
192 #else
193 # define YYPARSE_DECL() yyparse(void)
194 #endif
195 
196 /* Parameters sent to lex. */
197 #ifdef YYLEX_PARAM
198 # define YYLEX_DECL() yylex(void *YYLEX_PARAM)
199 # define YYLEX yylex(YYLEX_PARAM)
200 #else
201 # define YYLEX_DECL() yylex(void)
202 # define YYLEX yylex()
203 #endif
204 
205 /* Parameters sent to yyerror. */
206 #ifndef YYERROR_DECL
207 #define YYERROR_DECL() yyerror(YYLTYPE *loc, const char *s)
208 #endif
209 #ifndef YYERROR_CALL
210 #define YYERROR_CALL(msg) yyerror(&yylloc, msg)
211 #endif
212 
213 #ifndef YYDESTRUCT_DECL
214 #define YYDESTRUCT_DECL() yydestruct(const char *msg, int psymb, YYSTYPE *val, YYLTYPE *loc)
215 #endif
216 #ifndef YYDESTRUCT_CALL
217 #define YYDESTRUCT_CALL(msg, psymb, val, loc) yydestruct(msg, psymb, val, loc)
218 #endif
219 
220 extern int YYPARSE_DECL();
221 
222 #define PREFIX 257
223 #define POSTFIX 258
224 #define ID 259
225 #define CONSTANT 260
226 #define EXTERN 261
227 #define REGISTER 262
228 #define STATIC 263
229 #define CONST 264
230 #define VOLATILE 265
231 #define IF 266
232 #define THEN 267
233 #define ELSE 268
234 #define CLCL 269
235 #define YYERRCODE 256
236 typedef short YYINT;
237 static const YYINT demo_lhs[] = {                        -1,
238    15,   15,   15,   12,   18,    0,    4,   19,    4,    2,
239    20,    2,   10,   10,   13,   13,   11,   11,   11,   11,
240    11,   14,   14,   21,   22,    3,    3,    8,    8,   23,
241    24,    8,    8,    8,    8,   16,   16,   17,   17,    9,
242     1,    1,    1,    1,    1,    1,    1,    1,    5,    5,
243    25,   26,    5,    5,   27,    5,    6,    6,    7,
244 };
245 static const YYINT demo_len[] = {                         2,
246     0,    1,    3,    2,    0,    2,    0,    0,    3,    3,
247     0,    4,    1,    3,    0,    2,    1,    1,    1,    1,
248     1,    1,    1,    0,    0,    5,    1,    0,    1,    0,
249     0,    5,    5,    5,    6,    0,    1,    4,    1,    2,
250     4,    4,    4,    4,    4,    3,    1,    1,    1,    2,
251     0,    0,   11,    8,    0,    2,    0,    3,    4,
252 };
253 static const YYINT demo_defred[] = {                      5,
254     0,    7,    0,    0,   19,   20,   21,   22,   23,    2,
255     9,    0,   13,   18,   17,    0,   15,   30,   29,    0,
256     0,    0,    0,    0,   31,   10,   24,   24,   24,    0,
257    14,    3,   16,   25,    0,   25,    0,    0,    8,   12,
258     0,    0,    0,   39,    0,    0,    0,    8,   47,   48,
259     0,   57,    0,   32,    0,    0,   15,   30,    0,   30,
260    30,   30,   30,   30,   34,    0,    0,    0,   46,    0,
261     0,    0,    0,    0,   59,    0,   38,    0,    0,   43,
262    45,   44,    0,    0,   49,   58,    0,   30,   50,   56,
263     0,    0,    0,   51,    0,    0,   52,    0,   53,
264 };
265 #if defined(YYDESTRUCT_CALL) || defined(YYSTYPE_TOSTRING)
266 static const YYINT demo_stos[] = {                        0,
267   271,  289,  275,  290,  261,  262,  263,  264,  265,  269,
268   273,  281,  282,  283,  285,  286,   42,   40,  259,  274,
269   279,  290,  259,  284,  294,   59,   44,   40,   91,  291,
270   282,  269,  285,  292,  295,  292,  292,  292,  123,  278,
271   293,  279,  293,  280,  281,  287,  288,   42,  259,  260,
272   272,  290,  279,   41,  279,  279,   41,   44,  290,   43,
273    45,   42,   47,   37,   93,  277,  284,  294,  272,  294,
274   294,  294,  294,  294,  125,  290,  280,  272,  272,  272,
275   272,  272,  266,  272,  273,  276,  298,   40,   59,  278,
276   294,  272,   41,  267,  296,  276,  268,  297,  276,
277 };
278 #endif /* YYDESTRUCT_CALL || YYSTYPE_TOSTRING */
279 static const YYINT demo_dgoto[] = {                       1,
280    84,   85,   20,    3,   86,   66,   40,   21,   44,   12,
281    13,   14,   24,   15,   16,   46,   47,    2,   22,   30,
282    34,   41,   25,   35,   95,   98,   87,
283 };
284 static const YYINT demo_sindex[] = {                      0,
285     0,    0,    0, -103,    0,    0,    0,    0,    0,    0,
286     0,  -31,    0,    0,    0, -238,    0,    0,    0,    4,
287   -36, -103,    0, -133,    0,    0,    0,    0,    0,  -94,
288     0,    0,    0,    0,  -40,    0, -103,  -33,    0,    0,
289   -40,  -25,  -40,    0,  -31,    8,   15,    0,    0,    0,
290    -2,    0,  -36,    0,  -36,  -36,    0,    0,  -33,    0,
291     0,    0,    0,    0,    0,  -92, -133, -103,    0,  -33,
292   -33,  -33,  -33,  -33,    0,   -8,    0,   23,   23,    0,
293     0,    0,   11,   75,    0,    0,  -94,    0,    0,    0,
294   -33,   96, -194,    0,   -8,    0,    0,   -8,    0,
295 };
296 static const YYINT demo_rindex[] = {                      0,
297     0,    0,    1, -181,    0,    0,    0,    0,    0,    0,
298     0,   17,    0,    0,    0,    0,    0,    0,    0,    0,
299   -39, -181,   12,  -34,    0,    0,    0,    0,    0,    0,
300     0,    0,    0,    0,   -5,    0,  -11,    0,    0,    0,
301   -17,    0,   28,    0,  -41,    0,   47,    0,    0,    0,
302     0,    0,  -13,    0,   18,   70,    0,    0,    0,    0,
303     0,    0,    0,    0,    0,  -19,  -27, -181,    0,    0,
304     0,    0,    0,    0,    0,  -29,    0,   56,   64,    0,
305     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
306     0,    0,    0,    0,  -29,  -30,    0,  -29,    0,
307 };
308 #if YYBTYACC
309 static const YYINT demo_cindex[] = {                      0,
310     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
311     0,  -22,    0,    0,    0,    0,    0,    0,    0,    0,
312     0,    0, -179,    0,    0,    0,    0,    0,    0,    0,
313     0,    0,    0,    0,   52,    0,    0,    0,    0,    0,
314    58,    0,   62,    0,  -21,    0,    0,    0,    0,    0,
315     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
316     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
317     0,    0,    0,    0,    0, -146,    0,    0,    0,    0,
318     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
319     0,    0,    0,    0, -143, -147,    0, -134,    0,
320 };
321 #endif
322 static const YYINT demo_gindex[] = {                      0,
323     9,  143,    0,    0,   50,    0,   63,  101,   83,    7,
324   130,    0,   98,    2,    0,    0,    0,    0,   19,    0,
325    10,  117,   66,    0,    0,    0,    0,
326 };
327 #define YYTABLESIZE 286
328 static const YYINT demo_table[] = {                      28,
329     6,   17,   28,   28,   27,   24,   24,   24,   48,   24,
330    17,   54,   35,   35,   28,   54,   35,    0,    0,   27,
331    23,    4,    8,   28,   24,   33,   28,   33,   39,   36,
332    33,   35,   75,   48,   64,   28,   36,   37,   38,   62,
333    60,   28,   61,   45,   63,   33,   51,   27,   57,   28,
334    88,    4,    4,    4,   29,    4,   24,   52,   58,   64,
335    28,   26,   26,   35,   62,   29,   59,   69,   33,   63,
336     4,   28,   94,   28,   45,   28,   26,    1,   78,   79,
337    80,   81,   82,   11,   76,   28,   28,   37,   24,    6,
338    65,    0,   54,   55,   54,   35,   41,    0,   41,   92,
339    41,    0,    4,    8,   42,   28,   42,   28,   42,   33,
340    40,   64,    9,   40,   41,    9,   62,   60,   28,   61,
341    12,   63,   42,   68,    9,   70,   71,   72,   73,   74,
342     8,    9,   64,   89,    4,   42,   93,   62,   60,   28,
343    61,   53,   63,   55,   96,   56,   11,   99,   41,   90,
344    77,   31,   43,   91,   67,    0,   42,    5,    6,    7,
345     8,    9,    0,    0,    0,   10,    0,    0,    0,    0,
346     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
347     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
348     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
349     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
350     0,    0,    0,    0,    0,    0,    0,    0,   19,    8,
351     8,    8,    8,    8,   24,   49,   50,    8,   54,   54,
352    54,   54,   54,   54,   54,   54,    3,    3,   54,    8,
353     8,    8,    8,    8,    8,    8,    8,    1,    0,    8,
354     0,   50,    5,    6,    7,    8,    9,   83,    0,    8,
355    10,    8,    8,    8,    8,    8,    0,    0,    0,    8,
356     4,    0,    4,    4,    4,    4,    4,    8,    8,    8,
357     8,    8,    0,    0,    0,    8,
358 };
359 static const YYINT demo_check[] = {                      41,
360     0,   42,   44,   40,   44,   40,   41,   42,   42,   44,
361    42,   42,   40,   41,   40,   41,   44,   40,   40,   59,
362   259,    3,   42,   41,   59,   24,   44,   41,  123,   41,
363    44,   59,  125,   42,   37,   41,   27,   28,   29,   42,
364    43,   59,   45,   37,   47,   59,   38,   44,   41,   91,
365    40,   40,   41,   42,   91,   44,   91,   39,   44,   37,
366    44,   44,   59,   91,   42,   91,   48,   59,   67,   47,
367    59,   44,  267,   91,   68,   59,   59,  259,   70,   71,
368    72,   73,   74,  123,   66,   91,   59,   41,  123,  269,
369    93,   40,  123,  123,  125,  123,   41,   40,   43,   91,
370    45,   40,   91,  123,   41,  123,   43,   91,   45,  123,
371    41,   37,  259,   44,   59,  259,   42,   43,   91,   45,
372   268,   47,   59,   58,  259,   60,   61,   62,   63,   64,
373   264,  265,   37,   59,  123,   35,   41,   42,   43,  123,
374    45,   41,   47,   43,   95,   45,    4,   98,   93,   87,
375    68,   22,   36,   88,   57,   -1,   93,  261,  262,  263,
376   264,  265,   -1,   -1,   -1,  269,   -1,   -1,   -1,   -1,
377    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
378    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
379    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
380    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
381    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  259,  261,
382   262,  263,  264,  265,  259,  259,  260,  269,  259,  260,
383   261,  262,  263,  264,  265,  266,  259,  259,  269,  259,
384   260,  261,  262,  263,  264,  265,  266,  259,   -1,  269,
385    -1,  260,  261,  262,  263,  264,  265,  266,   -1,  259,
386   269,  261,  262,  263,  264,  265,   -1,   -1,   -1,  269,
387   259,   -1,  261,  262,  263,  264,  265,  261,  262,  263,
388   264,  265,   -1,   -1,   -1,  269,
389 };
390 #if YYBTYACC
391 static const YYINT demo_ctable[] = {                     18,
392    28,   -1,   19,    8,   -1,   32,    4,   -1,   49,    1,
393    -1,   97,   54,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
394    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
395    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
396    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
397    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
398    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
399    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
400    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
401    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
402    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
403    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
404    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
405    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
406    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
407    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
408    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
409    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
410    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
411    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
412    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
413    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
414    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
415    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
416    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
417    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
418    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
419    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
420    -1,   -1,   -1,   -1,   -1,
421 };
422 #endif
423 #define YYFINAL 1
424 #ifndef YYDEBUG
425 #define YYDEBUG 0
426 #endif
427 #define YYMAXTOKEN 269
428 #define YYUNDFTOKEN 299
429 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))
430 #if YYDEBUG
431 static const char *const demo_name[] = {
432 
433 "$end",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
434 "'%'",0,0,"'('","')'","'*'","'+'","','","'-'","'.'","'/'",0,0,0,0,0,0,0,0,0,0,0,
435 "';'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'['",0,
436 "']'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'{'",0,"'}'",0,
437 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
438 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
439 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
440 0,0,0,0,0,0,0,0,0,"error","PREFIX","POSTFIX","ID","CONSTANT","EXTERN",
441 "REGISTER","STATIC","CONST","VOLATILE","IF","THEN","ELSE","CLCL","$accept",
442 "input","expr","decl","declarator_list","decl_list","statement",
443 "statement_list","block_statement","declarator","formal_arg","decl_specs",
444 "decl_spec","typename","cv_quals","cv_qual","opt_scope","formal_arg_list",
445 "nonempty_formal_arg_list","$$1","$$2","$$3","$$4","$$5","$$6","$$7","$$8",
446 "$$9","$$10","illegal-symbol",
447 };
448 static const char *const demo_rule[] = {
449 "$accept : input",
450 "opt_scope :",
451 "opt_scope : CLCL",
452 "opt_scope : opt_scope ID CLCL",
453 "typename : opt_scope ID",
454 "$$1 :",
455 "input : $$1 decl_list",
456 "decl_list :",
457 "$$2 :",
458 "decl_list : decl_list $$2 decl",
459 "decl : decl_specs declarator_list ';'",
460 "$$3 :",
461 "decl : decl_specs declarator $$3 block_statement",
462 "decl_specs : decl_spec",
463 "decl_specs : decl_specs $$2 decl_spec",
464 "cv_quals :",
465 "cv_quals : cv_quals cv_qual",
466 "decl_spec : cv_qual",
467 "decl_spec : typename",
468 "decl_spec : EXTERN",
469 "decl_spec : REGISTER",
470 "decl_spec : STATIC",
471 "cv_qual : CONST",
472 "cv_qual : VOLATILE",
473 "$$4 :",
474 "$$5 :",
475 "declarator_list : declarator_list ',' $$4 $$5 declarator",
476 "declarator_list : declarator",
477 "declarator :",
478 "declarator : ID",
479 "$$6 :",
480 "$$7 :",
481 "declarator : '(' $$6 $$7 declarator ')'",
482 "declarator : '*' cv_quals $$4 $$5 declarator",
483 "declarator : declarator '[' $$4 expr ']'",
484 "declarator : declarator '(' $$4 formal_arg_list ')' cv_quals",
485 "formal_arg_list :",
486 "formal_arg_list : nonempty_formal_arg_list",
487 "nonempty_formal_arg_list : nonempty_formal_arg_list ',' $$6 formal_arg",
488 "nonempty_formal_arg_list : formal_arg",
489 "formal_arg : decl_specs declarator",
490 "expr : expr '+' $$6 expr",
491 "expr : expr '-' $$6 expr",
492 "expr : expr '*' $$6 expr",
493 "expr : expr '%' $$6 expr",
494 "expr : expr '/' $$6 expr",
495 "expr : '*' $$2 expr",
496 "expr : ID",
497 "expr : CONSTANT",
498 "statement : decl",
499 "statement : expr ';'",
500 "$$8 :",
501 "$$9 :",
502 "statement : IF '(' $$6 expr ')' THEN $$8 statement ELSE $$9 statement",
503 "statement : IF '(' $$6 expr ')' THEN $$8 statement",
504 "$$10 :",
505 "statement : $$10 block_statement",
506 "statement_list :",
507 "statement_list : statement_list $$2 statement",
508 "block_statement : '{' $$2 statement_list '}'",
509 
510 };
511 #endif
512 
513 #if YYDEBUG
514 int      yydebug;
515 #endif
516 
517 int      yyerrflag;
518 int      yychar;
519 YYSTYPE  yyval;
520 YYSTYPE  yylval;
521 int      yynerrs;
522 
523 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
524 YYLTYPE  yyloc; /* position returned by actions */
525 YYLTYPE  yylloc; /* position from the lexer */
526 #endif
527 
528 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
529 #ifndef YYLLOC_DEFAULT
530 #define YYLLOC_DEFAULT(loc, rhs, n) \
531 do \
532 { \
533     if (n == 0) \
534     { \
535         (loc).first_line   = YYRHSLOC(rhs, 0).last_line; \
536         (loc).first_column = YYRHSLOC(rhs, 0).last_column; \
537         (loc).last_line    = YYRHSLOC(rhs, 0).last_line; \
538         (loc).last_column  = YYRHSLOC(rhs, 0).last_column; \
539     } \
540     else \
541     { \
542         (loc).first_line   = YYRHSLOC(rhs, 1).first_line; \
543         (loc).first_column = YYRHSLOC(rhs, 1).first_column; \
544         (loc).last_line    = YYRHSLOC(rhs, n).last_line; \
545         (loc).last_column  = YYRHSLOC(rhs, n).last_column; \
546     } \
547 } while (0)
548 #endif /* YYLLOC_DEFAULT */
549 #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
550 #if YYBTYACC
551 
552 #ifndef YYLVQUEUEGROWTH
553 #define YYLVQUEUEGROWTH 32
554 #endif
555 #endif /* YYBTYACC */
556 
557 /* define the initial stack-sizes */
558 #ifdef YYSTACKSIZE
559 #undef YYMAXDEPTH
560 #define YYMAXDEPTH  YYSTACKSIZE
561 #else
562 #ifdef YYMAXDEPTH
563 #define YYSTACKSIZE YYMAXDEPTH
564 #else
565 #define YYSTACKSIZE 10000
566 #define YYMAXDEPTH  10000
567 #endif
568 #endif
569 
570 #ifndef YYINITSTACKSIZE
571 #define YYINITSTACKSIZE 200
572 #endif
573 
574 typedef struct {
575     unsigned stacksize;
576     YYINT    *s_base;
577     YYINT    *s_mark;
578     YYINT    *s_last;
579     YYSTYPE  *l_base;
580     YYSTYPE  *l_mark;
581 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
582     YYLTYPE  *p_base;
583     YYLTYPE  *p_mark;
584 #endif
585 } YYSTACKDATA;
586 #if YYBTYACC
587 
588 struct YYParseState_s
589 {
590     struct YYParseState_s *save;    /* Previously saved parser state */
591     YYSTACKDATA            yystack; /* saved parser stack */
592     int                    state;   /* saved parser state */
593     int                    errflag; /* saved error recovery status */
594     int                    lexeme;  /* saved index of the conflict lexeme in the lexical queue */
595     YYINT                  ctry;    /* saved index in yyctable[] for this conflict */
596 };
597 typedef struct YYParseState_s YYParseState;
598 #endif /* YYBTYACC */
599 /* variables for the parser stack */
600 static YYSTACKDATA yystack;
601 #if YYBTYACC
602 
603 /* Current parser state */
604 static YYParseState *yyps = 0;
605 
606 /* yypath != NULL: do the full parse, starting at *yypath parser state. */
607 static YYParseState *yypath = 0;
608 
609 /* Base of the lexical value queue */
610 static YYSTYPE *yylvals = 0;
611 
612 /* Current position at lexical value queue */
613 static YYSTYPE *yylvp = 0;
614 
615 /* End position of lexical value queue */
616 static YYSTYPE *yylve = 0;
617 
618 /* The last allocated position at the lexical value queue */
619 static YYSTYPE *yylvlim = 0;
620 
621 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
622 /* Base of the lexical position queue */
623 static YYLTYPE *yylpsns = 0;
624 
625 /* Current position at lexical position queue */
626 static YYLTYPE *yylpp = 0;
627 
628 /* End position of lexical position queue */
629 static YYLTYPE *yylpe = 0;
630 
631 /* The last allocated position at the lexical position queue */
632 static YYLTYPE *yylplim = 0;
633 #endif
634 
635 /* Current position at lexical token queue */
636 static YYINT  *yylexp = 0;
637 
638 static YYINT  *yylexemes = 0;
639 #endif /* YYBTYACC */
640 #line 200 "btyacc_demo.y"
641 
642 extern int YYLEX_DECL();
643 extern void YYERROR_DECL();
644 
645 extern Scope *global_scope;
646 
647 extern Decl * lookup(Scope *scope, char *id);
648 extern Scope * new_scope(Scope *outer_scope);
649 extern Scope * start_fn_def(Scope *scope, Decl *fn_decl);
650 extern void finish_fn_def(Decl *fn_decl, Code *block);
651 extern Type * type_combine(Type *specs, Type *spec);
652 extern Type * bare_extern(void);
653 extern Type * bare_register(void);
654 extern Type * bare_static(void);
655 extern Type * bare_const(void);
656 extern Type * bare_volatile(void);
657 extern Decl * declare(Scope *scope, char *id, Type *type);
658 extern Decl * make_pointer(Decl *decl, Type *type);
659 extern Decl * make_array(Type *type, Expr *expr);
660 extern Decl * build_function(Decl *decl, Decl_List *dlist, Type *type);
661 extern Decl_List * append_dlist(Decl_List *dlist, Decl *decl);
662 extern Decl_List * build_dlist(Decl *decl);
663 extern Expr * build_expr(Expr *left, enum Operator op, Expr *right);
664 extern Expr * var_expr(Scope *scope, char *id);
665 extern Code * build_expr_code(Expr *expr);
666 extern Code * build_if(Expr *cond_expr, Code *then_stmt, Code *else_stmt);
667 extern Code * code_append(Code *stmt_list, Code *stmt);
668 #line 667 "btyacc_demo.tab.c"
669 
670 /* Release memory associated with symbol. */
671 #if ! defined YYDESTRUCT_IS_DECLARED
672 static void
673 YYDESTRUCT_DECL()
674 {
675     switch (psymb)
676     {
677 	case 43:
678 #line 83 "btyacc_demo.y"
679 	{ printf("%s accessed by symbol with no type @ position[%d,%d..%d,%d]\n",
680 			 msg,
681 			 (*loc).first_line, (*loc).first_column,
682 			 (*loc).last_line, (*loc).last_column);
683 		  /* in this example, we don't know what to do here */ }
684 	break;
685 #line 684 "btyacc_demo.tab.c"
686 	case 45:
687 #line 83 "btyacc_demo.y"
688 	{ printf("%s accessed by symbol with no type @ position[%d,%d..%d,%d]\n",
689 			 msg,
690 			 (*loc).first_line, (*loc).first_column,
691 			 (*loc).last_line, (*loc).last_column);
692 		  /* in this example, we don't know what to do here */ }
693 	break;
694 #line 693 "btyacc_demo.tab.c"
695 	case 42:
696 #line 83 "btyacc_demo.y"
697 	{ printf("%s accessed by symbol with no type @ position[%d,%d..%d,%d]\n",
698 			 msg,
699 			 (*loc).first_line, (*loc).first_column,
700 			 (*loc).last_line, (*loc).last_column);
701 		  /* in this example, we don't know what to do here */ }
702 	break;
703 #line 702 "btyacc_demo.tab.c"
704 	case 47:
705 #line 83 "btyacc_demo.y"
706 	{ printf("%s accessed by symbol with no type @ position[%d,%d..%d,%d]\n",
707 			 msg,
708 			 (*loc).first_line, (*loc).first_column,
709 			 (*loc).last_line, (*loc).last_column);
710 		  /* in this example, we don't know what to do here */ }
711 	break;
712 #line 711 "btyacc_demo.tab.c"
713 	case 37:
714 #line 83 "btyacc_demo.y"
715 	{ printf("%s accessed by symbol with no type @ position[%d,%d..%d,%d]\n",
716 			 msg,
717 			 (*loc).first_line, (*loc).first_column,
718 			 (*loc).last_line, (*loc).last_column);
719 		  /* in this example, we don't know what to do here */ }
720 	break;
721 #line 720 "btyacc_demo.tab.c"
722 	case 257:
723 #line 83 "btyacc_demo.y"
724 	{ printf("%s accessed by symbol with no type @ position[%d,%d..%d,%d]\n",
725 			 msg,
726 			 (*loc).first_line, (*loc).first_column,
727 			 (*loc).last_line, (*loc).last_column);
728 		  /* in this example, we don't know what to do here */ }
729 	break;
730 #line 729 "btyacc_demo.tab.c"
731 	case 258:
732 #line 83 "btyacc_demo.y"
733 	{ printf("%s accessed by symbol with no type @ position[%d,%d..%d,%d]\n",
734 			 msg,
735 			 (*loc).first_line, (*loc).first_column,
736 			 (*loc).last_line, (*loc).last_column);
737 		  /* in this example, we don't know what to do here */ }
738 	break;
739 #line 738 "btyacc_demo.tab.c"
740 	case 40:
741 #line 83 "btyacc_demo.y"
742 	{ printf("%s accessed by symbol with no type @ position[%d,%d..%d,%d]\n",
743 			 msg,
744 			 (*loc).first_line, (*loc).first_column,
745 			 (*loc).last_line, (*loc).last_column);
746 		  /* in this example, we don't know what to do here */ }
747 	break;
748 #line 747 "btyacc_demo.tab.c"
749 	case 91:
750 #line 83 "btyacc_demo.y"
751 	{ printf("%s accessed by symbol with no type @ position[%d,%d..%d,%d]\n",
752 			 msg,
753 			 (*loc).first_line, (*loc).first_column,
754 			 (*loc).last_line, (*loc).last_column);
755 		  /* in this example, we don't know what to do here */ }
756 	break;
757 #line 756 "btyacc_demo.tab.c"
758 	case 46:
759 #line 83 "btyacc_demo.y"
760 	{ printf("%s accessed by symbol with no type @ position[%d,%d..%d,%d]\n",
761 			 msg,
762 			 (*loc).first_line, (*loc).first_column,
763 			 (*loc).last_line, (*loc).last_column);
764 		  /* in this example, we don't know what to do here */ }
765 	break;
766 #line 765 "btyacc_demo.tab.c"
767 	case 259:
768 #line 78 "btyacc_demo.y"
769 	{ printf("%s accessed by symbol of any type other than <decl>  @ position[%d,%d..%d,%d]\n",
770 			 msg,
771 			 (*loc).first_line, (*loc).first_column,
772 			 (*loc).last_line, (*loc).last_column);
773 		  free((*val).id); }
774 	break;
775 #line 774 "btyacc_demo.tab.c"
776 	case 260:
777 #line 78 "btyacc_demo.y"
778 	{ printf("%s accessed by symbol of any type other than <decl>  @ position[%d,%d..%d,%d]\n",
779 			 msg,
780 			 (*loc).first_line, (*loc).first_column,
781 			 (*loc).last_line, (*loc).last_column);
782 		  free((*val).expr); }
783 	break;
784 #line 783 "btyacc_demo.tab.c"
785 	case 261:
786 #line 83 "btyacc_demo.y"
787 	{ printf("%s accessed by symbol with no type @ position[%d,%d..%d,%d]\n",
788 			 msg,
789 			 (*loc).first_line, (*loc).first_column,
790 			 (*loc).last_line, (*loc).last_column);
791 		  /* in this example, we don't know what to do here */ }
792 	break;
793 #line 792 "btyacc_demo.tab.c"
794 	case 262:
795 #line 83 "btyacc_demo.y"
796 	{ printf("%s accessed by symbol with no type @ position[%d,%d..%d,%d]\n",
797 			 msg,
798 			 (*loc).first_line, (*loc).first_column,
799 			 (*loc).last_line, (*loc).last_column);
800 		  /* in this example, we don't know what to do here */ }
801 	break;
802 #line 801 "btyacc_demo.tab.c"
803 	case 263:
804 #line 83 "btyacc_demo.y"
805 	{ printf("%s accessed by symbol with no type @ position[%d,%d..%d,%d]\n",
806 			 msg,
807 			 (*loc).first_line, (*loc).first_column,
808 			 (*loc).last_line, (*loc).last_column);
809 		  /* in this example, we don't know what to do here */ }
810 	break;
811 #line 810 "btyacc_demo.tab.c"
812 	case 264:
813 #line 83 "btyacc_demo.y"
814 	{ printf("%s accessed by symbol with no type @ position[%d,%d..%d,%d]\n",
815 			 msg,
816 			 (*loc).first_line, (*loc).first_column,
817 			 (*loc).last_line, (*loc).last_column);
818 		  /* in this example, we don't know what to do here */ }
819 	break;
820 #line 819 "btyacc_demo.tab.c"
821 	case 265:
822 #line 83 "btyacc_demo.y"
823 	{ printf("%s accessed by symbol with no type @ position[%d,%d..%d,%d]\n",
824 			 msg,
825 			 (*loc).first_line, (*loc).first_column,
826 			 (*loc).last_line, (*loc).last_column);
827 		  /* in this example, we don't know what to do here */ }
828 	break;
829 #line 828 "btyacc_demo.tab.c"
830 	case 266:
831 #line 83 "btyacc_demo.y"
832 	{ printf("%s accessed by symbol with no type @ position[%d,%d..%d,%d]\n",
833 			 msg,
834 			 (*loc).first_line, (*loc).first_column,
835 			 (*loc).last_line, (*loc).last_column);
836 		  /* in this example, we don't know what to do here */ }
837 	break;
838 #line 837 "btyacc_demo.tab.c"
839 	case 267:
840 #line 83 "btyacc_demo.y"
841 	{ printf("%s accessed by symbol with no type @ position[%d,%d..%d,%d]\n",
842 			 msg,
843 			 (*loc).first_line, (*loc).first_column,
844 			 (*loc).last_line, (*loc).last_column);
845 		  /* in this example, we don't know what to do here */ }
846 	break;
847 #line 846 "btyacc_demo.tab.c"
848 	case 268:
849 #line 83 "btyacc_demo.y"
850 	{ printf("%s accessed by symbol with no type @ position[%d,%d..%d,%d]\n",
851 			 msg,
852 			 (*loc).first_line, (*loc).first_column,
853 			 (*loc).last_line, (*loc).last_column);
854 		  /* in this example, we don't know what to do here */ }
855 	break;
856 #line 855 "btyacc_demo.tab.c"
857 	case 269:
858 #line 83 "btyacc_demo.y"
859 	{ printf("%s accessed by symbol with no type @ position[%d,%d..%d,%d]\n",
860 			 msg,
861 			 (*loc).first_line, (*loc).first_column,
862 			 (*loc).last_line, (*loc).last_column);
863 		  /* in this example, we don't know what to do here */ }
864 	break;
865 #line 864 "btyacc_demo.tab.c"
866 	case 59:
867 #line 83 "btyacc_demo.y"
868 	{ printf("%s accessed by symbol with no type @ position[%d,%d..%d,%d]\n",
869 			 msg,
870 			 (*loc).first_line, (*loc).first_column,
871 			 (*loc).last_line, (*loc).last_column);
872 		  /* in this example, we don't know what to do here */ }
873 	break;
874 #line 873 "btyacc_demo.tab.c"
875 	case 44:
876 #line 83 "btyacc_demo.y"
877 	{ printf("%s accessed by symbol with no type @ position[%d,%d..%d,%d]\n",
878 			 msg,
879 			 (*loc).first_line, (*loc).first_column,
880 			 (*loc).last_line, (*loc).last_column);
881 		  /* in this example, we don't know what to do here */ }
882 	break;
883 #line 882 "btyacc_demo.tab.c"
884 	case 41:
885 #line 83 "btyacc_demo.y"
886 	{ printf("%s accessed by symbol with no type @ position[%d,%d..%d,%d]\n",
887 			 msg,
888 			 (*loc).first_line, (*loc).first_column,
889 			 (*loc).last_line, (*loc).last_column);
890 		  /* in this example, we don't know what to do here */ }
891 	break;
892 #line 891 "btyacc_demo.tab.c"
893 	case 93:
894 #line 83 "btyacc_demo.y"
895 	{ printf("%s accessed by symbol with no type @ position[%d,%d..%d,%d]\n",
896 			 msg,
897 			 (*loc).first_line, (*loc).first_column,
898 			 (*loc).last_line, (*loc).last_column);
899 		  /* in this example, we don't know what to do here */ }
900 	break;
901 #line 900 "btyacc_demo.tab.c"
902 	case 123:
903 #line 83 "btyacc_demo.y"
904 	{ printf("%s accessed by symbol with no type @ position[%d,%d..%d,%d]\n",
905 			 msg,
906 			 (*loc).first_line, (*loc).first_column,
907 			 (*loc).last_line, (*loc).last_column);
908 		  /* in this example, we don't know what to do here */ }
909 	break;
910 #line 909 "btyacc_demo.tab.c"
911 	case 125:
912 #line 83 "btyacc_demo.y"
913 	{ printf("%s accessed by symbol with no type @ position[%d,%d..%d,%d]\n",
914 			 msg,
915 			 (*loc).first_line, (*loc).first_column,
916 			 (*loc).last_line, (*loc).last_column);
917 		  /* in this example, we don't know what to do here */ }
918 	break;
919 #line 918 "btyacc_demo.tab.c"
920 	case 270:
921 #line 83 "btyacc_demo.y"
922 	{ printf("%s accessed by symbol with no type @ position[%d,%d..%d,%d]\n",
923 			 msg,
924 			 (*loc).first_line, (*loc).first_column,
925 			 (*loc).last_line, (*loc).last_column);
926 		  /* in this example, we don't know what to do here */ }
927 	break;
928 #line 927 "btyacc_demo.tab.c"
929 	case 271:
930 #line 83 "btyacc_demo.y"
931 	{ printf("%s accessed by symbol with no type @ position[%d,%d..%d,%d]\n",
932 			 msg,
933 			 (*loc).first_line, (*loc).first_column,
934 			 (*loc).last_line, (*loc).last_column);
935 		  /* in this example, we don't know what to do here */ }
936 	break;
937 #line 936 "btyacc_demo.tab.c"
938 	case 272:
939 #line 78 "btyacc_demo.y"
940 	{ printf("%s accessed by symbol of any type other than <decl>  @ position[%d,%d..%d,%d]\n",
941 			 msg,
942 			 (*loc).first_line, (*loc).first_column,
943 			 (*loc).last_line, (*loc).last_column);
944 		  free((*val).expr); }
945 	break;
946 #line 945 "btyacc_demo.tab.c"
947 	case 273:
948 #line 67 "btyacc_demo.y"
949 	{ /* 'msg' is a 'char *' indicating the context of destructor invocation*/
950 		  printf("%s accessed by symbol \"decl\" (case s.b. 273) @ position[%d,%d..%d,%d]\n",
951 			 msg,
952 			 (*loc).first_line, (*loc).first_column,
953 			 (*loc).last_line, (*loc).last_column);
954 		  free((*val).decl->scope); free((*val).decl->type); }
955 	break;
956 #line 955 "btyacc_demo.tab.c"
957 	case 274:
958 #line 83 "btyacc_demo.y"
959 	{ printf("%s accessed by symbol with no type @ position[%d,%d..%d,%d]\n",
960 			 msg,
961 			 (*loc).first_line, (*loc).first_column,
962 			 (*loc).last_line, (*loc).last_column);
963 		  /* in this example, we don't know what to do here */ }
964 	break;
965 #line 964 "btyacc_demo.tab.c"
966 	case 275:
967 #line 83 "btyacc_demo.y"
968 	{ printf("%s accessed by symbol with no type @ position[%d,%d..%d,%d]\n",
969 			 msg,
970 			 (*loc).first_line, (*loc).first_column,
971 			 (*loc).last_line, (*loc).last_column);
972 		  /* in this example, we don't know what to do here */ }
973 	break;
974 #line 973 "btyacc_demo.tab.c"
975 	case 276:
976 #line 78 "btyacc_demo.y"
977 	{ printf("%s accessed by symbol of any type other than <decl>  @ position[%d,%d..%d,%d]\n",
978 			 msg,
979 			 (*loc).first_line, (*loc).first_column,
980 			 (*loc).last_line, (*loc).last_column);
981 		  free((*val).code); }
982 	break;
983 #line 982 "btyacc_demo.tab.c"
984 	case 277:
985 #line 78 "btyacc_demo.y"
986 	{ printf("%s accessed by symbol of any type other than <decl>  @ position[%d,%d..%d,%d]\n",
987 			 msg,
988 			 (*loc).first_line, (*loc).first_column,
989 			 (*loc).last_line, (*loc).last_column);
990 		  free((*val).code); }
991 	break;
992 #line 991 "btyacc_demo.tab.c"
993 	case 278:
994 #line 78 "btyacc_demo.y"
995 	{ printf("%s accessed by symbol of any type other than <decl>  @ position[%d,%d..%d,%d]\n",
996 			 msg,
997 			 (*loc).first_line, (*loc).first_column,
998 			 (*loc).last_line, (*loc).last_column);
999 		  free((*val).code); }
1000 	break;
1001 #line 1000 "btyacc_demo.tab.c"
1002 	case 279:
1003 #line 73 "btyacc_demo.y"
1004 	{ printf("%s accessed by symbol with type <decl> (case s.b. 279 & 280) @ position[%d,%d..%d,%d]\n",
1005 			 msg,
1006 			 (*loc).first_line, (*loc).first_column,
1007 			 (*loc).last_line, (*loc).last_column);
1008 		  free((*val).decl); }
1009 	break;
1010 #line 1009 "btyacc_demo.tab.c"
1011 	case 280:
1012 #line 73 "btyacc_demo.y"
1013 	{ printf("%s accessed by symbol with type <decl> (case s.b. 279 & 280) @ position[%d,%d..%d,%d]\n",
1014 			 msg,
1015 			 (*loc).first_line, (*loc).first_column,
1016 			 (*loc).last_line, (*loc).last_column);
1017 		  free((*val).decl); }
1018 	break;
1019 #line 1018 "btyacc_demo.tab.c"
1020 	case 281:
1021 #line 78 "btyacc_demo.y"
1022 	{ printf("%s accessed by symbol of any type other than <decl>  @ position[%d,%d..%d,%d]\n",
1023 			 msg,
1024 			 (*loc).first_line, (*loc).first_column,
1025 			 (*loc).last_line, (*loc).last_column);
1026 		  free((*val).type); }
1027 	break;
1028 #line 1027 "btyacc_demo.tab.c"
1029 	case 282:
1030 #line 78 "btyacc_demo.y"
1031 	{ printf("%s accessed by symbol of any type other than <decl>  @ position[%d,%d..%d,%d]\n",
1032 			 msg,
1033 			 (*loc).first_line, (*loc).first_column,
1034 			 (*loc).last_line, (*loc).last_column);
1035 		  free((*val).type); }
1036 	break;
1037 #line 1036 "btyacc_demo.tab.c"
1038 	case 283:
1039 #line 78 "btyacc_demo.y"
1040 	{ printf("%s accessed by symbol of any type other than <decl>  @ position[%d,%d..%d,%d]\n",
1041 			 msg,
1042 			 (*loc).first_line, (*loc).first_column,
1043 			 (*loc).last_line, (*loc).last_column);
1044 		  free((*val).type); }
1045 	break;
1046 #line 1045 "btyacc_demo.tab.c"
1047 	case 284:
1048 #line 78 "btyacc_demo.y"
1049 	{ printf("%s accessed by symbol of any type other than <decl>  @ position[%d,%d..%d,%d]\n",
1050 			 msg,
1051 			 (*loc).first_line, (*loc).first_column,
1052 			 (*loc).last_line, (*loc).last_column);
1053 		  free((*val).type); }
1054 	break;
1055 #line 1054 "btyacc_demo.tab.c"
1056 	case 285:
1057 #line 78 "btyacc_demo.y"
1058 	{ printf("%s accessed by symbol of any type other than <decl>  @ position[%d,%d..%d,%d]\n",
1059 			 msg,
1060 			 (*loc).first_line, (*loc).first_column,
1061 			 (*loc).last_line, (*loc).last_column);
1062 		  free((*val).type); }
1063 	break;
1064 #line 1063 "btyacc_demo.tab.c"
1065 	case 286:
1066 #line 78 "btyacc_demo.y"
1067 	{ printf("%s accessed by symbol of any type other than <decl>  @ position[%d,%d..%d,%d]\n",
1068 			 msg,
1069 			 (*loc).first_line, (*loc).first_column,
1070 			 (*loc).last_line, (*loc).last_column);
1071 		  free((*val).scope); }
1072 	break;
1073 #line 1072 "btyacc_demo.tab.c"
1074 	case 287:
1075 #line 78 "btyacc_demo.y"
1076 	{ printf("%s accessed by symbol of any type other than <decl>  @ position[%d,%d..%d,%d]\n",
1077 			 msg,
1078 			 (*loc).first_line, (*loc).first_column,
1079 			 (*loc).last_line, (*loc).last_column);
1080 		  free((*val).dlist); }
1081 	break;
1082 #line 1081 "btyacc_demo.tab.c"
1083 	case 288:
1084 #line 78 "btyacc_demo.y"
1085 	{ printf("%s accessed by symbol of any type other than <decl>  @ position[%d,%d..%d,%d]\n",
1086 			 msg,
1087 			 (*loc).first_line, (*loc).first_column,
1088 			 (*loc).last_line, (*loc).last_column);
1089 		  free((*val).dlist); }
1090 	break;
1091 #line 1090 "btyacc_demo.tab.c"
1092 	case 289:
1093 #line 78 "btyacc_demo.y"
1094 	{ printf("%s accessed by symbol of any type other than <decl>  @ position[%d,%d..%d,%d]\n",
1095 			 msg,
1096 			 (*loc).first_line, (*loc).first_column,
1097 			 (*loc).last_line, (*loc).last_column);
1098 		  free((*val).scope); }
1099 	break;
1100 #line 1099 "btyacc_demo.tab.c"
1101 	case 290:
1102 #line 78 "btyacc_demo.y"
1103 	{ printf("%s accessed by symbol of any type other than <decl>  @ position[%d,%d..%d,%d]\n",
1104 			 msg,
1105 			 (*loc).first_line, (*loc).first_column,
1106 			 (*loc).last_line, (*loc).last_column);
1107 		  free((*val).scope); }
1108 	break;
1109 #line 1108 "btyacc_demo.tab.c"
1110 	case 291:
1111 #line 78 "btyacc_demo.y"
1112 	{ printf("%s accessed by symbol of any type other than <decl>  @ position[%d,%d..%d,%d]\n",
1113 			 msg,
1114 			 (*loc).first_line, (*loc).first_column,
1115 			 (*loc).last_line, (*loc).last_column);
1116 		  free((*val).scope); }
1117 	break;
1118 #line 1117 "btyacc_demo.tab.c"
1119 	case 292:
1120 #line 78 "btyacc_demo.y"
1121 	{ printf("%s accessed by symbol of any type other than <decl>  @ position[%d,%d..%d,%d]\n",
1122 			 msg,
1123 			 (*loc).first_line, (*loc).first_column,
1124 			 (*loc).last_line, (*loc).last_column);
1125 		  free((*val).scope); }
1126 	break;
1127 #line 1126 "btyacc_demo.tab.c"
1128 	case 293:
1129 #line 78 "btyacc_demo.y"
1130 	{ printf("%s accessed by symbol of any type other than <decl>  @ position[%d,%d..%d,%d]\n",
1131 			 msg,
1132 			 (*loc).first_line, (*loc).first_column,
1133 			 (*loc).last_line, (*loc).last_column);
1134 		  free((*val).type); }
1135 	break;
1136 #line 1135 "btyacc_demo.tab.c"
1137 	case 294:
1138 #line 78 "btyacc_demo.y"
1139 	{ printf("%s accessed by symbol of any type other than <decl>  @ position[%d,%d..%d,%d]\n",
1140 			 msg,
1141 			 (*loc).first_line, (*loc).first_column,
1142 			 (*loc).last_line, (*loc).last_column);
1143 		  free((*val).scope); }
1144 	break;
1145 #line 1144 "btyacc_demo.tab.c"
1146 	case 295:
1147 #line 78 "btyacc_demo.y"
1148 	{ printf("%s accessed by symbol of any type other than <decl>  @ position[%d,%d..%d,%d]\n",
1149 			 msg,
1150 			 (*loc).first_line, (*loc).first_column,
1151 			 (*loc).last_line, (*loc).last_column);
1152 		  free((*val).type); }
1153 	break;
1154 #line 1153 "btyacc_demo.tab.c"
1155 	case 296:
1156 #line 78 "btyacc_demo.y"
1157 	{ printf("%s accessed by symbol of any type other than <decl>  @ position[%d,%d..%d,%d]\n",
1158 			 msg,
1159 			 (*loc).first_line, (*loc).first_column,
1160 			 (*loc).last_line, (*loc).last_column);
1161 		  free((*val).scope); }
1162 	break;
1163 #line 1162 "btyacc_demo.tab.c"
1164 	case 297:
1165 #line 78 "btyacc_demo.y"
1166 	{ printf("%s accessed by symbol of any type other than <decl>  @ position[%d,%d..%d,%d]\n",
1167 			 msg,
1168 			 (*loc).first_line, (*loc).first_column,
1169 			 (*loc).last_line, (*loc).last_column);
1170 		  free((*val).scope); }
1171 	break;
1172 #line 1171 "btyacc_demo.tab.c"
1173 	case 298:
1174 #line 78 "btyacc_demo.y"
1175 	{ printf("%s accessed by symbol of any type other than <decl>  @ position[%d,%d..%d,%d]\n",
1176 			 msg,
1177 			 (*loc).first_line, (*loc).first_column,
1178 			 (*loc).last_line, (*loc).last_column);
1179 		  free((*val).scope); }
1180 	break;
1181 #line 1180 "btyacc_demo.tab.c"
1182     }
1183 }
1184 #define YYDESTRUCT_IS_DECLARED 1
1185 #endif
1186 
1187 /* For use in generated program */
1188 #define yydepth (int)(yystack.s_mark - yystack.s_base)
1189 #if YYBTYACC
1190 #define yytrial (yyps->save)
1191 #endif /* YYBTYACC */
1192 
1193 #if YYDEBUG
1194 #include <stdio.h>	/* needed for printf */
1195 #endif
1196 
1197 #include <stdlib.h>	/* needed for malloc, etc */
1198 #include <string.h>	/* needed for memset */
1199 
1200 /* allocate initial stack or double stack size, up to YYMAXDEPTH */
1201 static int yygrowstack(YYSTACKDATA *data)
1202 {
1203     int i;
1204     unsigned newsize;
1205     YYINT *newss;
1206     YYSTYPE *newvs;
1207 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1208     YYLTYPE *newps;
1209 #endif
1210 
1211     if ((newsize = data->stacksize) == 0)
1212         newsize = YYINITSTACKSIZE;
1213     else if (newsize >= YYMAXDEPTH)
1214         return YYENOMEM;
1215     else if ((newsize *= 2) > YYMAXDEPTH)
1216         newsize = YYMAXDEPTH;
1217 
1218     i = (int) (data->s_mark - data->s_base);
1219     newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
1220     if (newss == 0)
1221         return YYENOMEM;
1222 
1223     data->s_base = newss;
1224     data->s_mark = newss + i;
1225 
1226     newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
1227     if (newvs == 0)
1228         return YYENOMEM;
1229 
1230     data->l_base = newvs;
1231     data->l_mark = newvs + i;
1232 
1233 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1234     newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps));
1235     if (newps == 0)
1236         return YYENOMEM;
1237 
1238     data->p_base = newps;
1239     data->p_mark = newps + i;
1240 #endif
1241 
1242     data->stacksize = newsize;
1243     data->s_last = data->s_base + newsize - 1;
1244 
1245 #if YYDEBUG
1246     if (yydebug)
1247         fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize);
1248 #endif
1249     return 0;
1250 }
1251 
1252 #if YYPURE || defined(YY_NO_LEAKS)
1253 static void yyfreestack(YYSTACKDATA *data)
1254 {
1255     free(data->s_base);
1256     free(data->l_base);
1257 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1258     free(data->p_base);
1259 #endif
1260     memset(data, 0, sizeof(*data));
1261 }
1262 #else
1263 #define yyfreestack(data) /* nothing */
1264 #endif /* YYPURE || defined(YY_NO_LEAKS) */
1265 #if YYBTYACC
1266 
1267 static YYParseState *
1268 yyNewState(unsigned size)
1269 {
1270     YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState));
1271     if (p == NULL) return NULL;
1272 
1273     p->yystack.stacksize = size;
1274     if (size == 0)
1275     {
1276         p->yystack.s_base = NULL;
1277         p->yystack.l_base = NULL;
1278 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1279         p->yystack.p_base = NULL;
1280 #endif
1281         return p;
1282     }
1283     p->yystack.s_base    = (YYINT *) malloc(size * sizeof(YYINT));
1284     if (p->yystack.s_base == NULL) return NULL;
1285     p->yystack.l_base    = (YYSTYPE *) malloc(size * sizeof(YYSTYPE));
1286     if (p->yystack.l_base == NULL) return NULL;
1287     memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE));
1288 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1289     p->yystack.p_base    = (YYLTYPE *) malloc(size * sizeof(YYLTYPE));
1290     if (p->yystack.p_base == NULL) return NULL;
1291     memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE));
1292 #endif
1293 
1294     return p;
1295 }
1296 
1297 static void
1298 yyFreeState(YYParseState *p)
1299 {
1300     yyfreestack(&p->yystack);
1301     free(p);
1302 }
1303 #endif /* YYBTYACC */
1304 
1305 #define YYABORT  goto yyabort
1306 #define YYREJECT goto yyabort
1307 #define YYACCEPT goto yyaccept
1308 #define YYERROR  goto yyerrlab
1309 #if YYBTYACC
1310 #define YYVALID        do { if (yyps->save)            goto yyvalid; } while(0)
1311 #define YYVALID_NESTED do { if (yyps->save && \
1312                                 yyps->save->save == 0) goto yyvalid; } while(0)
1313 #endif /* YYBTYACC */
1314 
1315 int
1316 YYPARSE_DECL()
1317 {
1318     int yym, yyn, yystate, yyresult;
1319 #if YYBTYACC
1320     int yynewerrflag;
1321     YYParseState *yyerrctx = NULL;
1322 #endif /* YYBTYACC */
1323 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1324     YYLTYPE  yyerror_loc_range[3]; /* position of error start/end (0 unused) */
1325 #endif
1326 #if YYDEBUG
1327     const char *yys;
1328 
1329     if ((yys = getenv("YYDEBUG")) != 0)
1330     {
1331         yyn = *yys;
1332         if (yyn >= '0' && yyn <= '9')
1333             yydebug = yyn - '0';
1334     }
1335     if (yydebug)
1336         fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX);
1337 #endif
1338 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1339     memset(yyerror_loc_range, 0, sizeof(yyerror_loc_range));
1340 #endif
1341 
1342 #if YYBTYACC
1343     yyps = yyNewState(0); if (yyps == 0) goto yyenomem;
1344     yyps->save = 0;
1345 #endif /* YYBTYACC */
1346     yym = 0;
1347     yyn = 0;
1348     yynerrs = 0;
1349     yyerrflag = 0;
1350     yychar = YYEMPTY;
1351     yystate = 0;
1352 
1353 #if YYPURE
1354     memset(&yystack, 0, sizeof(yystack));
1355 #endif
1356 
1357     if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
1358     yystack.s_mark = yystack.s_base;
1359     yystack.l_mark = yystack.l_base;
1360 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1361     yystack.p_mark = yystack.p_base;
1362 #endif
1363     yystate = 0;
1364     *yystack.s_mark = 0;
1365 
1366 yyloop:
1367     if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
1368     if (yychar < 0)
1369     {
1370 #if YYBTYACC
1371         do {
1372         if (yylvp < yylve)
1373         {
1374             /* we're currently re-reading tokens */
1375             yylval = *yylvp++;
1376 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1377             yylloc = *yylpp++;
1378 #endif
1379             yychar = *yylexp++;
1380             break;
1381         }
1382         if (yyps->save)
1383         {
1384             /* in trial mode; save scanner results for future parse attempts */
1385             if (yylvp == yylvlim)
1386             {   /* Enlarge lexical value queue */
1387                 size_t p = (size_t) (yylvp - yylvals);
1388                 size_t s = (size_t) (yylvlim - yylvals);
1389 
1390                 s += YYLVQUEUEGROWTH;
1391                 if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem;
1392                 if ((yylvals   = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem;
1393 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1394                 if ((yylpsns   = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem;
1395 #endif
1396                 yylvp   = yylve = yylvals + p;
1397                 yylvlim = yylvals + s;
1398 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1399                 yylpp   = yylpe = yylpsns + p;
1400                 yylplim = yylpsns + s;
1401 #endif
1402                 yylexp  = yylexemes + p;
1403             }
1404             *yylexp = (YYINT) YYLEX;
1405             *yylvp++ = yylval;
1406             yylve++;
1407 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1408             *yylpp++ = yylloc;
1409             yylpe++;
1410 #endif
1411             yychar = *yylexp++;
1412             break;
1413         }
1414         /* normal operation, no conflict encountered */
1415 #endif /* YYBTYACC */
1416         yychar = YYLEX;
1417 #if YYBTYACC
1418         } while (0);
1419 #endif /* YYBTYACC */
1420         if (yychar < 0) yychar = YYEOF;
1421 #if YYDEBUG
1422         if (yydebug)
1423         {
1424             if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
1425             fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)",
1426                             YYDEBUGSTR, yydepth, yystate, yychar, yys);
1427 #ifdef YYSTYPE_TOSTRING
1428 #if YYBTYACC
1429             if (!yytrial)
1430 #endif /* YYBTYACC */
1431                 fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval));
1432 #endif
1433             fputc('\n', stderr);
1434         }
1435 #endif
1436     }
1437 #if YYBTYACC
1438 
1439     /* Do we have a conflict? */
1440     if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
1441         yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
1442     {
1443         YYINT ctry;
1444 
1445         if (yypath)
1446         {
1447             YYParseState *save;
1448 #if YYDEBUG
1449             if (yydebug)
1450                 fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n",
1451                                 YYDEBUGSTR, yydepth, yystate);
1452 #endif
1453             /* Switch to the next conflict context */
1454             save = yypath;
1455             yypath = save->save;
1456             save->save = NULL;
1457             ctry = save->ctry;
1458             if (save->state != yystate) YYABORT;
1459             yyFreeState(save);
1460 
1461         }
1462         else
1463         {
1464 
1465             /* Unresolved conflict - start/continue trial parse */
1466             YYParseState *save;
1467 #if YYDEBUG
1468             if (yydebug)
1469             {
1470                 fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate);
1471                 if (yyps->save)
1472                     fputs("ALREADY in conflict, continuing trial parse.\n", stderr);
1473                 else
1474                     fputs("Starting trial parse.\n", stderr);
1475             }
1476 #endif
1477             save                  = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1));
1478             if (save == NULL) goto yyenomem;
1479             save->save            = yyps->save;
1480             save->state           = yystate;
1481             save->errflag         = yyerrflag;
1482             save->yystack.s_mark  = save->yystack.s_base + (yystack.s_mark - yystack.s_base);
1483             memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));
1484             save->yystack.l_mark  = save->yystack.l_base + (yystack.l_mark - yystack.l_base);
1485             memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
1486 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1487             save->yystack.p_mark  = save->yystack.p_base + (yystack.p_mark - yystack.p_base);
1488             memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
1489 #endif
1490             ctry                  = yytable[yyn];
1491             if (yyctable[ctry] == -1)
1492             {
1493 #if YYDEBUG
1494                 if (yydebug && yychar >= YYEOF)
1495                     fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth);
1496 #endif
1497                 ctry++;
1498             }
1499             save->ctry = ctry;
1500             if (yyps->save == NULL)
1501             {
1502                 /* If this is a first conflict in the stack, start saving lexemes */
1503                 if (!yylexemes)
1504                 {
1505                     yylexemes = (YYINT *) malloc((YYLVQUEUEGROWTH) * sizeof(YYINT));
1506                     if (yylexemes == NULL) goto yyenomem;
1507                     yylvals   = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE));
1508                     if (yylvals == NULL) goto yyenomem;
1509                     yylvlim   = yylvals + YYLVQUEUEGROWTH;
1510 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1511                     yylpsns   = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE));
1512                     if (yylpsns == NULL) goto yyenomem;
1513                     yylplim   = yylpsns + YYLVQUEUEGROWTH;
1514 #endif
1515                 }
1516                 if (yylvp == yylve)
1517                 {
1518                     yylvp  = yylve = yylvals;
1519 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1520                     yylpp  = yylpe = yylpsns;
1521 #endif
1522                     yylexp = yylexemes;
1523                     if (yychar >= YYEOF)
1524                     {
1525                         *yylve++ = yylval;
1526 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1527                         *yylpe++ = yylloc;
1528 #endif
1529                         *yylexp  = (YYINT) yychar;
1530                         yychar   = YYEMPTY;
1531                     }
1532                 }
1533             }
1534             if (yychar >= YYEOF)
1535             {
1536                 yylvp--;
1537 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1538                 yylpp--;
1539 #endif
1540                 yylexp--;
1541                 yychar = YYEMPTY;
1542             }
1543             save->lexeme = (int) (yylvp - yylvals);
1544             yyps->save   = save;
1545         }
1546         if (yytable[yyn] == ctry)
1547         {
1548 #if YYDEBUG
1549             if (yydebug)
1550                 fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n",
1551                                 YYDEBUGSTR, yydepth, yystate, yyctable[ctry]);
1552 #endif
1553             if (yychar < 0)
1554             {
1555                 yylvp++;
1556 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1557                 yylpp++;
1558 #endif
1559                 yylexp++;
1560             }
1561             if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
1562                 goto yyoverflow;
1563             yystate = yyctable[ctry];
1564             *++yystack.s_mark = (YYINT) yystate;
1565             *++yystack.l_mark = yylval;
1566 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1567             *++yystack.p_mark = yylloc;
1568 #endif
1569             yychar  = YYEMPTY;
1570             if (yyerrflag > 0) --yyerrflag;
1571             goto yyloop;
1572         }
1573         else
1574         {
1575             yyn = yyctable[ctry];
1576             goto yyreduce;
1577         }
1578     } /* End of code dealing with conflicts */
1579 #endif /* YYBTYACC */
1580     if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
1581             yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
1582     {
1583 #if YYDEBUG
1584         if (yydebug)
1585             fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n",
1586                             YYDEBUGSTR, yydepth, yystate, yytable[yyn]);
1587 #endif
1588         if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
1589         yystate = yytable[yyn];
1590         *++yystack.s_mark = yytable[yyn];
1591         *++yystack.l_mark = yylval;
1592 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1593         *++yystack.p_mark = yylloc;
1594 #endif
1595         yychar = YYEMPTY;
1596         if (yyerrflag > 0)  --yyerrflag;
1597         goto yyloop;
1598     }
1599     if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
1600             yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
1601     {
1602         yyn = yytable[yyn];
1603         goto yyreduce;
1604     }
1605     if (yyerrflag != 0) goto yyinrecovery;
1606 #if YYBTYACC
1607 
1608     yynewerrflag = 1;
1609     goto yyerrhandler;
1610     goto yyerrlab; /* redundant goto avoids 'unused label' warning */
1611 
1612 yyerrlab:
1613     /* explicit YYERROR from an action -- pop the rhs of the rule reduced
1614      * before looking for error recovery */
1615     yystack.s_mark -= yym;
1616     yystate = *yystack.s_mark;
1617     yystack.l_mark -= yym;
1618 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1619     yystack.p_mark -= yym;
1620 #endif
1621 
1622     yynewerrflag = 0;
1623 yyerrhandler:
1624     while (yyps->save)
1625     {
1626         int ctry;
1627         YYParseState *save = yyps->save;
1628 #if YYDEBUG
1629         if (yydebug)
1630             fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n",
1631                             YYDEBUGSTR, yydepth, yystate, yyps->save->state,
1632                     (int)(yylvp - yylvals - yyps->save->lexeme));
1633 #endif
1634         /* Memorize most forward-looking error state in case it's really an error. */
1635         if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals)
1636         {
1637             /* Free old saved error context state */
1638             if (yyerrctx) yyFreeState(yyerrctx);
1639             /* Create and fill out new saved error context state */
1640             yyerrctx                 = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1));
1641             if (yyerrctx == NULL) goto yyenomem;
1642             yyerrctx->save           = yyps->save;
1643             yyerrctx->state          = yystate;
1644             yyerrctx->errflag        = yyerrflag;
1645             yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base);
1646             memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));
1647             yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base);
1648             memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
1649 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1650             yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base);
1651             memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
1652 #endif
1653             yyerrctx->lexeme         = (int) (yylvp - yylvals);
1654         }
1655         yylvp          = yylvals   + save->lexeme;
1656 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1657         yylpp          = yylpsns   + save->lexeme;
1658 #endif
1659         yylexp         = yylexemes + save->lexeme;
1660         yychar         = YYEMPTY;
1661         yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base);
1662         memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));
1663         yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base);
1664         memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
1665 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1666         yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base);
1667         memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
1668 #endif
1669         ctry           = ++save->ctry;
1670         yystate        = save->state;
1671         /* We tried shift, try reduce now */
1672         if ((yyn = yyctable[ctry]) >= 0) goto yyreduce;
1673         yyps->save     = save->save;
1674         save->save     = NULL;
1675         yyFreeState(save);
1676 
1677         /* Nothing left on the stack -- error */
1678         if (!yyps->save)
1679         {
1680 #if YYDEBUG
1681             if (yydebug)
1682                 fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n",
1683                                 YYPREFIX, yydepth);
1684 #endif
1685             /* Restore state as it was in the most forward-advanced error */
1686             yylvp          = yylvals   + yyerrctx->lexeme;
1687 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1688             yylpp          = yylpsns   + yyerrctx->lexeme;
1689 #endif
1690             yylexp         = yylexemes + yyerrctx->lexeme;
1691             yychar         = yylexp[-1];
1692             yylval         = yylvp[-1];
1693 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1694             yylloc         = yylpp[-1];
1695 #endif
1696             yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base);
1697             memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));
1698             yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base);
1699             memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
1700 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1701             yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base);
1702             memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
1703 #endif
1704             yystate        = yyerrctx->state;
1705             yyFreeState(yyerrctx);
1706             yyerrctx       = NULL;
1707         }
1708         yynewerrflag = 1;
1709     }
1710     if (yynewerrflag == 0) goto yyinrecovery;
1711 #endif /* YYBTYACC */
1712 
1713     YYERROR_CALL("syntax error");
1714 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1715     yyerror_loc_range[1] = yylloc; /* lookahead position is error start position */
1716 #endif
1717 
1718 #if !YYBTYACC
1719     goto yyerrlab; /* redundant goto avoids 'unused label' warning */
1720 yyerrlab:
1721 #endif
1722     ++yynerrs;
1723 
1724 yyinrecovery:
1725     if (yyerrflag < 3)
1726     {
1727         yyerrflag = 3;
1728         for (;;)
1729         {
1730             if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 &&
1731                     yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE)
1732             {
1733 #if YYDEBUG
1734                 if (yydebug)
1735                     fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n",
1736                                     YYDEBUGSTR, yydepth, *yystack.s_mark, yytable[yyn]);
1737 #endif
1738                 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
1739                 yystate = yytable[yyn];
1740                 *++yystack.s_mark = yytable[yyn];
1741                 *++yystack.l_mark = yylval;
1742 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1743                 /* lookahead position is error end position */
1744                 yyerror_loc_range[2] = yylloc;
1745                 YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */
1746                 *++yystack.p_mark = yyloc;
1747 #endif
1748                 goto yyloop;
1749             }
1750             else
1751             {
1752 #if YYDEBUG
1753                 if (yydebug)
1754                     fprintf(stderr, "%s[%d]: error recovery discarding state %d\n",
1755                                     YYDEBUGSTR, yydepth, *yystack.s_mark);
1756 #endif
1757                 if (yystack.s_mark <= yystack.s_base) goto yyabort;
1758 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1759                 /* the current TOS position is the error start position */
1760                 yyerror_loc_range[1] = *yystack.p_mark;
1761 #endif
1762 #if defined(YYDESTRUCT_CALL)
1763 #if YYBTYACC
1764                 if (!yytrial)
1765 #endif /* YYBTYACC */
1766 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1767                     YYDESTRUCT_CALL("error: discarding state",
1768                                     yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark);
1769 #else
1770                     YYDESTRUCT_CALL("error: discarding state",
1771                                     yystos[*yystack.s_mark], yystack.l_mark);
1772 #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
1773 #endif /* defined(YYDESTRUCT_CALL) */
1774                 --yystack.s_mark;
1775                 --yystack.l_mark;
1776 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1777                 --yystack.p_mark;
1778 #endif
1779             }
1780         }
1781     }
1782     else
1783     {
1784         if (yychar == YYEOF) goto yyabort;
1785 #if YYDEBUG
1786         if (yydebug)
1787         {
1788             if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
1789             fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n",
1790                             YYDEBUGSTR, yydepth, yystate, yychar, yys);
1791         }
1792 #endif
1793 #if defined(YYDESTRUCT_CALL)
1794 #if YYBTYACC
1795         if (!yytrial)
1796 #endif /* YYBTYACC */
1797 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1798             YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc);
1799 #else
1800             YYDESTRUCT_CALL("error: discarding token", yychar, &yylval);
1801 #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
1802 #endif /* defined(YYDESTRUCT_CALL) */
1803         yychar = YYEMPTY;
1804         goto yyloop;
1805     }
1806 
1807 yyreduce:
1808     yym = yylen[yyn];
1809 #if YYDEBUG
1810     if (yydebug)
1811     {
1812         fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)",
1813                         YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]);
1814 #ifdef YYSTYPE_TOSTRING
1815 #if YYBTYACC
1816         if (!yytrial)
1817 #endif /* YYBTYACC */
1818             if (yym > 0)
1819             {
1820                 int i;
1821                 fputc('<', stderr);
1822                 for (i = yym; i > 0; i--)
1823                 {
1824                     if (i != yym) fputs(", ", stderr);
1825                     fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]],
1826                                            yystack.l_mark[1-i]), stderr);
1827                 }
1828                 fputc('>', stderr);
1829             }
1830 #endif
1831         fputc('\n', stderr);
1832     }
1833 #endif
1834     if (yym > 0)
1835         yyval = yystack.l_mark[1-yym];
1836     else
1837         memset(&yyval, 0, sizeof yyval);
1838 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1839 
1840     /* Perform position reduction */
1841     memset(&yyloc, 0, sizeof(yyloc));
1842 #if YYBTYACC
1843     if (!yytrial)
1844 #endif /* YYBTYACC */
1845     {
1846         YYLLOC_DEFAULT(yyloc, &yystack.p_mark[-yym], yym);
1847         /* just in case YYERROR is invoked within the action, save
1848            the start of the rhs as the error start position */
1849         yyerror_loc_range[1] = yystack.p_mark[1-yym];
1850     }
1851 #endif
1852 
1853     switch (yyn)
1854     {
1855 case 1:
1856 #line 93 "btyacc_demo.y"
1857 { yyval.scope = yystack.l_mark[0].scope; }
1858 break;
1859 case 2:
1860 #line 94 "btyacc_demo.y"
1861 { yyval.scope = global_scope; }
1862 break;
1863 case 3:
1864 #line 95 "btyacc_demo.y"
1865 { Decl *d = lookup(yystack.l_mark[-2].scope, yystack.l_mark[-1].id);
1866 			  if (!d || !d->scope) YYERROR;
1867 			  yyval.scope = d->scope; }
1868 break;
1869 case 4:
1870 #line 101 "btyacc_demo.y"
1871 { Decl *d = lookup(yystack.l_mark[-1].scope, yystack.l_mark[0].id);
1872 	if (d == NULL || d->istype() == 0) YYERROR;
1873 	yyval.type = d->type; }
1874 break;
1875 case 5:
1876 #line 106 "btyacc_demo.y"
1877 yyval.scope = global_scope = new_scope(0);
1878 break;
1879 case 8:
1880 #line 107 "btyacc_demo.y"
1881 yyval.scope = yystack.l_mark[-1].scope;
1882 break;
1883 case 10:
1884 #line 109 "btyacc_demo.y"
1885 {YYVALID;}
1886 break;
1887 case 11:
1888 #line 110 "btyacc_demo.y"
1889 yyval.scope = start_fn_def(yystack.l_mark[-2].scope, yystack.l_mark[0].decl);
1890 break;
1891 case 12:
1892   if (!yytrial)
1893 #line 111 "btyacc_demo.y"
1894 	{ /* demonstrate use of @$ & @N, although this is just the
1895 	   default computation and so is not necessary */
1896 	yyloc.first_line   = yystack.p_mark[-3].first_line;
1897 	yyloc.first_column = yystack.p_mark[-3].first_column;
1898 	yyloc.last_line    = yystack.p_mark[0].last_line;
1899 	yyloc.last_column  = yystack.p_mark[0].last_column;
1900 	finish_fn_def(yystack.l_mark[-2].decl, yystack.l_mark[0].code); }
1901 break;
1902 case 13:
1903 #line 121 "btyacc_demo.y"
1904 { yyval.type = yystack.l_mark[0].type; }
1905 break;
1906 case 14:
1907 #line 122 "btyacc_demo.y"
1908 { yyval.type = type_combine(yystack.l_mark[-2].type, yystack.l_mark[0].type); }
1909 break;
1910 case 15:
1911 #line 125 "btyacc_demo.y"
1912 { yyval.type = 0; }
1913 break;
1914 case 16:
1915 #line 126 "btyacc_demo.y"
1916 { yyval.type = type_combine(yystack.l_mark[-1].type, yystack.l_mark[0].type); }
1917 break;
1918 case 17:
1919 #line 130 "btyacc_demo.y"
1920 { yyval.type = yystack.l_mark[0].type; }
1921 break;
1922 case 18:
1923 #line 131 "btyacc_demo.y"
1924 { yyval.type = yystack.l_mark[0].type; }
1925 break;
1926 case 19:
1927 #line 132 "btyacc_demo.y"
1928 { yyval.type = bare_extern(); }
1929 break;
1930 case 20:
1931 #line 133 "btyacc_demo.y"
1932 { yyval.type = bare_register(); }
1933 break;
1934 case 21:
1935 #line 134 "btyacc_demo.y"
1936 { yyval.type = bare_static(); }
1937 break;
1938 case 22:
1939 #line 138 "btyacc_demo.y"
1940 { yyval.type = bare_const(); }
1941 break;
1942 case 23:
1943 #line 139 "btyacc_demo.y"
1944 { yyval.type = bare_volatile(); }
1945 break;
1946 case 24:
1947 #line 143 "btyacc_demo.y"
1948 yyval.scope = yystack.l_mark[-3].scope;
1949 break;
1950 case 25:
1951 #line 143 "btyacc_demo.y"
1952 yyval.type =  yystack.l_mark[-3].type;
1953 break;
1954 case 28:
1955 #line 148 "btyacc_demo.y"
1956 { if (!yystack.l_mark[0].type) YYERROR; }  if (!yytrial)
1957 #line 149 "btyacc_demo.y"
1958 { yyval.decl = declare(yystack.l_mark[-1].scope, 0, yystack.l_mark[0].type); }
1959 break;
1960 case 29:
1961   if (!yytrial)
1962 #line 150 "btyacc_demo.y"
1963 	{ yyval.decl = declare(yystack.l_mark[-2].scope, yystack.l_mark[0].id, yystack.l_mark[-1].type); }
1964 break;
1965 case 30:
1966 #line 151 "btyacc_demo.y"
1967 yyval.scope = yystack.l_mark[-2].scope;
1968 break;
1969 case 31:
1970 #line 151 "btyacc_demo.y"
1971 yyval.type =  yystack.l_mark[-2].type;
1972 break;
1973 case 32:
1974   if (!yytrial)
1975 #line 151 "btyacc_demo.y"
1976 	{ yyval.decl = yystack.l_mark[-1].decl; }
1977 break;
1978 case 33:
1979   if (!yytrial)
1980 #line 153 "btyacc_demo.y"
1981 	{ yyval.decl = make_pointer(yystack.l_mark[0].decl, yystack.l_mark[-3].type); }
1982 break;
1983 case 34:
1984   if (!yytrial)
1985 #line 155 "btyacc_demo.y"
1986 	{ yyval.decl = make_array(yystack.l_mark[-4].decl->type, yystack.l_mark[-1].expr); }
1987 break;
1988 case 35:
1989   if (!yytrial)
1990 #line 157 "btyacc_demo.y"
1991 	{ yyval.decl = build_function(yystack.l_mark[-5].decl, yystack.l_mark[-2].dlist, yystack.l_mark[0].type); }
1992 break;
1993 case 36:
1994   if (!yytrial)
1995 #line 160 "btyacc_demo.y"
1996 	{ yyval.dlist = 0; }
1997 break;
1998 case 37:
1999   if (!yytrial)
2000 #line 161 "btyacc_demo.y"
2001 	{ yyval.dlist = yystack.l_mark[0].dlist; }
2002 break;
2003 case 38:
2004   if (!yytrial)
2005 #line 164 "btyacc_demo.y"
2006 	{ yyval.dlist = append_dlist(yystack.l_mark[-3].dlist, yystack.l_mark[0].decl); }
2007 break;
2008 case 39:
2009   if (!yytrial)
2010 #line 165 "btyacc_demo.y"
2011 	{ yyval.dlist = build_dlist(yystack.l_mark[0].decl); }
2012 break;
2013 case 40:
2014   if (!yytrial)
2015 #line 168 "btyacc_demo.y"
2016 	{ yyval.decl = yystack.l_mark[0].decl; }
2017 break;
2018 case 41:
2019   if (!yytrial)
2020 #line 172 "btyacc_demo.y"
2021 	{ yyval.expr = build_expr(yystack.l_mark[-3].expr, ADD, yystack.l_mark[0].expr); }
2022 break;
2023 case 42:
2024   if (!yytrial)
2025 #line 173 "btyacc_demo.y"
2026 	{ yyval.expr = build_expr(yystack.l_mark[-3].expr, SUB, yystack.l_mark[0].expr); }
2027 break;
2028 case 43:
2029   if (!yytrial)
2030 #line 174 "btyacc_demo.y"
2031 	{ yyval.expr = build_expr(yystack.l_mark[-3].expr, MUL, yystack.l_mark[0].expr); }
2032 break;
2033 case 44:
2034   if (!yytrial)
2035 #line 175 "btyacc_demo.y"
2036 	{ yyval.expr = build_expr(yystack.l_mark[-3].expr, MOD, yystack.l_mark[0].expr); }
2037 break;
2038 case 45:
2039   if (!yytrial)
2040 #line 176 "btyacc_demo.y"
2041 	{ yyval.expr = build_expr(yystack.l_mark[-3].expr, DIV, yystack.l_mark[0].expr); }
2042 break;
2043 case 46:
2044   if (!yytrial)
2045 #line 177 "btyacc_demo.y"
2046 	{ yyval.expr = build_expr(0, DEREF, yystack.l_mark[0].expr); }
2047 break;
2048 case 47:
2049   if (!yytrial)
2050 #line 178 "btyacc_demo.y"
2051 	{ yyval.expr = var_expr(yystack.l_mark[-1].scope, yystack.l_mark[0].id); }
2052 break;
2053 case 48:
2054   if (!yytrial)
2055 #line 179 "btyacc_demo.y"
2056 	{ yyval.expr = yystack.l_mark[0].expr; }
2057 break;
2058 case 49:
2059   if (!yytrial)
2060 #line 183 "btyacc_demo.y"
2061 	{ yyval.code = 0; }
2062 break;
2063 case 50:
2064 #line 184 "btyacc_demo.y"
2065 {YYVALID;}  if (!yytrial)
2066 #line 184 "btyacc_demo.y"
2067 { yyval.code = build_expr_code(yystack.l_mark[-1].expr); }
2068 break;
2069 case 51:
2070 #line 185 "btyacc_demo.y"
2071 yyval.scope = yystack.l_mark[-6].scope;
2072 break;
2073 case 52:
2074 #line 185 "btyacc_demo.y"
2075 yyval.scope = yystack.l_mark[-9].scope;
2076 break;
2077 case 53:
2078 #line 185 "btyacc_demo.y"
2079 {YYVALID;}  if (!yytrial)
2080 #line 186 "btyacc_demo.y"
2081 { yyval.code = build_if(yystack.l_mark[-7].expr, yystack.l_mark[-3].code, yystack.l_mark[0].code); }
2082 break;
2083 case 54:
2084 #line 187 "btyacc_demo.y"
2085 {YYVALID;}  if (!yytrial)
2086 #line 188 "btyacc_demo.y"
2087 { yyval.code = build_if(yystack.l_mark[-4].expr, yystack.l_mark[0].code, 0); }
2088 break;
2089 case 55:
2090 #line 189 "btyacc_demo.y"
2091 yyval.scope = new_scope(yystack.l_mark[0].scope);
2092 break;
2093 case 56:
2094 #line 189 "btyacc_demo.y"
2095 {YYVALID;}  if (!yytrial)
2096 #line 189 "btyacc_demo.y"
2097 { yyval.code = yystack.l_mark[0].code; }
2098 break;
2099 case 57:
2100   if (!yytrial)
2101 #line 192 "btyacc_demo.y"
2102 	{ yyval.code = 0; }
2103 break;
2104 case 58:
2105   if (!yytrial)
2106 #line 193 "btyacc_demo.y"
2107 	{ yyval.code = code_append(yystack.l_mark[-2].code, yystack.l_mark[0].code); }
2108 break;
2109 case 59:
2110   if (!yytrial)
2111 #line 197 "btyacc_demo.y"
2112 	{ yyval.code = yystack.l_mark[-1].code; }
2113 break;
2114 #line 2113 "btyacc_demo.tab.c"
2115     default:
2116         break;
2117     }
2118     yystack.s_mark -= yym;
2119     yystate = *yystack.s_mark;
2120     yystack.l_mark -= yym;
2121 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
2122     yystack.p_mark -= yym;
2123 #endif
2124     yym = yylhs[yyn];
2125     if (yystate == 0 && yym == 0)
2126     {
2127 #if YYDEBUG
2128         if (yydebug)
2129         {
2130             fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth);
2131 #ifdef YYSTYPE_TOSTRING
2132 #if YYBTYACC
2133             if (!yytrial)
2134 #endif /* YYBTYACC */
2135                 fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval));
2136 #endif
2137             fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL);
2138         }
2139 #endif
2140         yystate = YYFINAL;
2141         *++yystack.s_mark = YYFINAL;
2142         *++yystack.l_mark = yyval;
2143 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
2144         *++yystack.p_mark = yyloc;
2145 #endif
2146         if (yychar < 0)
2147         {
2148 #if YYBTYACC
2149             do {
2150             if (yylvp < yylve)
2151             {
2152                 /* we're currently re-reading tokens */
2153                 yylval = *yylvp++;
2154 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
2155                 yylloc = *yylpp++;
2156 #endif
2157                 yychar = *yylexp++;
2158                 break;
2159             }
2160             if (yyps->save)
2161             {
2162                 /* in trial mode; save scanner results for future parse attempts */
2163                 if (yylvp == yylvlim)
2164                 {   /* Enlarge lexical value queue */
2165                     size_t p = (size_t) (yylvp - yylvals);
2166                     size_t s = (size_t) (yylvlim - yylvals);
2167 
2168                     s += YYLVQUEUEGROWTH;
2169                     if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL)
2170                         goto yyenomem;
2171                     if ((yylvals   = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL)
2172                         goto yyenomem;
2173 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
2174                     if ((yylpsns   = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL)
2175                         goto yyenomem;
2176 #endif
2177                     yylvp   = yylve = yylvals + p;
2178                     yylvlim = yylvals + s;
2179 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
2180                     yylpp   = yylpe = yylpsns + p;
2181                     yylplim = yylpsns + s;
2182 #endif
2183                     yylexp  = yylexemes + p;
2184                 }
2185                 *yylexp = (YYINT) YYLEX;
2186                 *yylvp++ = yylval;
2187                 yylve++;
2188 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
2189                 *yylpp++ = yylloc;
2190                 yylpe++;
2191 #endif
2192                 yychar = *yylexp++;
2193                 break;
2194             }
2195             /* normal operation, no conflict encountered */
2196 #endif /* YYBTYACC */
2197             yychar = YYLEX;
2198 #if YYBTYACC
2199             } while (0);
2200 #endif /* YYBTYACC */
2201             if (yychar < 0) yychar = YYEOF;
2202 #if YYDEBUG
2203             if (yydebug)
2204             {
2205                 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
2206                 fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)\n",
2207                                 YYDEBUGSTR, yydepth, YYFINAL, yychar, yys);
2208             }
2209 #endif
2210         }
2211         if (yychar == YYEOF) goto yyaccept;
2212         goto yyloop;
2213     }
2214     if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 &&
2215             yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate)
2216         yystate = yytable[yyn];
2217     else
2218         yystate = yydgoto[yym];
2219 #if YYDEBUG
2220     if (yydebug)
2221     {
2222         fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth);
2223 #ifdef YYSTYPE_TOSTRING
2224 #if YYBTYACC
2225         if (!yytrial)
2226 #endif /* YYBTYACC */
2227             fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval));
2228 #endif
2229         fprintf(stderr, "shifting from state %d to state %d\n", *yystack.s_mark, yystate);
2230     }
2231 #endif
2232     if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
2233     *++yystack.s_mark = (YYINT) yystate;
2234     *++yystack.l_mark = yyval;
2235 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
2236     *++yystack.p_mark = yyloc;
2237 #endif
2238     goto yyloop;
2239 #if YYBTYACC
2240 
2241     /* Reduction declares that this path is valid. Set yypath and do a full parse */
2242 yyvalid:
2243     if (yypath) YYABORT;
2244     while (yyps->save)
2245     {
2246         YYParseState *save = yyps->save;
2247         yyps->save = save->save;
2248         save->save = yypath;
2249         yypath = save;
2250     }
2251 #if YYDEBUG
2252     if (yydebug)
2253         fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n",
2254                         YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme));
2255 #endif
2256     if (yyerrctx)
2257     {
2258         yyFreeState(yyerrctx);
2259         yyerrctx = NULL;
2260     }
2261     yylvp          = yylvals + yypath->lexeme;
2262 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
2263     yylpp          = yylpsns + yypath->lexeme;
2264 #endif
2265     yylexp         = yylexemes + yypath->lexeme;
2266     yychar         = YYEMPTY;
2267     yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base);
2268     memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));
2269     yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base);
2270     memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
2271 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
2272     yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base);
2273     memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
2274 #endif
2275     yystate        = yypath->state;
2276     goto yyloop;
2277 #endif /* YYBTYACC */
2278 
2279 yyoverflow:
2280     YYERROR_CALL("yacc stack overflow");
2281 #if YYBTYACC
2282     goto yyabort_nomem;
2283 yyenomem:
2284     YYERROR_CALL("memory exhausted");
2285 yyabort_nomem:
2286 #endif /* YYBTYACC */
2287     yyresult = 2;
2288     goto yyreturn;
2289 
2290 yyabort:
2291     yyresult = 1;
2292     goto yyreturn;
2293 
2294 yyaccept:
2295 #if YYBTYACC
2296     if (yyps->save) goto yyvalid;
2297 #endif /* YYBTYACC */
2298     yyresult = 0;
2299 
2300 yyreturn:
2301 #if defined(YYDESTRUCT_CALL)
2302     if (yychar != YYEOF && yychar != YYEMPTY)
2303 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
2304         YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc);
2305 #else
2306         YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval);
2307 #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
2308 
2309     {
2310         YYSTYPE *pv;
2311 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
2312         YYLTYPE *pp;
2313 
2314         for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp)
2315              YYDESTRUCT_CALL("cleanup: discarding state",
2316                              yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp);
2317 #else
2318         for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv)
2319              YYDESTRUCT_CALL("cleanup: discarding state",
2320                              yystos[*(yystack.s_base + (pv - yystack.l_base))], pv);
2321 #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
2322     }
2323 #endif /* defined(YYDESTRUCT_CALL) */
2324 
2325 #if YYBTYACC
2326     if (yyerrctx)
2327     {
2328         yyFreeState(yyerrctx);
2329         yyerrctx = NULL;
2330     }
2331     while (yyps)
2332     {
2333         YYParseState *save = yyps;
2334         yyps = save->save;
2335         save->save = NULL;
2336         yyFreeState(save);
2337     }
2338     while (yypath)
2339     {
2340         YYParseState *save = yypath;
2341         yypath = save->save;
2342         save->save = NULL;
2343         yyFreeState(save);
2344     }
2345 #endif /* YYBTYACC */
2346     yyfreestack(&yystack);
2347     return (yyresult);
2348 }
2349