1264790Sbapt/* original parser id follows */
2264790Sbapt/* yysccsid[] = "@(#)yaccpar	1.9 (Berkeley) 02/21/93" */
3272955Srodrigc/* (use YYMAJOR/YYMINOR for ifdefs dependent of parser version) */
4264790Sbapt
5264790Sbapt#define YYBYACC 1
6264790Sbapt#define YYMAJOR 1
7264790Sbapt#define YYMINOR 9
8264790Sbapt#define YYCHECK "yyyymmdd"
9264790Sbapt
10264790Sbapt#define YYEMPTY        (-1)
11264790Sbapt#define yyclearin      (yychar = YYEMPTY)
12264790Sbapt#define yyerrok        (yyerrflag = 0)
13264790Sbapt#define YYRECOVERING() (yyerrflag != 0)
14264790Sbapt#define YYENOMEM       (-2)
15264790Sbapt#define YYEOF          0
16264790Sbapt#undef YYBTYACC
17264790Sbapt#define YYBTYACC 0
18264790Sbapt#define YYDEBUGSTR YYPREFIX "debug"
19264790Sbapt
20264790Sbapt#ifndef yyparse
21264790Sbapt#define yyparse    calc2_parse
22264790Sbapt#endif /* yyparse */
23264790Sbapt
24264790Sbapt#ifndef yylex
25264790Sbapt#define yylex      calc2_lex
26264790Sbapt#endif /* yylex */
27264790Sbapt
28264790Sbapt#ifndef yyerror
29264790Sbapt#define yyerror    calc2_error
30264790Sbapt#endif /* yyerror */
31264790Sbapt
32264790Sbapt#ifndef yychar
33264790Sbapt#define yychar     calc2_char
34264790Sbapt#endif /* yychar */
35264790Sbapt
36264790Sbapt#ifndef yyval
37264790Sbapt#define yyval      calc2_val
38264790Sbapt#endif /* yyval */
39264790Sbapt
40264790Sbapt#ifndef yylval
41264790Sbapt#define yylval     calc2_lval
42264790Sbapt#endif /* yylval */
43264790Sbapt
44264790Sbapt#ifndef yydebug
45264790Sbapt#define yydebug    calc2_debug
46264790Sbapt#endif /* yydebug */
47264790Sbapt
48264790Sbapt#ifndef yynerrs
49264790Sbapt#define yynerrs    calc2_nerrs
50264790Sbapt#endif /* yynerrs */
51264790Sbapt
52264790Sbapt#ifndef yyerrflag
53264790Sbapt#define yyerrflag  calc2_errflag
54264790Sbapt#endif /* yyerrflag */
55264790Sbapt
56264790Sbapt#ifndef yylhs
57264790Sbapt#define yylhs      calc2_lhs
58264790Sbapt#endif /* yylhs */
59264790Sbapt
60264790Sbapt#ifndef yylen
61264790Sbapt#define yylen      calc2_len
62264790Sbapt#endif /* yylen */
63264790Sbapt
64264790Sbapt#ifndef yydefred
65264790Sbapt#define yydefred   calc2_defred
66264790Sbapt#endif /* yydefred */
67264790Sbapt
68264790Sbapt#ifndef yystos
69264790Sbapt#define yystos     calc2_stos
70264790Sbapt#endif /* yystos */
71264790Sbapt
72264790Sbapt#ifndef yydgoto
73264790Sbapt#define yydgoto    calc2_dgoto
74264790Sbapt#endif /* yydgoto */
75264790Sbapt
76264790Sbapt#ifndef yysindex
77264790Sbapt#define yysindex   calc2_sindex
78264790Sbapt#endif /* yysindex */
79264790Sbapt
80264790Sbapt#ifndef yyrindex
81264790Sbapt#define yyrindex   calc2_rindex
82264790Sbapt#endif /* yyrindex */
83264790Sbapt
84264790Sbapt#ifndef yygindex
85264790Sbapt#define yygindex   calc2_gindex
86264790Sbapt#endif /* yygindex */
87264790Sbapt
88264790Sbapt#ifndef yytable
89264790Sbapt#define yytable    calc2_table
90264790Sbapt#endif /* yytable */
91264790Sbapt
92264790Sbapt#ifndef yycheck
93264790Sbapt#define yycheck    calc2_check
94264790Sbapt#endif /* yycheck */
95264790Sbapt
96264790Sbapt#ifndef yyname
97264790Sbapt#define yyname     calc2_name
98264790Sbapt#endif /* yyname */
99264790Sbapt
100264790Sbapt#ifndef yyrule
101264790Sbapt#define yyrule     calc2_rule
102264790Sbapt#endif /* yyrule */
103264790Sbapt
104264790Sbapt#if YYBTYACC
105264790Sbapt
106264790Sbapt#ifndef yycindex
107264790Sbapt#define yycindex   calc2_cindex
108264790Sbapt#endif /* yycindex */
109264790Sbapt
110264790Sbapt#ifndef yyctable
111264790Sbapt#define yyctable   calc2_ctable
112264790Sbapt#endif /* yyctable */
113264790Sbapt
114264790Sbapt#endif /* YYBTYACC */
115264790Sbapt
116264790Sbapt#define YYPREFIX "calc2_"
117264790Sbapt
118264790Sbapt#define YYPURE 0
119264790Sbapt
120264790Sbapt#line 7 "calc2.y"
121264790Sbapt# include <stdio.h>
122264790Sbapt# include <ctype.h>
123264790Sbapt
124264790Sbapt#ifdef YYBISON
125264790Sbapt#define YYLEX_PARAM base
126264790Sbapt#define YYLEX_DECL() yylex(int *YYLEX_PARAM)
127264790Sbapt#define YYERROR_DECL() yyerror(int regs[26], int *base, const char *s)
128264790Sbaptint YYLEX_DECL();
129264790Sbaptstatic void YYERROR_DECL();
130264790Sbapt#endif
131264790Sbapt
132264790Sbapt#line 133 "calc2.tab.c"
133264790Sbapt
134264790Sbapt#if ! defined(YYSTYPE) && ! defined(YYSTYPE_IS_DECLARED)
135264790Sbapt/* Default: YYSTYPE is the semantic value type. */
136264790Sbapttypedef int YYSTYPE;
137264790Sbapt# define YYSTYPE_IS_DECLARED 1
138264790Sbapt#endif
139264790Sbapt
140264790Sbapt/* compatibility with bison */
141264790Sbapt#ifdef YYPARSE_PARAM
142264790Sbapt/* compatibility with FreeBSD */
143264790Sbapt# ifdef YYPARSE_PARAM_TYPE
144264790Sbapt#  define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
145264790Sbapt# else
146264790Sbapt#  define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
147264790Sbapt# endif
148264790Sbapt#else
149272955Srodrigc# define YYPARSE_DECL() yyparse(int regs[26], int *base)
150264790Sbapt#endif
151264790Sbapt
152264790Sbapt/* Parameters sent to lex. */
153264790Sbapt#ifdef YYLEX_PARAM
154264790Sbapt# define YYLEX_DECL() yylex(void *YYLEX_PARAM)
155264790Sbapt# define YYLEX yylex(YYLEX_PARAM)
156264790Sbapt#else
157272955Srodrigc# define YYLEX_DECL() yylex(int *base)
158264790Sbapt# define YYLEX yylex(base)
159264790Sbapt#endif
160264790Sbapt
161264790Sbapt/* Parameters sent to yyerror. */
162264790Sbapt#ifndef YYERROR_DECL
163272955Srodrigc#define YYERROR_DECL() yyerror(int regs[26], int *base, const char *s)
164264790Sbapt#endif
165264790Sbapt#ifndef YYERROR_CALL
166264790Sbapt#define YYERROR_CALL(msg) yyerror(regs, base, msg)
167264790Sbapt#endif
168264790Sbapt
169264790Sbaptextern int YYPARSE_DECL();
170264790Sbapt
171264790Sbapt#define DIGIT 257
172264790Sbapt#define LETTER 258
173264790Sbapt#define UMINUS 259
174264790Sbapt#define YYERRCODE 256
175264790Sbapttypedef short YYINT;
176264790Sbaptstatic const YYINT calc2_lhs[] = {                       -1,
177264790Sbapt    0,    0,    0,    1,    1,    2,    2,    2,    2,    2,
178264790Sbapt    2,    2,    2,    2,    2,    2,    3,    3,
179264790Sbapt};
180264790Sbaptstatic const YYINT calc2_len[] = {                        2,
181264790Sbapt    0,    3,    3,    1,    3,    3,    3,    3,    3,    3,
182264790Sbapt    3,    3,    3,    2,    1,    1,    1,    2,
183264790Sbapt};
184264790Sbaptstatic const YYINT calc2_defred[] = {                     1,
185264790Sbapt    0,    0,   17,    0,    0,    0,    0,    0,    0,    3,
186264790Sbapt    0,   15,   14,    0,    2,    0,    0,    0,    0,    0,
187264790Sbapt    0,    0,   18,    0,    6,    0,    0,    0,    0,    9,
188264790Sbapt   10,   11,
189264790Sbapt};
190264790Sbaptstatic const YYINT calc2_stos[] = {                       0,
191264790Sbapt  261,  256,  257,  258,   45,   40,  262,  263,  264,   10,
192264790Sbapt   61,  258,  263,  263,   10,  124,   38,   43,   45,   42,
193264790Sbapt   47,   37,  257,  263,   41,  263,  263,  263,  263,  263,
194264790Sbapt  263,  263,
195264790Sbapt};
196264790Sbaptstatic const YYINT calc2_dgoto[] = {                      1,
197264790Sbapt    7,    8,    9,
198264790Sbapt};
199264790Sbaptstatic const YYINT calc2_sindex[] = {                     0,
200264790Sbapt  -40,   -7,    0,  -55,  -38,  -38,    1,  -29, -247,    0,
201264790Sbapt  -38,    0,    0,   22,    0,  -38,  -38,  -38,  -38,  -38,
202264790Sbapt  -38,  -38,    0,  -29,    0,   51,   60,  -20,  -20,    0,
203264790Sbapt    0,    0,
204264790Sbapt};
205264790Sbaptstatic const YYINT calc2_rindex[] = {                     0,
206264790Sbapt    0,    0,    0,    2,    0,    0,    0,    9,   -9,    0,
207264790Sbapt    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
208264790Sbapt    0,    0,    0,   10,    0,   -6,   14,    5,   13,    0,
209264790Sbapt    0,    0,
210264790Sbapt};
211264790Sbapt#if YYBTYACC
212264790Sbaptstatic const YYINT calc2_cindex[] = {                     0,
213264790Sbapt    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
214264790Sbapt    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
215264790Sbapt    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
216264790Sbapt    0,    0,
217264790Sbapt};
218264790Sbapt#endif
219264790Sbaptstatic const YYINT calc2_gindex[] = {                     0,
220264790Sbapt    0,   65,    0,
221264790Sbapt};
222264790Sbapt#define YYTABLESIZE 220
223264790Sbaptstatic const YYINT calc2_table[] = {                      6,
224264790Sbapt   16,    6,   10,   13,    5,   11,    5,   22,   17,   23,
225264790Sbapt   15,   15,   20,   18,    7,   19,   22,   21,    4,    5,
226264790Sbapt    0,   20,    8,   12,    0,    0,   21,   16,   16,    0,
227264790Sbapt    0,   16,   16,   16,   13,   16,    0,   16,   15,   15,
228264790Sbapt    0,    0,    7,   15,   15,    7,   15,    7,   15,    7,
229264790Sbapt    8,   12,    0,    8,   12,    8,    0,    8,   22,   17,
230264790Sbapt    0,    0,   25,   20,   18,    0,   19,    0,   21,   13,
231264790Sbapt   14,    0,    0,    0,    0,   24,    0,    0,    0,    0,
232264790Sbapt   26,   27,   28,   29,   30,   31,   32,   22,   17,    0,
233264790Sbapt    0,    0,   20,   18,   16,   19,   22,   21,    0,    0,
234264790Sbapt    0,   20,   18,    0,   19,    0,   21,    0,    0,    0,
235264790Sbapt    0,    0,    0,    0,   16,    0,    0,   13,    0,    0,
236264790Sbapt    0,    0,    0,    0,    0,   15,    0,    0,    7,    0,
237264790Sbapt    0,    0,    0,    0,    0,    0,    8,   12,    0,    0,
238264790Sbapt    0,    0,    0,    0,    0,   16,    0,    0,    0,    0,
239264790Sbapt    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
240264790Sbapt    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
241264790Sbapt    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
242264790Sbapt    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
243264790Sbapt    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
244264790Sbapt    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
245264790Sbapt    0,    0,    0,    0,    0,    2,    3,    4,    3,   12,
246264790Sbapt};
247264790Sbaptstatic const YYINT calc2_check[] = {                     40,
248264790Sbapt   10,   40,   10,   10,   45,   61,   45,   37,   38,  257,
249264790Sbapt   10,   10,   42,   43,   10,   45,   37,   47,   10,   10,
250264790Sbapt   -1,   42,   10,   10,   -1,   -1,   47,   37,   38,   -1,
251264790Sbapt   -1,   41,   42,   43,   41,   45,   -1,   47,   37,   38,
252264790Sbapt   -1,   -1,   38,   42,   43,   41,   45,   43,   47,   45,
253264790Sbapt   38,   38,   -1,   41,   41,   43,   -1,   45,   37,   38,
254264790Sbapt   -1,   -1,   41,   42,   43,   -1,   45,   -1,   47,    5,
255264790Sbapt    6,   -1,   -1,   -1,   -1,   11,   -1,   -1,   -1,   -1,
256264790Sbapt   16,   17,   18,   19,   20,   21,   22,   37,   38,   -1,
257264790Sbapt   -1,   -1,   42,   43,  124,   45,   37,   47,   -1,   -1,
258264790Sbapt   -1,   42,   43,   -1,   45,   -1,   47,   -1,   -1,   -1,
259264790Sbapt   -1,   -1,   -1,   -1,  124,   -1,   -1,  124,   -1,   -1,
260264790Sbapt   -1,   -1,   -1,   -1,   -1,  124,   -1,   -1,  124,   -1,
261264790Sbapt   -1,   -1,   -1,   -1,   -1,   -1,  124,  124,   -1,   -1,
262264790Sbapt   -1,   -1,   -1,   -1,   -1,  124,   -1,   -1,   -1,   -1,
263264790Sbapt   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
264264790Sbapt   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
265264790Sbapt   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
266264790Sbapt   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
267264790Sbapt   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
268264790Sbapt   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
269264790Sbapt   -1,   -1,   -1,   -1,   -1,  256,  257,  258,  257,  258,
270264790Sbapt};
271272955Srodrigc#if YYBTYACC
272272955Srodrigcstatic const YYINT calc2_ctable[] = {                    -1,
273272955Srodrigc   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
274272955Srodrigc   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
275272955Srodrigc   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
276272955Srodrigc   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
277272955Srodrigc   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
278272955Srodrigc   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
279272955Srodrigc   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
280272955Srodrigc   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
281272955Srodrigc   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
282272955Srodrigc   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
283272955Srodrigc   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
284272955Srodrigc   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
285272955Srodrigc   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
286272955Srodrigc   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
287272955Srodrigc   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
288272955Srodrigc   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
289272955Srodrigc   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
290272955Srodrigc   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
291272955Srodrigc   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
292272955Srodrigc   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
293272955Srodrigc   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
294272955Srodrigc   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
295272955Srodrigc};
296272955Srodrigc#endif
297264790Sbapt#define YYFINAL 1
298264790Sbapt#ifndef YYDEBUG
299264790Sbapt#define YYDEBUG 0
300264790Sbapt#endif
301264790Sbapt#define YYMAXTOKEN 259
302264790Sbapt#define YYUNDFTOKEN 265
303264790Sbapt#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))
304264790Sbapt#if YYDEBUG
305264790Sbaptstatic const char *const calc2_name[] = {
306264790Sbapt
307264790Sbapt"$end",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
308264790Sbapt0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,0,0,0,
309264790Sbapt0,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,
310264790Sbapt0,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,
311264790Sbapt0,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,
312264790Sbapt0,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,
313264790Sbapt0,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,
314264790Sbapt0,0,"error","DIGIT","LETTER","UMINUS","$accept","list","stat","expr","number",
315264790Sbapt"illegal-symbol",
316264790Sbapt};
317264790Sbaptstatic const char *const calc2_rule[] = {
318264790Sbapt"$accept : list",
319264790Sbapt"list :",
320264790Sbapt"list : list stat '\\n'",
321264790Sbapt"list : list error '\\n'",
322264790Sbapt"stat : expr",
323264790Sbapt"stat : LETTER '=' expr",
324264790Sbapt"expr : '(' expr ')'",
325264790Sbapt"expr : expr '+' expr",
326264790Sbapt"expr : expr '-' expr",
327264790Sbapt"expr : expr '*' expr",
328264790Sbapt"expr : expr '/' expr",
329264790Sbapt"expr : expr '%' expr",
330264790Sbapt"expr : expr '&' expr",
331264790Sbapt"expr : expr '|' expr",
332264790Sbapt"expr : '-' expr",
333264790Sbapt"expr : LETTER",
334264790Sbapt"expr : number",
335264790Sbapt"number : DIGIT",
336264790Sbapt"number : number DIGIT",
337264790Sbapt
338264790Sbapt};
339264790Sbapt#endif
340264790Sbapt
341264790Sbaptint      yydebug;
342264790Sbaptint      yynerrs;
343264790Sbapt
344264790Sbaptint      yyerrflag;
345264790Sbaptint      yychar;
346264790SbaptYYSTYPE  yyval;
347264790SbaptYYSTYPE  yylval;
348264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
349264790SbaptYYLTYPE  yyloc; /* position returned by actions */
350264790SbaptYYLTYPE  yylloc; /* position from the lexer */
351264790Sbapt#endif
352264790Sbapt
353264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
354264790Sbapt#ifndef YYLLOC_DEFAULT
355264790Sbapt#define YYLLOC_DEFAULT(loc, rhs, n) \
356264790Sbaptdo \
357264790Sbapt{ \
358264790Sbapt    if (n == 0) \
359264790Sbapt    { \
360264790Sbapt        (loc).first_line   = ((rhs)[-1]).last_line; \
361264790Sbapt        (loc).first_column = ((rhs)[-1]).last_column; \
362264790Sbapt        (loc).last_line    = ((rhs)[-1]).last_line; \
363264790Sbapt        (loc).last_column  = ((rhs)[-1]).last_column; \
364264790Sbapt    } \
365264790Sbapt    else \
366264790Sbapt    { \
367264790Sbapt        (loc).first_line   = ((rhs)[ 0 ]).first_line; \
368264790Sbapt        (loc).first_column = ((rhs)[ 0 ]).first_column; \
369264790Sbapt        (loc).last_line    = ((rhs)[n-1]).last_line; \
370264790Sbapt        (loc).last_column  = ((rhs)[n-1]).last_column; \
371264790Sbapt    } \
372264790Sbapt} while (0)
373264790Sbapt#endif /* YYLLOC_DEFAULT */
374264790Sbapt#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
375264790Sbapt#if YYBTYACC
376264790Sbapt
377264790Sbapt#ifndef YYLVQUEUEGROWTH
378264790Sbapt#define YYLVQUEUEGROWTH 32
379264790Sbapt#endif
380264790Sbapt#endif /* YYBTYACC */
381264790Sbapt
382264790Sbapt/* define the initial stack-sizes */
383264790Sbapt#ifdef YYSTACKSIZE
384264790Sbapt#undef YYMAXDEPTH
385264790Sbapt#define YYMAXDEPTH  YYSTACKSIZE
386264790Sbapt#else
387264790Sbapt#ifdef YYMAXDEPTH
388264790Sbapt#define YYSTACKSIZE YYMAXDEPTH
389264790Sbapt#else
390264790Sbapt#define YYSTACKSIZE 10000
391264790Sbapt#define YYMAXDEPTH  10000
392264790Sbapt#endif
393264790Sbapt#endif
394264790Sbapt
395264790Sbapt#ifndef YYINITSTACKSIZE
396264790Sbapt#define YYINITSTACKSIZE 200
397264790Sbapt#endif
398264790Sbapt
399264790Sbapttypedef struct {
400264790Sbapt    unsigned stacksize;
401264790Sbapt    short    *s_base;
402264790Sbapt    short    *s_mark;
403264790Sbapt    short    *s_last;
404264790Sbapt    YYSTYPE  *l_base;
405264790Sbapt    YYSTYPE  *l_mark;
406264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
407264790Sbapt    YYLTYPE  *p_base;
408264790Sbapt    YYLTYPE  *p_mark;
409264790Sbapt#endif
410264790Sbapt} YYSTACKDATA;
411264790Sbapt#if YYBTYACC
412264790Sbapt
413264790Sbaptstruct YYParseState_s
414264790Sbapt{
415264790Sbapt    struct YYParseState_s *save;    /* Previously saved parser state */
416264790Sbapt    YYSTACKDATA            yystack; /* saved parser stack */
417264790Sbapt    int                    state;   /* saved parser state */
418264790Sbapt    int                    errflag; /* saved error recovery status */
419264790Sbapt    int                    lexeme;  /* saved index of the conflict lexeme in the lexical queue */
420264790Sbapt    YYINT                  ctry;    /* saved index in yyctable[] for this conflict */
421264790Sbapt};
422264790Sbapttypedef struct YYParseState_s YYParseState;
423264790Sbapt#endif /* YYBTYACC */
424264790Sbapt/* variables for the parser stack */
425264790Sbaptstatic YYSTACKDATA yystack;
426264790Sbapt#if YYBTYACC
427264790Sbapt
428264790Sbapt/* Current parser state */
429264790Sbaptstatic YYParseState *yyps = 0;
430264790Sbapt
431264790Sbapt/* yypath != NULL: do the full parse, starting at *yypath parser state. */
432264790Sbaptstatic YYParseState *yypath = 0;
433264790Sbapt
434264790Sbapt/* Base of the lexical value queue */
435264790Sbaptstatic YYSTYPE *yylvals = 0;
436264790Sbapt
437264790Sbapt/* Current position at lexical value queue */
438264790Sbaptstatic YYSTYPE *yylvp = 0;
439264790Sbapt
440264790Sbapt/* End position of lexical value queue */
441264790Sbaptstatic YYSTYPE *yylve = 0;
442264790Sbapt
443264790Sbapt/* The last allocated position at the lexical value queue */
444264790Sbaptstatic YYSTYPE *yylvlim = 0;
445264790Sbapt
446264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
447264790Sbapt/* Base of the lexical position queue */
448264790Sbaptstatic YYLTYPE *yylpsns = 0;
449264790Sbapt
450264790Sbapt/* Current position at lexical position queue */
451264790Sbaptstatic YYLTYPE *yylpp = 0;
452264790Sbapt
453264790Sbapt/* End position of lexical position queue */
454264790Sbaptstatic YYLTYPE *yylpe = 0;
455264790Sbapt
456264790Sbapt/* The last allocated position at the lexical position queue */
457264790Sbaptstatic YYLTYPE *yylplim = 0;
458264790Sbapt#endif
459264790Sbapt
460264790Sbapt/* Current position at lexical token queue */
461264790Sbaptstatic short  *yylexp = 0;
462264790Sbapt
463264790Sbaptstatic short  *yylexemes = 0;
464264790Sbapt#endif /* YYBTYACC */
465264790Sbapt#line 73 "calc2.y"
466264790Sbapt /* start of programs */
467264790Sbapt
468264790Sbapt#ifdef YYBYACC
469264790Sbaptextern int YYLEX_DECL();
470264790Sbapt#endif
471264790Sbapt
472264790Sbaptint
473264790Sbaptmain (void)
474264790Sbapt{
475264790Sbapt    int regs[26];
476264790Sbapt    int base = 10;
477264790Sbapt
478264790Sbapt    while(!feof(stdin)) {
479264790Sbapt	yyparse(regs, &base);
480264790Sbapt    }
481264790Sbapt    return 0;
482264790Sbapt}
483264790Sbapt
484264790Sbapt#define UNUSED(x) ((void)(x))
485264790Sbapt
486264790Sbaptstatic void
487264790SbaptYYERROR_DECL()
488264790Sbapt{
489264790Sbapt    UNUSED(regs); /* %parse-param regs is not actually used here */
490264790Sbapt    UNUSED(base); /* %parse-param base is not actually used here */
491264790Sbapt    fprintf(stderr, "%s\n", s);
492264790Sbapt}
493264790Sbapt
494264790Sbaptint
495264790SbaptYYLEX_DECL()
496264790Sbapt{
497264790Sbapt	/* lexical analysis routine */
498264790Sbapt	/* returns LETTER for a lower case letter, yylval = 0 through 25 */
499264790Sbapt	/* return DIGIT for a digit, yylval = 0 through 9 */
500264790Sbapt	/* all other characters are returned immediately */
501264790Sbapt
502264790Sbapt    int c;
503264790Sbapt
504264790Sbapt    while( (c=getchar()) == ' ' )   { /* skip blanks */ }
505264790Sbapt
506264790Sbapt    /* c is now nonblank */
507264790Sbapt
508264790Sbapt    if( islower( c )) {
509264790Sbapt	yylval = c - 'a';
510264790Sbapt	return ( LETTER );
511264790Sbapt    }
512264790Sbapt    if( isdigit( c )) {
513264790Sbapt	yylval = (c - '0') % (*base);
514264790Sbapt	return ( DIGIT );
515264790Sbapt    }
516264790Sbapt    return( c );
517264790Sbapt}
518272955Srodrigc#line 519 "calc2.tab.c"
519264790Sbapt
520264790Sbapt/* For use in generated program */
521264790Sbapt#define yydepth (int)(yystack.s_mark - yystack.s_base)
522264790Sbapt#if YYBTYACC
523264790Sbapt#define yytrial (yyps->save)
524264790Sbapt#endif /* YYBTYACC */
525264790Sbapt
526264790Sbapt#if YYDEBUG
527272955Srodrigc#include <stdio.h>         /* needed for printf */
528264790Sbapt#endif
529264790Sbapt
530272955Srodrigc#include <stdlib.h>        /* needed for malloc, etc */
531272955Srodrigc#include <string.h>        /* needed for memset */
532264790Sbapt
533264790Sbapt/* allocate initial stack or double stack size, up to YYMAXDEPTH */
534264790Sbaptstatic int yygrowstack(YYSTACKDATA *data)
535264790Sbapt{
536264790Sbapt    int i;
537264790Sbapt    unsigned newsize;
538264790Sbapt    short *newss;
539264790Sbapt    YYSTYPE *newvs;
540264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
541264790Sbapt    YYLTYPE *newps;
542264790Sbapt#endif
543264790Sbapt
544264790Sbapt    if ((newsize = data->stacksize) == 0)
545264790Sbapt        newsize = YYINITSTACKSIZE;
546264790Sbapt    else if (newsize >= YYMAXDEPTH)
547264790Sbapt        return YYENOMEM;
548264790Sbapt    else if ((newsize *= 2) > YYMAXDEPTH)
549264790Sbapt        newsize = YYMAXDEPTH;
550264790Sbapt
551264790Sbapt    i = (int) (data->s_mark - data->s_base);
552264790Sbapt    newss = (short *)realloc(data->s_base, newsize * sizeof(*newss));
553264790Sbapt    if (newss == 0)
554264790Sbapt        return YYENOMEM;
555264790Sbapt
556264790Sbapt    data->s_base = newss;
557264790Sbapt    data->s_mark = newss + i;
558264790Sbapt
559264790Sbapt    newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
560264790Sbapt    if (newvs == 0)
561264790Sbapt        return YYENOMEM;
562264790Sbapt
563264790Sbapt    data->l_base = newvs;
564264790Sbapt    data->l_mark = newvs + i;
565264790Sbapt
566264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
567264790Sbapt    newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps));
568264790Sbapt    if (newps == 0)
569264790Sbapt        return YYENOMEM;
570264790Sbapt
571264790Sbapt    data->p_base = newps;
572264790Sbapt    data->p_mark = newps + i;
573264790Sbapt#endif
574264790Sbapt
575264790Sbapt    data->stacksize = newsize;
576264790Sbapt    data->s_last = data->s_base + newsize - 1;
577264790Sbapt
578264790Sbapt#if YYDEBUG
579264790Sbapt    if (yydebug)
580264790Sbapt        fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize);
581264790Sbapt#endif
582264790Sbapt    return 0;
583264790Sbapt}
584264790Sbapt
585264790Sbapt#if YYPURE || defined(YY_NO_LEAKS)
586264790Sbaptstatic void yyfreestack(YYSTACKDATA *data)
587264790Sbapt{
588264790Sbapt    free(data->s_base);
589264790Sbapt    free(data->l_base);
590264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
591264790Sbapt    free(data->p_base);
592264790Sbapt#endif
593264790Sbapt    memset(data, 0, sizeof(*data));
594264790Sbapt}
595264790Sbapt#else
596264790Sbapt#define yyfreestack(data) /* nothing */
597264790Sbapt#endif /* YYPURE || defined(YY_NO_LEAKS) */
598264790Sbapt#if YYBTYACC
599264790Sbapt
600264790Sbaptstatic YYParseState *
601264790SbaptyyNewState(unsigned size)
602264790Sbapt{
603264790Sbapt    YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState));
604264790Sbapt    if (p == NULL) return NULL;
605264790Sbapt
606264790Sbapt    p->yystack.stacksize = size;
607264790Sbapt    if (size == 0)
608264790Sbapt    {
609264790Sbapt        p->yystack.s_base = NULL;
610264790Sbapt        p->yystack.l_base = NULL;
611264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
612264790Sbapt        p->yystack.p_base = NULL;
613264790Sbapt#endif
614264790Sbapt        return p;
615264790Sbapt    }
616264790Sbapt    p->yystack.s_base    = (short *) malloc(size * sizeof(short));
617264790Sbapt    if (p->yystack.s_base == NULL) return NULL;
618264790Sbapt    p->yystack.l_base    = (YYSTYPE *) malloc(size * sizeof(YYSTYPE));
619264790Sbapt    if (p->yystack.l_base == NULL) return NULL;
620264790Sbapt    memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE));
621264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
622264790Sbapt    p->yystack.p_base    = (YYLTYPE *) malloc(size * sizeof(YYLTYPE));
623264790Sbapt    if (p->yystack.p_base == NULL) return NULL;
624264790Sbapt    memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE));
625264790Sbapt#endif
626264790Sbapt
627264790Sbapt    return p;
628264790Sbapt}
629264790Sbapt
630264790Sbaptstatic void
631264790SbaptyyFreeState(YYParseState *p)
632264790Sbapt{
633264790Sbapt    yyfreestack(&p->yystack);
634264790Sbapt    free(p);
635264790Sbapt}
636264790Sbapt#endif /* YYBTYACC */
637264790Sbapt
638264790Sbapt#define YYABORT  goto yyabort
639264790Sbapt#define YYREJECT goto yyabort
640264790Sbapt#define YYACCEPT goto yyaccept
641264790Sbapt#define YYERROR  goto yyerrlab
642264790Sbapt#if YYBTYACC
643264790Sbapt#define YYVALID        do { if (yyps->save)            goto yyvalid; } while(0)
644264790Sbapt#define YYVALID_NESTED do { if (yyps->save && \
645264790Sbapt                                yyps->save->save == 0) goto yyvalid; } while(0)
646264790Sbapt#endif /* YYBTYACC */
647264790Sbapt
648264790Sbaptint
649264790SbaptYYPARSE_DECL()
650264790Sbapt{
651264790Sbapt    int yym, yyn, yystate, yyresult;
652264790Sbapt#if YYBTYACC
653264790Sbapt    int yynewerrflag;
654264790Sbapt    YYParseState *yyerrctx = NULL;
655264790Sbapt#endif /* YYBTYACC */
656264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
657264790Sbapt    YYLTYPE  yyerror_loc_range[2]; /* position of error start & end */
658264790Sbapt#endif
659264790Sbapt#if YYDEBUG
660264790Sbapt    const char *yys;
661264790Sbapt
662264790Sbapt    if ((yys = getenv("YYDEBUG")) != 0)
663264790Sbapt    {
664264790Sbapt        yyn = *yys;
665264790Sbapt        if (yyn >= '0' && yyn <= '9')
666264790Sbapt            yydebug = yyn - '0';
667264790Sbapt    }
668264790Sbapt    if (yydebug)
669264790Sbapt        fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX);
670264790Sbapt#endif
671264790Sbapt
672264790Sbapt#if YYBTYACC
673264790Sbapt    yyps = yyNewState(0); if (yyps == 0) goto yyenomem;
674264790Sbapt    yyps->save = 0;
675264790Sbapt#endif /* YYBTYACC */
676264790Sbapt    yynerrs = 0;
677264790Sbapt    yyerrflag = 0;
678264790Sbapt    yychar = YYEMPTY;
679264790Sbapt    yystate = 0;
680264790Sbapt
681264790Sbapt#if YYPURE
682264790Sbapt    memset(&yystack, 0, sizeof(yystack));
683264790Sbapt#endif
684264790Sbapt
685264790Sbapt    if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
686264790Sbapt    yystack.s_mark = yystack.s_base;
687264790Sbapt    yystack.l_mark = yystack.l_base;
688264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
689264790Sbapt    yystack.p_mark = yystack.p_base;
690264790Sbapt#endif
691264790Sbapt    yystate = 0;
692264790Sbapt    *yystack.s_mark = 0;
693264790Sbapt
694264790Sbaptyyloop:
695264790Sbapt    if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
696264790Sbapt    if (yychar < 0)
697264790Sbapt    {
698264790Sbapt#if YYBTYACC
699264790Sbapt        do {
700264790Sbapt        if (yylvp < yylve)
701264790Sbapt        {
702264790Sbapt            /* we're currently re-reading tokens */
703264790Sbapt            yylval = *yylvp++;
704264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
705264790Sbapt            yylloc = *yylpp++;
706264790Sbapt#endif
707264790Sbapt            yychar = *yylexp++;
708264790Sbapt            break;
709264790Sbapt        }
710264790Sbapt        if (yyps->save)
711264790Sbapt        {
712264790Sbapt            /* in trial mode; save scanner results for future parse attempts */
713264790Sbapt            if (yylvp == yylvlim)
714264790Sbapt            {   /* Enlarge lexical value queue */
715272955Srodrigc                size_t p = (size_t) (yylvp - yylvals);
716272955Srodrigc                size_t s = (size_t) (yylvlim - yylvals);
717264790Sbapt
718264790Sbapt                s += YYLVQUEUEGROWTH;
719264790Sbapt                if ((yylexemes = (short *)   realloc(yylexemes, s * sizeof(short))) == NULL) goto yyenomem;
720264790Sbapt                if ((yylvals   = (YYSTYPE *) realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem;
721264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
722264790Sbapt                if ((yylpsns   = (YYLTYPE *) realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem;
723264790Sbapt#endif
724264790Sbapt                yylvp   = yylve = yylvals + p;
725264790Sbapt                yylvlim = yylvals + s;
726264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
727264790Sbapt                yylpp   = yylpe = yylpsns + p;
728264790Sbapt                yylplim = yylpsns + s;
729264790Sbapt#endif
730264790Sbapt                yylexp  = yylexemes + p;
731264790Sbapt            }
732264790Sbapt            *yylexp = (short) YYLEX;
733264790Sbapt            *yylvp++ = yylval;
734264790Sbapt            yylve++;
735264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
736264790Sbapt            *yylpp++ = yylloc;
737264790Sbapt            yylpe++;
738264790Sbapt#endif
739264790Sbapt            yychar = *yylexp++;
740264790Sbapt            break;
741264790Sbapt        }
742264790Sbapt        /* normal operation, no conflict encountered */
743264790Sbapt#endif /* YYBTYACC */
744264790Sbapt        yychar = YYLEX;
745264790Sbapt#if YYBTYACC
746264790Sbapt        } while (0);
747264790Sbapt#endif /* YYBTYACC */
748264790Sbapt        if (yychar < 0) yychar = YYEOF;
749264790Sbapt        /* if ((yychar = YYLEX) < 0) yychar = YYEOF; */
750264790Sbapt#if YYDEBUG
751264790Sbapt        if (yydebug)
752264790Sbapt        {
753264790Sbapt            yys = yyname[YYTRANSLATE(yychar)];
754264790Sbapt            fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)",
755264790Sbapt                            YYDEBUGSTR, yydepth, yystate, yychar, yys);
756264790Sbapt#ifdef YYSTYPE_TOSTRING
757264790Sbapt#if YYBTYACC
758264790Sbapt            if (!yytrial)
759264790Sbapt#endif /* YYBTYACC */
760264790Sbapt                fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval));
761264790Sbapt#endif
762264790Sbapt            fputc('\n', stderr);
763264790Sbapt        }
764264790Sbapt#endif
765264790Sbapt    }
766264790Sbapt#if YYBTYACC
767264790Sbapt
768264790Sbapt    /* Do we have a conflict? */
769264790Sbapt    if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
770264790Sbapt        yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
771264790Sbapt    {
772264790Sbapt        YYINT ctry;
773264790Sbapt
774264790Sbapt        if (yypath)
775264790Sbapt        {
776264790Sbapt            YYParseState *save;
777264790Sbapt#if YYDEBUG
778264790Sbapt            if (yydebug)
779264790Sbapt                fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n",
780264790Sbapt                                YYDEBUGSTR, yydepth, yystate);
781264790Sbapt#endif
782264790Sbapt            /* Switch to the next conflict context */
783264790Sbapt            save = yypath;
784264790Sbapt            yypath = save->save;
785264790Sbapt            save->save = NULL;
786264790Sbapt            ctry = save->ctry;
787264790Sbapt            if (save->state != yystate) YYABORT;
788264790Sbapt            yyFreeState(save);
789264790Sbapt
790264790Sbapt        }
791264790Sbapt        else
792264790Sbapt        {
793264790Sbapt
794264790Sbapt            /* Unresolved conflict - start/continue trial parse */
795264790Sbapt            YYParseState *save;
796264790Sbapt#if YYDEBUG
797264790Sbapt            if (yydebug)
798264790Sbapt            {
799264790Sbapt                fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate);
800264790Sbapt                if (yyps->save)
801264790Sbapt                    fputs("ALREADY in conflict, continuing trial parse.\n", stderr);
802264790Sbapt                else
803264790Sbapt                    fputs("Starting trial parse.\n", stderr);
804264790Sbapt            }
805264790Sbapt#endif
806264790Sbapt            save                  = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1));
807264790Sbapt            if (save == NULL) goto yyenomem;
808264790Sbapt            save->save            = yyps->save;
809264790Sbapt            save->state           = yystate;
810264790Sbapt            save->errflag         = yyerrflag;
811264790Sbapt            save->yystack.s_mark  = save->yystack.s_base + (yystack.s_mark - yystack.s_base);
812272955Srodrigc            memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(short));
813264790Sbapt            save->yystack.l_mark  = save->yystack.l_base + (yystack.l_mark - yystack.l_base);
814272955Srodrigc            memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
815264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
816264790Sbapt            save->yystack.p_mark  = save->yystack.p_base + (yystack.p_mark - yystack.p_base);
817272955Srodrigc            memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
818264790Sbapt#endif
819264790Sbapt            ctry                  = yytable[yyn];
820264790Sbapt            if (yyctable[ctry] == -1)
821264790Sbapt            {
822264790Sbapt#if YYDEBUG
823264790Sbapt                if (yydebug && yychar >= YYEOF)
824264790Sbapt                    fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth);
825264790Sbapt#endif
826264790Sbapt                ctry++;
827264790Sbapt            }
828264790Sbapt            save->ctry = ctry;
829264790Sbapt            if (yyps->save == NULL)
830264790Sbapt            {
831264790Sbapt                /* If this is a first conflict in the stack, start saving lexemes */
832264790Sbapt                if (!yylexemes)
833264790Sbapt                {
834264790Sbapt                    yylexemes = (short *) malloc((YYLVQUEUEGROWTH) * sizeof(short));
835264790Sbapt                    if (yylexemes == NULL) goto yyenomem;
836264790Sbapt                    yylvals   = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE));
837264790Sbapt                    if (yylvals == NULL) goto yyenomem;
838264790Sbapt                    yylvlim   = yylvals + YYLVQUEUEGROWTH;
839264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
840264790Sbapt                    yylpsns   = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE));
841264790Sbapt                    if (yylpsns == NULL) goto yyenomem;
842264790Sbapt                    yylplim   = yylpsns + YYLVQUEUEGROWTH;
843264790Sbapt#endif
844264790Sbapt                }
845264790Sbapt                if (yylvp == yylve)
846264790Sbapt                {
847264790Sbapt                    yylvp  = yylve = yylvals;
848264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
849264790Sbapt                    yylpp  = yylpe = yylpsns;
850264790Sbapt#endif
851264790Sbapt                    yylexp = yylexemes;
852264790Sbapt                    if (yychar >= YYEOF)
853264790Sbapt                    {
854264790Sbapt                        *yylve++ = yylval;
855264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
856264790Sbapt                        *yylpe++ = yylloc;
857264790Sbapt#endif
858264790Sbapt                        *yylexp  = (short) yychar;
859264790Sbapt                        yychar   = YYEMPTY;
860264790Sbapt                    }
861264790Sbapt                }
862264790Sbapt            }
863264790Sbapt            if (yychar >= YYEOF)
864264790Sbapt            {
865264790Sbapt                yylvp--;
866264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
867264790Sbapt                yylpp--;
868264790Sbapt#endif
869264790Sbapt                yylexp--;
870264790Sbapt                yychar = YYEMPTY;
871264790Sbapt            }
872272955Srodrigc            save->lexeme = (int) (yylvp - yylvals);
873264790Sbapt            yyps->save   = save;
874264790Sbapt        }
875264790Sbapt        if (yytable[yyn] == ctry)
876264790Sbapt        {
877264790Sbapt#if YYDEBUG
878264790Sbapt            if (yydebug)
879264790Sbapt                fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n",
880264790Sbapt                                YYDEBUGSTR, yydepth, yystate, yyctable[ctry]);
881264790Sbapt#endif
882264790Sbapt            if (yychar < 0)
883264790Sbapt            {
884264790Sbapt                yylvp++;
885264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
886264790Sbapt                yylpp++;
887264790Sbapt#endif
888264790Sbapt                yylexp++;
889264790Sbapt            }
890264790Sbapt            if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
891264790Sbapt                goto yyoverflow;
892264790Sbapt            yystate = yyctable[ctry];
893264790Sbapt            *++yystack.s_mark = (short) yystate;
894264790Sbapt            *++yystack.l_mark = yylval;
895264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
896264790Sbapt            *++yystack.p_mark = yylloc;
897264790Sbapt#endif
898264790Sbapt            yychar  = YYEMPTY;
899264790Sbapt            if (yyerrflag > 0) --yyerrflag;
900264790Sbapt            goto yyloop;
901264790Sbapt        }
902264790Sbapt        else
903264790Sbapt        {
904264790Sbapt            yyn = yyctable[ctry];
905264790Sbapt            goto yyreduce;
906264790Sbapt        }
907264790Sbapt    } /* End of code dealing with conflicts */
908264790Sbapt#endif /* YYBTYACC */
909264790Sbapt    if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
910264790Sbapt            yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
911264790Sbapt    {
912264790Sbapt#if YYDEBUG
913264790Sbapt        if (yydebug)
914264790Sbapt            fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n",
915264790Sbapt                            YYDEBUGSTR, yydepth, yystate, yytable[yyn]);
916264790Sbapt#endif
917264790Sbapt        if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
918264790Sbapt        yystate = yytable[yyn];
919264790Sbapt        *++yystack.s_mark = yytable[yyn];
920264790Sbapt        *++yystack.l_mark = yylval;
921264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
922264790Sbapt        *++yystack.p_mark = yylloc;
923264790Sbapt#endif
924264790Sbapt        yychar = YYEMPTY;
925264790Sbapt        if (yyerrflag > 0)  --yyerrflag;
926264790Sbapt        goto yyloop;
927264790Sbapt    }
928264790Sbapt    if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
929264790Sbapt            yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
930264790Sbapt    {
931264790Sbapt        yyn = yytable[yyn];
932264790Sbapt        goto yyreduce;
933264790Sbapt    }
934264790Sbapt    if (yyerrflag != 0) goto yyinrecovery;
935264790Sbapt#if YYBTYACC
936264790Sbapt
937264790Sbapt    yynewerrflag = 1;
938264790Sbapt    goto yyerrhandler;
939264790Sbapt    goto yyerrlab;
940264790Sbapt
941264790Sbaptyyerrlab:
942264790Sbapt    yynewerrflag = 0;
943264790Sbaptyyerrhandler:
944264790Sbapt    while (yyps->save)
945264790Sbapt    {
946264790Sbapt        int ctry;
947264790Sbapt        YYParseState *save = yyps->save;
948264790Sbapt#if YYDEBUG
949264790Sbapt        if (yydebug)
950264790Sbapt            fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n",
951264790Sbapt                            YYDEBUGSTR, yydepth, yystate, yyps->save->state,
952264790Sbapt                    (int)(yylvp - yylvals - yyps->save->lexeme));
953264790Sbapt#endif
954264790Sbapt        /* Memorize most forward-looking error state in case it's really an error. */
955264790Sbapt        if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals)
956264790Sbapt        {
957264790Sbapt            /* Free old saved error context state */
958264790Sbapt            if (yyerrctx) yyFreeState(yyerrctx);
959264790Sbapt            /* Create and fill out new saved error context state */
960264790Sbapt            yyerrctx                 = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1));
961264790Sbapt            if (yyerrctx == NULL) goto yyenomem;
962264790Sbapt            yyerrctx->save           = yyps->save;
963264790Sbapt            yyerrctx->state          = yystate;
964264790Sbapt            yyerrctx->errflag        = yyerrflag;
965264790Sbapt            yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base);
966272955Srodrigc            memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(short));
967264790Sbapt            yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base);
968272955Srodrigc            memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
969264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
970264790Sbapt            yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base);
971272955Srodrigc            memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
972264790Sbapt#endif
973272955Srodrigc            yyerrctx->lexeme         = (int) (yylvp - yylvals);
974264790Sbapt        }
975264790Sbapt        yylvp          = yylvals   + save->lexeme;
976264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
977264790Sbapt        yylpp          = yylpsns   + save->lexeme;
978264790Sbapt#endif
979264790Sbapt        yylexp         = yylexemes + save->lexeme;
980264790Sbapt        yychar         = YYEMPTY;
981264790Sbapt        yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base);
982272955Srodrigc        memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(short));
983264790Sbapt        yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base);
984272955Srodrigc        memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
985264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
986264790Sbapt        yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base);
987272955Srodrigc        memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
988264790Sbapt#endif
989264790Sbapt        ctry           = ++save->ctry;
990264790Sbapt        yystate        = save->state;
991264790Sbapt        /* We tried shift, try reduce now */
992264790Sbapt        if ((yyn = yyctable[ctry]) >= 0) goto yyreduce;
993264790Sbapt        yyps->save     = save->save;
994264790Sbapt        save->save     = NULL;
995264790Sbapt        yyFreeState(save);
996264790Sbapt
997264790Sbapt        /* Nothing left on the stack -- error */
998264790Sbapt        if (!yyps->save)
999264790Sbapt        {
1000264790Sbapt#if YYDEBUG
1001264790Sbapt            if (yydebug)
1002264790Sbapt                fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n",
1003264790Sbapt                                YYPREFIX, yydepth);
1004264790Sbapt#endif
1005264790Sbapt            /* Restore state as it was in the most forward-advanced error */
1006264790Sbapt            yylvp          = yylvals   + yyerrctx->lexeme;
1007264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1008264790Sbapt            yylpp          = yylpsns   + yyerrctx->lexeme;
1009264790Sbapt#endif
1010264790Sbapt            yylexp         = yylexemes + yyerrctx->lexeme;
1011264790Sbapt            yychar         = yylexp[-1];
1012264790Sbapt            yylval         = yylvp[-1];
1013264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1014264790Sbapt            yylloc         = yylpp[-1];
1015264790Sbapt#endif
1016264790Sbapt            yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base);
1017272955Srodrigc            memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(short));
1018264790Sbapt            yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base);
1019272955Srodrigc            memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
1020264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1021264790Sbapt            yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base);
1022272955Srodrigc            memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
1023264790Sbapt#endif
1024264790Sbapt            yystate        = yyerrctx->state;
1025264790Sbapt            yyFreeState(yyerrctx);
1026264790Sbapt            yyerrctx       = NULL;
1027264790Sbapt        }
1028264790Sbapt        yynewerrflag = 1;
1029264790Sbapt    }
1030264790Sbapt    if (yynewerrflag == 0) goto yyinrecovery;
1031264790Sbapt#endif /* YYBTYACC */
1032264790Sbapt
1033264790Sbapt    YYERROR_CALL("syntax error");
1034264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1035264790Sbapt    yyerror_loc_range[0] = yylloc; /* lookahead position is error start position */
1036264790Sbapt#endif
1037264790Sbapt
1038264790Sbapt#if !YYBTYACC
1039264790Sbapt    goto yyerrlab;
1040264790Sbaptyyerrlab:
1041264790Sbapt#endif
1042264790Sbapt    ++yynerrs;
1043264790Sbapt
1044264790Sbaptyyinrecovery:
1045264790Sbapt    if (yyerrflag < 3)
1046264790Sbapt    {
1047264790Sbapt        yyerrflag = 3;
1048264790Sbapt        for (;;)
1049264790Sbapt        {
1050264790Sbapt            if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 &&
1051264790Sbapt                    yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE)
1052264790Sbapt            {
1053264790Sbapt#if YYDEBUG
1054264790Sbapt                if (yydebug)
1055264790Sbapt                    fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n",
1056264790Sbapt                                    YYDEBUGSTR, yydepth, *yystack.s_mark, yytable[yyn]);
1057264790Sbapt#endif
1058264790Sbapt                if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
1059264790Sbapt                yystate = yytable[yyn];
1060264790Sbapt                *++yystack.s_mark = yytable[yyn];
1061264790Sbapt                *++yystack.l_mark = yylval;
1062264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1063264790Sbapt                /* lookahead position is error end position */
1064264790Sbapt                yyerror_loc_range[1] = yylloc;
1065264790Sbapt                YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */
1066264790Sbapt                *++yystack.p_mark = yyloc;
1067264790Sbapt#endif
1068264790Sbapt                goto yyloop;
1069264790Sbapt            }
1070264790Sbapt            else
1071264790Sbapt            {
1072264790Sbapt#if YYDEBUG
1073264790Sbapt                if (yydebug)
1074264790Sbapt                    fprintf(stderr, "%s[%d]: error recovery discarding state %d\n",
1075264790Sbapt                                    YYDEBUGSTR, yydepth, *yystack.s_mark);
1076264790Sbapt#endif
1077264790Sbapt                if (yystack.s_mark <= yystack.s_base) goto yyabort;
1078264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1079264790Sbapt                /* the current TOS position is the error start position */
1080264790Sbapt                yyerror_loc_range[0] = *yystack.p_mark;
1081264790Sbapt#endif
1082264790Sbapt#if defined(YYDESTRUCT_CALL)
1083264790Sbapt#if YYBTYACC
1084264790Sbapt                if (!yytrial)
1085264790Sbapt#endif /* YYBTYACC */
1086264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1087264790Sbapt                    YYDESTRUCT_CALL("error: discarding state",
1088264790Sbapt                                    yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark);
1089264790Sbapt#else
1090264790Sbapt                    YYDESTRUCT_CALL("error: discarding state",
1091264790Sbapt                                    yystos[*yystack.s_mark], yystack.l_mark);
1092264790Sbapt#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
1093264790Sbapt#endif /* defined(YYDESTRUCT_CALL) */
1094264790Sbapt                --yystack.s_mark;
1095264790Sbapt                --yystack.l_mark;
1096264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1097264790Sbapt                --yystack.p_mark;
1098264790Sbapt#endif
1099264790Sbapt            }
1100264790Sbapt        }
1101264790Sbapt    }
1102264790Sbapt    else
1103264790Sbapt    {
1104264790Sbapt        if (yychar == YYEOF) goto yyabort;
1105264790Sbapt#if YYDEBUG
1106264790Sbapt        if (yydebug)
1107264790Sbapt        {
1108264790Sbapt            yys = yyname[YYTRANSLATE(yychar)];
1109264790Sbapt            fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n",
1110264790Sbapt                            YYDEBUGSTR, yydepth, yystate, yychar, yys);
1111264790Sbapt        }
1112264790Sbapt#endif
1113264790Sbapt#if defined(YYDESTRUCT_CALL)
1114264790Sbapt#if YYBTYACC
1115264790Sbapt        if (!yytrial)
1116264790Sbapt#endif /* YYBTYACC */
1117264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1118264790Sbapt            YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc);
1119264790Sbapt#else
1120264790Sbapt            YYDESTRUCT_CALL("error: discarding token", yychar, &yylval);
1121264790Sbapt#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
1122264790Sbapt#endif /* defined(YYDESTRUCT_CALL) */
1123264790Sbapt        yychar = YYEMPTY;
1124264790Sbapt        goto yyloop;
1125264790Sbapt    }
1126264790Sbapt
1127264790Sbaptyyreduce:
1128264790Sbapt    yym = yylen[yyn];
1129264790Sbapt#if YYDEBUG
1130264790Sbapt    if (yydebug)
1131264790Sbapt    {
1132264790Sbapt        fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)",
1133264790Sbapt                        YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]);
1134264790Sbapt#ifdef YYSTYPE_TOSTRING
1135264790Sbapt#if YYBTYACC
1136264790Sbapt        if (!yytrial)
1137264790Sbapt#endif /* YYBTYACC */
1138264790Sbapt            if (yym > 0)
1139264790Sbapt            {
1140264790Sbapt                int i;
1141264790Sbapt                fputc('<', stderr);
1142264790Sbapt                for (i = yym; i > 0; i--)
1143264790Sbapt                {
1144264790Sbapt                    if (i != yym) fputs(", ", stderr);
1145264790Sbapt                    fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]],
1146264790Sbapt                                           yystack.l_mark[1-i]), stderr);
1147264790Sbapt                }
1148264790Sbapt                fputc('>', stderr);
1149264790Sbapt            }
1150264790Sbapt#endif
1151264790Sbapt        fputc('\n', stderr);
1152264790Sbapt    }
1153264790Sbapt#endif
1154264790Sbapt    if (yym > 0)
1155264790Sbapt        yyval = yystack.l_mark[1-yym];
1156264790Sbapt    else
1157264790Sbapt        memset(&yyval, 0, sizeof yyval);
1158264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1159264790Sbapt
1160264790Sbapt    /* Perform position reduction */
1161264790Sbapt    memset(&yyloc, 0, sizeof(yyloc));
1162264790Sbapt#if YYBTYACC
1163264790Sbapt    if (!yytrial)
1164264790Sbapt#endif /* YYBTYACC */
1165264790Sbapt    {
1166264790Sbapt        YYLLOC_DEFAULT(yyloc, &yystack.p_mark[1-yym], yym);
1167264790Sbapt        /* just in case YYERROR is invoked within the action, save
1168264790Sbapt           the start of the rhs as the error start position */
1169264790Sbapt        yyerror_loc_range[0] = yystack.p_mark[1-yym];
1170264790Sbapt    }
1171264790Sbapt#endif
1172264790Sbapt
1173264790Sbapt    switch (yyn)
1174264790Sbapt    {
1175264790Sbaptcase 3:
1176264790Sbapt#line 35 "calc2.y"
1177264790Sbapt	{  yyerrok ; }
1178264790Sbaptbreak;
1179264790Sbaptcase 4:
1180264790Sbapt#line 39 "calc2.y"
1181264790Sbapt	{  printf("%d\n",yystack.l_mark[0]);}
1182264790Sbaptbreak;
1183264790Sbaptcase 5:
1184264790Sbapt#line 41 "calc2.y"
1185264790Sbapt	{  regs[yystack.l_mark[-2]] = yystack.l_mark[0]; }
1186264790Sbaptbreak;
1187264790Sbaptcase 6:
1188264790Sbapt#line 45 "calc2.y"
1189264790Sbapt	{  yyval = yystack.l_mark[-1]; }
1190264790Sbaptbreak;
1191264790Sbaptcase 7:
1192264790Sbapt#line 47 "calc2.y"
1193264790Sbapt	{  yyval = yystack.l_mark[-2] + yystack.l_mark[0]; }
1194264790Sbaptbreak;
1195264790Sbaptcase 8:
1196264790Sbapt#line 49 "calc2.y"
1197264790Sbapt	{  yyval = yystack.l_mark[-2] - yystack.l_mark[0]; }
1198264790Sbaptbreak;
1199264790Sbaptcase 9:
1200264790Sbapt#line 51 "calc2.y"
1201264790Sbapt	{  yyval = yystack.l_mark[-2] * yystack.l_mark[0]; }
1202264790Sbaptbreak;
1203264790Sbaptcase 10:
1204264790Sbapt#line 53 "calc2.y"
1205264790Sbapt	{  yyval = yystack.l_mark[-2] / yystack.l_mark[0]; }
1206264790Sbaptbreak;
1207264790Sbaptcase 11:
1208264790Sbapt#line 55 "calc2.y"
1209264790Sbapt	{  yyval = yystack.l_mark[-2] % yystack.l_mark[0]; }
1210264790Sbaptbreak;
1211264790Sbaptcase 12:
1212264790Sbapt#line 57 "calc2.y"
1213264790Sbapt	{  yyval = yystack.l_mark[-2] & yystack.l_mark[0]; }
1214264790Sbaptbreak;
1215264790Sbaptcase 13:
1216264790Sbapt#line 59 "calc2.y"
1217264790Sbapt	{  yyval = yystack.l_mark[-2] | yystack.l_mark[0]; }
1218264790Sbaptbreak;
1219264790Sbaptcase 14:
1220264790Sbapt#line 61 "calc2.y"
1221264790Sbapt	{  yyval = - yystack.l_mark[0]; }
1222264790Sbaptbreak;
1223264790Sbaptcase 15:
1224264790Sbapt#line 63 "calc2.y"
1225264790Sbapt	{  yyval = regs[yystack.l_mark[0]]; }
1226264790Sbaptbreak;
1227264790Sbaptcase 17:
1228264790Sbapt#line 68 "calc2.y"
1229264790Sbapt	{  yyval = yystack.l_mark[0]; (*base) = (yystack.l_mark[0]==0) ? 8 : 10; }
1230264790Sbaptbreak;
1231264790Sbaptcase 18:
1232264790Sbapt#line 70 "calc2.y"
1233264790Sbapt	{  yyval = (*base) * yystack.l_mark[-1] + yystack.l_mark[0]; }
1234264790Sbaptbreak;
1235272955Srodrigc#line 1236 "calc2.tab.c"
1236264790Sbapt    default:
1237264790Sbapt        break;
1238264790Sbapt    }
1239264790Sbapt    yystack.s_mark -= yym;
1240264790Sbapt    yystate = *yystack.s_mark;
1241264790Sbapt    yystack.l_mark -= yym;
1242264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1243264790Sbapt    yystack.p_mark -= yym;
1244264790Sbapt#endif
1245264790Sbapt    yym = yylhs[yyn];
1246264790Sbapt    if (yystate == 0 && yym == 0)
1247264790Sbapt    {
1248264790Sbapt#if YYDEBUG
1249264790Sbapt        if (yydebug)
1250264790Sbapt        {
1251264790Sbapt            fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth);
1252264790Sbapt#ifdef YYSTYPE_TOSTRING
1253264790Sbapt#if YYBTYACC
1254264790Sbapt            if (!yytrial)
1255264790Sbapt#endif /* YYBTYACC */
1256264790Sbapt                fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval));
1257264790Sbapt#endif
1258264790Sbapt            fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL);
1259264790Sbapt        }
1260264790Sbapt#endif
1261264790Sbapt        yystate = YYFINAL;
1262264790Sbapt        *++yystack.s_mark = YYFINAL;
1263264790Sbapt        *++yystack.l_mark = yyval;
1264264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1265264790Sbapt        *++yystack.p_mark = yyloc;
1266264790Sbapt#endif
1267264790Sbapt        if (yychar < 0)
1268264790Sbapt        {
1269264790Sbapt#if YYBTYACC
1270264790Sbapt            do {
1271264790Sbapt            if (yylvp < yylve)
1272264790Sbapt            {
1273264790Sbapt                /* we're currently re-reading tokens */
1274264790Sbapt                yylval = *yylvp++;
1275264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1276264790Sbapt                yylloc = *yylpp++;
1277264790Sbapt#endif
1278264790Sbapt                yychar = *yylexp++;
1279264790Sbapt                break;
1280264790Sbapt            }
1281264790Sbapt            if (yyps->save)
1282264790Sbapt            {
1283264790Sbapt                /* in trial mode; save scanner results for future parse attempts */
1284264790Sbapt                if (yylvp == yylvlim)
1285264790Sbapt                {   /* Enlarge lexical value queue */
1286272955Srodrigc                    size_t p = (size_t) (yylvp - yylvals);
1287272955Srodrigc                    size_t s = (size_t) (yylvlim - yylvals);
1288264790Sbapt
1289264790Sbapt                    s += YYLVQUEUEGROWTH;
1290264790Sbapt                    if ((yylexemes = (short *)   realloc(yylexemes, s * sizeof(short))) == NULL)
1291264790Sbapt                        goto yyenomem;
1292264790Sbapt                    if ((yylvals   = (YYSTYPE *) realloc(yylvals, s * sizeof(YYSTYPE))) == NULL)
1293264790Sbapt                        goto yyenomem;
1294264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1295264790Sbapt                    if ((yylpsns   = (YYLTYPE *) realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL)
1296264790Sbapt                        goto yyenomem;
1297264790Sbapt#endif
1298264790Sbapt                    yylvp   = yylve = yylvals + p;
1299264790Sbapt                    yylvlim = yylvals + s;
1300264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1301264790Sbapt                    yylpp   = yylpe = yylpsns + p;
1302264790Sbapt                    yylplim = yylpsns + s;
1303264790Sbapt#endif
1304264790Sbapt                    yylexp  = yylexemes + p;
1305264790Sbapt                }
1306264790Sbapt                *yylexp = (short) YYLEX;
1307264790Sbapt                *yylvp++ = yylval;
1308264790Sbapt                yylve++;
1309264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1310264790Sbapt                *yylpp++ = yylloc;
1311264790Sbapt                yylpe++;
1312264790Sbapt#endif
1313264790Sbapt                yychar = *yylexp++;
1314264790Sbapt                break;
1315264790Sbapt            }
1316264790Sbapt            /* normal operation, no conflict encountered */
1317264790Sbapt#endif /* YYBTYACC */
1318264790Sbapt            yychar = YYLEX;
1319264790Sbapt#if YYBTYACC
1320264790Sbapt            } while (0);
1321264790Sbapt#endif /* YYBTYACC */
1322264790Sbapt            if (yychar < 0) yychar = YYEOF;
1323264790Sbapt            /* if ((yychar = YYLEX) < 0) yychar = YYEOF; */
1324264790Sbapt#if YYDEBUG
1325264790Sbapt            if (yydebug)
1326264790Sbapt            {
1327264790Sbapt                yys = yyname[YYTRANSLATE(yychar)];
1328264790Sbapt                fprintf(stderr, "%s[%d]: state %d, reading %d (%s)\n",
1329264790Sbapt                                YYDEBUGSTR, yydepth, YYFINAL, yychar, yys);
1330264790Sbapt            }
1331264790Sbapt#endif
1332264790Sbapt        }
1333264790Sbapt        if (yychar == YYEOF) goto yyaccept;
1334264790Sbapt        goto yyloop;
1335264790Sbapt    }
1336264790Sbapt    if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 &&
1337264790Sbapt            yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate)
1338264790Sbapt        yystate = yytable[yyn];
1339264790Sbapt    else
1340264790Sbapt        yystate = yydgoto[yym];
1341264790Sbapt#if YYDEBUG
1342264790Sbapt    if (yydebug)
1343264790Sbapt    {
1344264790Sbapt        fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth);
1345264790Sbapt#ifdef YYSTYPE_TOSTRING
1346264790Sbapt#if YYBTYACC
1347264790Sbapt        if (!yytrial)
1348264790Sbapt#endif /* YYBTYACC */
1349264790Sbapt            fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval));
1350264790Sbapt#endif
1351264790Sbapt        fprintf(stderr, "shifting from state %d to state %d\n", *yystack.s_mark, yystate);
1352264790Sbapt    }
1353264790Sbapt#endif
1354264790Sbapt    if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
1355264790Sbapt    *++yystack.s_mark = (short) yystate;
1356264790Sbapt    *++yystack.l_mark = yyval;
1357264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1358264790Sbapt    *++yystack.p_mark = yyloc;
1359264790Sbapt#endif
1360264790Sbapt    goto yyloop;
1361264790Sbapt#if YYBTYACC
1362264790Sbapt
1363264790Sbapt    /* Reduction declares that this path is valid. Set yypath and do a full parse */
1364264790Sbaptyyvalid:
1365264790Sbapt    if (yypath) YYABORT;
1366264790Sbapt    while (yyps->save)
1367264790Sbapt    {
1368264790Sbapt        YYParseState *save = yyps->save;
1369264790Sbapt        yyps->save = save->save;
1370264790Sbapt        save->save = yypath;
1371264790Sbapt        yypath = save;
1372264790Sbapt    }
1373264790Sbapt#if YYDEBUG
1374264790Sbapt    if (yydebug)
1375264790Sbapt        fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n",
1376264790Sbapt                        YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme));
1377264790Sbapt#endif
1378264790Sbapt    if (yyerrctx)
1379264790Sbapt    {
1380264790Sbapt        yyFreeState(yyerrctx);
1381264790Sbapt        yyerrctx = NULL;
1382264790Sbapt    }
1383264790Sbapt    yylvp          = yylvals + yypath->lexeme;
1384264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1385264790Sbapt    yylpp          = yylpsns + yypath->lexeme;
1386264790Sbapt#endif
1387264790Sbapt    yylexp         = yylexemes + yypath->lexeme;
1388264790Sbapt    yychar         = YYEMPTY;
1389264790Sbapt    yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base);
1390272955Srodrigc    memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(short));
1391264790Sbapt    yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base);
1392272955Srodrigc    memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
1393264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1394264790Sbapt    yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base);
1395272955Srodrigc    memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
1396264790Sbapt#endif
1397264790Sbapt    yystate        = yypath->state;
1398264790Sbapt    goto yyloop;
1399264790Sbapt#endif /* YYBTYACC */
1400264790Sbapt
1401264790Sbaptyyoverflow:
1402264790Sbapt    YYERROR_CALL("yacc stack overflow");
1403264790Sbapt#if YYBTYACC
1404264790Sbapt    goto yyabort_nomem;
1405264790Sbaptyyenomem:
1406264790Sbapt    YYERROR_CALL("memory exhausted");
1407264790Sbaptyyabort_nomem:
1408264790Sbapt#endif /* YYBTYACC */
1409264790Sbapt    yyresult = 2;
1410264790Sbapt    goto yyreturn;
1411264790Sbapt
1412264790Sbaptyyabort:
1413264790Sbapt    yyresult = 1;
1414264790Sbapt    goto yyreturn;
1415264790Sbapt
1416264790Sbaptyyaccept:
1417264790Sbapt#if YYBTYACC
1418264790Sbapt    if (yyps->save) goto yyvalid;
1419264790Sbapt#endif /* YYBTYACC */
1420264790Sbapt    yyresult = 0;
1421264790Sbapt
1422264790Sbaptyyreturn:
1423264790Sbapt#if defined(YYDESTRUCT_CALL)
1424264790Sbapt    if (yychar != YYEOF && yychar != YYEMPTY)
1425264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1426264790Sbapt        YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc);
1427264790Sbapt#else
1428264790Sbapt        YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval);
1429264790Sbapt#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
1430264790Sbapt
1431264790Sbapt    {
1432264790Sbapt        YYSTYPE *pv;
1433264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1434264790Sbapt        YYLTYPE *pp;
1435264790Sbapt
1436264790Sbapt        for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp)
1437264790Sbapt             YYDESTRUCT_CALL("cleanup: discarding state",
1438264790Sbapt                             yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp);
1439264790Sbapt#else
1440264790Sbapt        for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv)
1441264790Sbapt             YYDESTRUCT_CALL("cleanup: discarding state",
1442264790Sbapt                             yystos[*(yystack.s_base + (pv - yystack.l_base))], pv);
1443264790Sbapt#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
1444264790Sbapt    }
1445264790Sbapt#endif /* defined(YYDESTRUCT_CALL) */
1446264790Sbapt
1447264790Sbapt#if YYBTYACC
1448264790Sbapt    if (yyerrctx)
1449264790Sbapt    {
1450264790Sbapt        yyFreeState(yyerrctx);
1451264790Sbapt        yyerrctx = NULL;
1452264790Sbapt    }
1453264790Sbapt    while (yyps)
1454264790Sbapt    {
1455264790Sbapt        YYParseState *save = yyps;
1456264790Sbapt        yyps = save->save;
1457264790Sbapt        save->save = NULL;
1458264790Sbapt        yyFreeState(save);
1459264790Sbapt    }
1460264790Sbapt    while (yypath)
1461264790Sbapt    {
1462264790Sbapt        YYParseState *save = yypath;
1463264790Sbapt        yypath = save->save;
1464264790Sbapt        save->save = NULL;
1465264790Sbapt        yyFreeState(save);
1466264790Sbapt    }
1467264790Sbapt#endif /* YYBTYACC */
1468264790Sbapt    yyfreestack(&yystack);
1469264790Sbapt    return (yyresult);
1470264790Sbapt}
1471