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