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