calc3.tab.c revision 1.1.1.6 1 /* $NetBSD: calc3.tab.c,v 1.1.1.6 2018/12/23 15:26:13 christos Exp $ */
2
3 /* original parser id follows */
4 /* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */
5 /* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
6
7 #define YYBYACC 1
8 #define YYMAJOR 1
9 #define YYMINOR 9
10 #define YYCHECK "yyyymmdd"
11
12 #define YYEMPTY (-1)
13 #define yyclearin (yychar = YYEMPTY)
14 #define yyerrok (yyerrflag = 0)
15 #define YYRECOVERING() (yyerrflag != 0)
16 #define YYENOMEM (-2)
17 #define YYEOF 0
18 #undef YYBTYACC
19 #define YYBTYACC 0
20 #define YYDEBUGSTR YYPREFIX "debug"
21
22 #ifndef yyparse
23 #define yyparse calc3_parse
24 #endif /* yyparse */
25
26 #ifndef yylex
27 #define yylex calc3_lex
28 #endif /* yylex */
29
30 #ifndef yyerror
31 #define yyerror calc3_error
32 #endif /* yyerror */
33
34 #ifndef yychar
35 #define yychar calc3_char
36 #endif /* yychar */
37
38 #ifndef yyval
39 #define yyval calc3_val
40 #endif /* yyval */
41
42 #ifndef yylval
43 #define yylval calc3_lval
44 #endif /* yylval */
45
46 #ifndef yydebug
47 #define yydebug calc3_debug
48 #endif /* yydebug */
49
50 #ifndef yynerrs
51 #define yynerrs calc3_nerrs
52 #endif /* yynerrs */
53
54 #ifndef yyerrflag
55 #define yyerrflag calc3_errflag
56 #endif /* yyerrflag */
57
58 #ifndef yylhs
59 #define yylhs calc3_lhs
60 #endif /* yylhs */
61
62 #ifndef yylen
63 #define yylen calc3_len
64 #endif /* yylen */
65
66 #ifndef yydefred
67 #define yydefred calc3_defred
68 #endif /* yydefred */
69
70 #ifndef yystos
71 #define yystos calc3_stos
72 #endif /* yystos */
73
74 #ifndef yydgoto
75 #define yydgoto calc3_dgoto
76 #endif /* yydgoto */
77
78 #ifndef yysindex
79 #define yysindex calc3_sindex
80 #endif /* yysindex */
81
82 #ifndef yyrindex
83 #define yyrindex calc3_rindex
84 #endif /* yyrindex */
85
86 #ifndef yygindex
87 #define yygindex calc3_gindex
88 #endif /* yygindex */
89
90 #ifndef yytable
91 #define yytable calc3_table
92 #endif /* yytable */
93
94 #ifndef yycheck
95 #define yycheck calc3_check
96 #endif /* yycheck */
97
98 #ifndef yyname
99 #define yyname calc3_name
100 #endif /* yyname */
101
102 #ifndef yyrule
103 #define yyrule calc3_rule
104 #endif /* yyrule */
105
106 #if YYBTYACC
107
108 #ifndef yycindex
109 #define yycindex calc3_cindex
110 #endif /* yycindex */
111
112 #ifndef yyctable
113 #define yyctable calc3_ctable
114 #endif /* yyctable */
115
116 #endif /* YYBTYACC */
117
118 #define YYPREFIX "calc3_"
119
120 #define YYPURE 1
121
122 #line 9 "calc3.y"
123 # include <stdio.h>
124 # include <ctype.h>
125
126 #ifdef YYBISON
127 #define YYSTYPE int
128 #define YYLEX_PARAM base
129 #define YYLEX_DECL() yylex(YYSTYPE *yylval, int *YYLEX_PARAM)
130 #define YYERROR_DECL() yyerror(int regs[26], int *base, const char *s)
131 int YYLEX_DECL();
132 static void YYERROR_DECL();
133 #endif
134
135 #line 134 "calc3.tab.c"
136
137 #if ! defined(YYSTYPE) && ! defined(YYSTYPE_IS_DECLARED)
138 /* Default: YYSTYPE is the semantic value type. */
139 typedef int YYSTYPE;
140 # define YYSTYPE_IS_DECLARED 1
141 #endif
142
143 /* compatibility with bison */
144 #ifdef YYPARSE_PARAM
145 /* compatibility with FreeBSD */
146 # ifdef YYPARSE_PARAM_TYPE
147 # define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
148 # else
149 # define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
150 # endif
151 #else
152 # define YYPARSE_DECL() yyparse(int regs[26], int *base)
153 #endif
154
155 /* Parameters sent to lex. */
156 #ifdef YYLEX_PARAM
157 # ifdef YYLEX_PARAM_TYPE
158 # define YYLEX_DECL() yylex(YYSTYPE *yylval, YYLEX_PARAM_TYPE YYLEX_PARAM)
159 # else
160 # define YYLEX_DECL() yylex(YYSTYPE *yylval, void * YYLEX_PARAM)
161 # endif
162 # define YYLEX yylex(&yylval, YYLEX_PARAM)
163 #else
164 # define YYLEX_DECL() yylex(YYSTYPE *yylval, int *base)
165 # define YYLEX yylex(&yylval, base)
166 #endif
167
168 /* Parameters sent to yyerror. */
169 #ifndef YYERROR_DECL
170 #define YYERROR_DECL() yyerror(int regs[26], int *base, const char *s)
171 #endif
172 #ifndef YYERROR_CALL
173 #define YYERROR_CALL(msg) yyerror(regs, base, msg)
174 #endif
175
176 extern int YYPARSE_DECL();
177
178 #define DIGIT 257
179 #define LETTER 258
180 #define UMINUS 259
181 #define YYERRCODE 256
182 typedef short YYINT;
183 static const YYINT calc3_lhs[] = { -1,
184 0, 0, 0, 1, 1, 2, 2, 2, 2, 2,
185 2, 2, 2, 2, 2, 2, 3, 3,
186 };
187 static const YYINT calc3_len[] = { 2,
188 0, 3, 3, 1, 3, 3, 3, 3, 3, 3,
189 3, 3, 3, 2, 1, 1, 1, 2,
190 };
191 static const YYINT calc3_defred[] = { 1,
192 0, 0, 17, 0, 0, 0, 0, 0, 0, 3,
193 0, 15, 14, 0, 2, 0, 0, 0, 0, 0,
194 0, 0, 18, 0, 6, 0, 0, 0, 0, 9,
195 10, 11,
196 };
197 #if defined(YYDESTRUCT_CALL) || defined(YYSTYPE_TOSTRING)
198 static const YYINT calc3_stos[] = { 0,
199 261, 256, 257, 258, 45, 40, 262, 263, 264, 10,
200 61, 258, 263, 263, 10, 124, 38, 43, 45, 42,
201 47, 37, 257, 263, 41, 263, 263, 263, 263, 263,
202 263, 263,
203 };
204 #endif /* YYDESTRUCT_CALL || YYSTYPE_TOSTRING */
205 static const YYINT calc3_dgoto[] = { 1,
206 7, 8, 9,
207 };
208 static const YYINT calc3_sindex[] = { 0,
209 -40, -7, 0, -55, -38, -38, 1, -29, -247, 0,
210 -38, 0, 0, 22, 0, -38, -38, -38, -38, -38,
211 -38, -38, 0, -29, 0, 51, 60, -20, -20, 0,
212 0, 0,
213 };
214 static const YYINT calc3_rindex[] = { 0,
215 0, 0, 0, 2, 0, 0, 0, 9, -9, 0,
216 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
217 0, 0, 0, 10, 0, -6, 14, 5, 13, 0,
218 0, 0,
219 };
220 #if YYBTYACC
221 static const YYINT calc3_cindex[] = { 0,
222 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
223 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
224 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
225 0, 0,
226 };
227 #endif
228 static const YYINT calc3_gindex[] = { 0,
229 0, 65, 0,
230 };
231 #define YYTABLESIZE 220
232 static const YYINT calc3_table[] = { 6,
233 16, 6, 10, 13, 5, 11, 5, 22, 17, 23,
234 15, 15, 20, 18, 7, 19, 22, 21, 4, 5,
235 0, 20, 8, 12, 0, 0, 21, 16, 16, 0,
236 0, 16, 16, 16, 13, 16, 0, 16, 15, 15,
237 0, 0, 7, 15, 15, 7, 15, 7, 15, 7,
238 8, 12, 0, 8, 12, 8, 0, 8, 22, 17,
239 0, 0, 25, 20, 18, 0, 19, 0, 21, 13,
240 14, 0, 0, 0, 0, 24, 0, 0, 0, 0,
241 26, 27, 28, 29, 30, 31, 32, 22, 17, 0,
242 0, 0, 20, 18, 16, 19, 22, 21, 0, 0,
243 0, 20, 18, 0, 19, 0, 21, 0, 0, 0,
244 0, 0, 0, 0, 16, 0, 0, 13, 0, 0,
245 0, 0, 0, 0, 0, 15, 0, 0, 7, 0,
246 0, 0, 0, 0, 0, 0, 8, 12, 0, 0,
247 0, 0, 0, 0, 0, 16, 0, 0, 0, 0,
248 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
249 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
250 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
251 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
252 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
253 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
254 0, 0, 0, 0, 0, 2, 3, 4, 3, 12,
255 };
256 static const YYINT calc3_check[] = { 40,
257 10, 40, 10, 10, 45, 61, 45, 37, 38, 257,
258 10, 10, 42, 43, 10, 45, 37, 47, 10, 10,
259 -1, 42, 10, 10, -1, -1, 47, 37, 38, -1,
260 -1, 41, 42, 43, 41, 45, -1, 47, 37, 38,
261 -1, -1, 38, 42, 43, 41, 45, 43, 47, 45,
262 38, 38, -1, 41, 41, 43, -1, 45, 37, 38,
263 -1, -1, 41, 42, 43, -1, 45, -1, 47, 5,
264 6, -1, -1, -1, -1, 11, -1, -1, -1, -1,
265 16, 17, 18, 19, 20, 21, 22, 37, 38, -1,
266 -1, -1, 42, 43, 124, 45, 37, 47, -1, -1,
267 -1, 42, 43, -1, 45, -1, 47, -1, -1, -1,
268 -1, -1, -1, -1, 124, -1, -1, 124, -1, -1,
269 -1, -1, -1, -1, -1, 124, -1, -1, 124, -1,
270 -1, -1, -1, -1, -1, -1, 124, 124, -1, -1,
271 -1, -1, -1, -1, -1, 124, -1, -1, -1, -1,
272 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
273 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
274 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
275 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
276 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
277 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
278 -1, -1, -1, -1, -1, 256, 257, 258, 257, 258,
279 };
280 #if YYBTYACC
281 static const YYINT calc3_ctable[] = { -1,
282 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
283 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
284 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
285 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
286 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
287 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
288 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
289 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
290 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
291 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
292 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
293 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
294 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
295 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
296 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
297 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
298 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
299 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
300 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
301 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
302 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
303 -1, -1, -1, -1, -1, -1, -1, -1, -1,
304 };
305 #endif
306 #define YYFINAL 1
307 #ifndef YYDEBUG
308 #define YYDEBUG 0
309 #endif
310 #define YYMAXTOKEN 259
311 #define YYUNDFTOKEN 265
312 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))
313 #if YYDEBUG
314 static const char *const calc3_name[] = {
315
316 "$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,
317 0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,0,0,0,
318 0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
319 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0,0,0,0,
320 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
321 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
322 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
323 0,0,"error","DIGIT","LETTER","UMINUS","$accept","list","stat","expr","number",
324 "illegal-symbol",
325 };
326 static const char *const calc3_rule[] = {
327 "$accept : list",
328 "list :",
329 "list : list stat '\\n'",
330 "list : list error '\\n'",
331 "stat : expr",
332 "stat : LETTER '=' expr",
333 "expr : '(' expr ')'",
334 "expr : expr '+' expr",
335 "expr : expr '-' expr",
336 "expr : expr '*' expr",
337 "expr : expr '/' expr",
338 "expr : expr '%' expr",
339 "expr : expr '&' expr",
340 "expr : expr '|' expr",
341 "expr : '-' expr",
342 "expr : LETTER",
343 "expr : number",
344 "number : DIGIT",
345 "number : number DIGIT",
346
347 };
348 #endif
349
350 #if YYDEBUG
351 int yydebug;
352 #endif
353
354 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
355 #ifndef YYLLOC_DEFAULT
356 #define YYLLOC_DEFAULT(loc, rhs, n) \
357 do \
358 { \
359 if (n == 0) \
360 { \
361 (loc).first_line = YYRHSLOC(rhs, 0).last_line; \
362 (loc).first_column = YYRHSLOC(rhs, 0).last_column; \
363 (loc).last_line = YYRHSLOC(rhs, 0).last_line; \
364 (loc).last_column = YYRHSLOC(rhs, 0).last_column; \
365 } \
366 else \
367 { \
368 (loc).first_line = YYRHSLOC(rhs, 1).first_line; \
369 (loc).first_column = YYRHSLOC(rhs, 1).first_column; \
370 (loc).last_line = YYRHSLOC(rhs, n).last_line; \
371 (loc).last_column = YYRHSLOC(rhs, n).last_column; \
372 } \
373 } while (0)
374 #endif /* YYLLOC_DEFAULT */
375 #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
376 #if YYBTYACC
377
378 #ifndef YYLVQUEUEGROWTH
379 #define YYLVQUEUEGROWTH 32
380 #endif
381 #endif /* YYBTYACC */
382
383 /* define the initial stack-sizes */
384 #ifdef YYSTACKSIZE
385 #undef YYMAXDEPTH
386 #define YYMAXDEPTH YYSTACKSIZE
387 #else
388 #ifdef YYMAXDEPTH
389 #define YYSTACKSIZE YYMAXDEPTH
390 #else
391 #define YYSTACKSIZE 10000
392 #define YYMAXDEPTH 10000
393 #endif
394 #endif
395
396 #ifndef YYINITSTACKSIZE
397 #define YYINITSTACKSIZE 200
398 #endif
399
400 typedef struct {
401 unsigned stacksize;
402 YYINT *s_base;
403 YYINT *s_mark;
404 YYINT *s_last;
405 YYSTYPE *l_base;
406 YYSTYPE *l_mark;
407 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
408 YYLTYPE *p_base;
409 YYLTYPE *p_mark;
410 #endif
411 } YYSTACKDATA;
412 #if YYBTYACC
413
414 struct YYParseState_s
415 {
416 struct YYParseState_s *save; /* Previously saved parser state */
417 YYSTACKDATA yystack; /* saved parser stack */
418 int state; /* saved parser state */
419 int errflag; /* saved error recovery status */
420 int lexeme; /* saved index of the conflict lexeme in the lexical queue */
421 YYINT ctry; /* saved index in yyctable[] for this conflict */
422 };
423 typedef struct YYParseState_s YYParseState;
424 #endif /* YYBTYACC */
425 #line 76 "calc3.y"
426 /* start of programs */
427
428 #ifdef YYBYACC
429 extern int YYLEX_DECL();
430 #endif
431
432 int
433 main (void)
434 {
435 int regs[26];
436 int base = 10;
437
438 while(!feof(stdin)) {
439 yyparse(regs, &base);
440 }
441 return 0;
442 }
443
444 #define UNUSED(x) ((void)(x))
445
446 static void
447 YYERROR_DECL()
448 {
449 UNUSED(regs); /* %parse-param regs is not actually used here */
450 UNUSED(base); /* %parse-param base is not actually used here */
451 fprintf(stderr, "%s\n", s);
452 }
453
454 int
455 YYLEX_DECL()
456 {
457 /* lexical analysis routine */
458 /* returns LETTER for a lower case letter, yylval = 0 through 25 */
459 /* return DIGIT for a digit, yylval = 0 through 9 */
460 /* all other characters are returned immediately */
461
462 int c;
463
464 while( (c=getchar()) == ' ' ) { /* skip blanks */ }
465
466 /* c is now nonblank */
467
468 if( islower( c )) {
469 *yylval = (c - 'a');
470 return ( LETTER );
471 }
472 if( isdigit( c )) {
473 *yylval = (c - '0') % (*base);
474 return ( DIGIT );
475 }
476 return( c );
477 }
478 #line 477 "calc3.tab.c"
479
480 /* For use in generated program */
481 #define yydepth (int)(yystack.s_mark - yystack.s_base)
482 #if YYBTYACC
483 #define yytrial (yyps->save)
484 #endif /* YYBTYACC */
485
486 #if YYDEBUG
487 #include <stdio.h> /* needed for printf */
488 #endif
489
490 #include <stdlib.h> /* needed for malloc, etc */
491 #include <string.h> /* needed for memset */
492
493 /* allocate initial stack or double stack size, up to YYMAXDEPTH */
494 static int yygrowstack(YYSTACKDATA *data)
495 {
496 int i;
497 unsigned newsize;
498 YYINT *newss;
499 YYSTYPE *newvs;
500 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
501 YYLTYPE *newps;
502 #endif
503
504 if ((newsize = data->stacksize) == 0)
505 newsize = YYINITSTACKSIZE;
506 else if (newsize >= YYMAXDEPTH)
507 return YYENOMEM;
508 else if ((newsize *= 2) > YYMAXDEPTH)
509 newsize = YYMAXDEPTH;
510
511 i = (int) (data->s_mark - data->s_base);
512 newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
513 if (newss == 0)
514 return YYENOMEM;
515
516 data->s_base = newss;
517 data->s_mark = newss + i;
518
519 newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
520 if (newvs == 0)
521 return YYENOMEM;
522
523 data->l_base = newvs;
524 data->l_mark = newvs + i;
525
526 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
527 newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps));
528 if (newps == 0)
529 return YYENOMEM;
530
531 data->p_base = newps;
532 data->p_mark = newps + i;
533 #endif
534
535 data->stacksize = newsize;
536 data->s_last = data->s_base + newsize - 1;
537
538 #if YYDEBUG
539 if (yydebug)
540 fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize);
541 #endif
542 return 0;
543 }
544
545 #if YYPURE || defined(YY_NO_LEAKS)
546 static void yyfreestack(YYSTACKDATA *data)
547 {
548 free(data->s_base);
549 free(data->l_base);
550 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
551 free(data->p_base);
552 #endif
553 memset(data, 0, sizeof(*data));
554 }
555 #else
556 #define yyfreestack(data) /* nothing */
557 #endif /* YYPURE || defined(YY_NO_LEAKS) */
558 #if YYBTYACC
559
560 static YYParseState *
561 yyNewState(unsigned size)
562 {
563 YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState));
564 if (p == NULL) return NULL;
565
566 p->yystack.stacksize = size;
567 if (size == 0)
568 {
569 p->yystack.s_base = NULL;
570 p->yystack.l_base = NULL;
571 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
572 p->yystack.p_base = NULL;
573 #endif
574 return p;
575 }
576 p->yystack.s_base = (YYINT *) malloc(size * sizeof(YYINT));
577 if (p->yystack.s_base == NULL) return NULL;
578 p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE));
579 if (p->yystack.l_base == NULL) return NULL;
580 memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE));
581 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
582 p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE));
583 if (p->yystack.p_base == NULL) return NULL;
584 memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE));
585 #endif
586
587 return p;
588 }
589
590 static void
591 yyFreeState(YYParseState *p)
592 {
593 yyfreestack(&p->yystack);
594 free(p);
595 }
596 #endif /* YYBTYACC */
597
598 #define YYABORT goto yyabort
599 #define YYREJECT goto yyabort
600 #define YYACCEPT goto yyaccept
601 #define YYERROR goto yyerrlab
602 #if YYBTYACC
603 #define YYVALID do { if (yyps->save) goto yyvalid; } while(0)
604 #define YYVALID_NESTED do { if (yyps->save && \
605 yyps->save->save == 0) goto yyvalid; } while(0)
606 #endif /* YYBTYACC */
607
608 int
609 YYPARSE_DECL()
610 {
611 int yyerrflag;
612 int yychar;
613 YYSTYPE yyval;
614 YYSTYPE yylval;
615 int yynerrs;
616
617 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
618 YYLTYPE yyloc; /* position returned by actions */
619 YYLTYPE yylloc; /* position from the lexer */
620 #endif
621
622 /* variables for the parser stack */
623 YYSTACKDATA yystack;
624 #if YYBTYACC
625
626 /* Current parser state */
627 static YYParseState *yyps = 0;
628
629 /* yypath != NULL: do the full parse, starting at *yypath parser state. */
630 static YYParseState *yypath = 0;
631
632 /* Base of the lexical value queue */
633 static YYSTYPE *yylvals = 0;
634
635 /* Current position at lexical value queue */
636 static YYSTYPE *yylvp = 0;
637
638 /* End position of lexical value queue */
639 static YYSTYPE *yylve = 0;
640
641 /* The last allocated position at the lexical value queue */
642 static YYSTYPE *yylvlim = 0;
643
644 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
645 /* Base of the lexical position queue */
646 static YYLTYPE *yylpsns = 0;
647
648 /* Current position at lexical position queue */
649 static YYLTYPE *yylpp = 0;
650
651 /* End position of lexical position queue */
652 static YYLTYPE *yylpe = 0;
653
654 /* The last allocated position at the lexical position queue */
655 static YYLTYPE *yylplim = 0;
656 #endif
657
658 /* Current position at lexical token queue */
659 static YYINT *yylexp = 0;
660
661 static YYINT *yylexemes = 0;
662 #endif /* YYBTYACC */
663 int yym, yyn, yystate, yyresult;
664 #if YYBTYACC
665 int yynewerrflag;
666 YYParseState *yyerrctx = NULL;
667 #endif /* YYBTYACC */
668 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
669 YYLTYPE yyerror_loc_range[3]; /* position of error start/end (0 unused) */
670 #endif
671 #if YYDEBUG
672 const char *yys;
673
674 if ((yys = getenv("YYDEBUG")) != 0)
675 {
676 yyn = *yys;
677 if (yyn >= '0' && yyn <= '9')
678 yydebug = yyn - '0';
679 }
680 if (yydebug)
681 fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX);
682 #endif
683 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
684 memset(yyerror_loc_range, 0, sizeof(yyerror_loc_range));
685 #endif
686
687 yyerrflag = 0;
688 yychar = 0;
689 memset(&yyval, 0, sizeof(yyval));
690 memset(&yylval, 0, sizeof(yylval));
691 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
692 memset(&yyloc, 0, sizeof(yyloc));
693 memset(&yylloc, 0, sizeof(yylloc));
694 #endif
695
696 #if YYBTYACC
697 yyps = yyNewState(0); if (yyps == 0) goto yyenomem;
698 yyps->save = 0;
699 #endif /* YYBTYACC */
700 yym = 0;
701 yyn = 0;
702 yynerrs = 0;
703 yyerrflag = 0;
704 yychar = YYEMPTY;
705 yystate = 0;
706
707 #if YYPURE
708 memset(&yystack, 0, sizeof(yystack));
709 #endif
710
711 if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
712 yystack.s_mark = yystack.s_base;
713 yystack.l_mark = yystack.l_base;
714 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
715 yystack.p_mark = yystack.p_base;
716 #endif
717 yystate = 0;
718 *yystack.s_mark = 0;
719
720 yyloop:
721 if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
722 if (yychar < 0)
723 {
724 #if YYBTYACC
725 do {
726 if (yylvp < yylve)
727 {
728 /* we're currently re-reading tokens */
729 yylval = *yylvp++;
730 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
731 yylloc = *yylpp++;
732 #endif
733 yychar = *yylexp++;
734 break;
735 }
736 if (yyps->save)
737 {
738 /* in trial mode; save scanner results for future parse attempts */
739 if (yylvp == yylvlim)
740 { /* Enlarge lexical value queue */
741 size_t p = (size_t) (yylvp - yylvals);
742 size_t s = (size_t) (yylvlim - yylvals);
743
744 s += YYLVQUEUEGROWTH;
745 if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem;
746 if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem;
747 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
748 if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem;
749 #endif
750 yylvp = yylve = yylvals + p;
751 yylvlim = yylvals + s;
752 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
753 yylpp = yylpe = yylpsns + p;
754 yylplim = yylpsns + s;
755 #endif
756 yylexp = yylexemes + p;
757 }
758 *yylexp = (YYINT) YYLEX;
759 *yylvp++ = yylval;
760 yylve++;
761 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
762 *yylpp++ = yylloc;
763 yylpe++;
764 #endif
765 yychar = *yylexp++;
766 break;
767 }
768 /* normal operation, no conflict encountered */
769 #endif /* YYBTYACC */
770 yychar = YYLEX;
771 #if YYBTYACC
772 } while (0);
773 #endif /* YYBTYACC */
774 if (yychar < 0) yychar = YYEOF;
775 #if YYDEBUG
776 if (yydebug)
777 {
778 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
779 fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)",
780 YYDEBUGSTR, yydepth, yystate, yychar, yys);
781 #ifdef YYSTYPE_TOSTRING
782 #if YYBTYACC
783 if (!yytrial)
784 #endif /* YYBTYACC */
785 fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval));
786 #endif
787 fputc('\n', stderr);
788 }
789 #endif
790 }
791 #if YYBTYACC
792
793 /* Do we have a conflict? */
794 if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
795 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
796 {
797 YYINT ctry;
798
799 if (yypath)
800 {
801 YYParseState *save;
802 #if YYDEBUG
803 if (yydebug)
804 fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n",
805 YYDEBUGSTR, yydepth, yystate);
806 #endif
807 /* Switch to the next conflict context */
808 save = yypath;
809 yypath = save->save;
810 save->save = NULL;
811 ctry = save->ctry;
812 if (save->state != yystate) YYABORT;
813 yyFreeState(save);
814
815 }
816 else
817 {
818
819 /* Unresolved conflict - start/continue trial parse */
820 YYParseState *save;
821 #if YYDEBUG
822 if (yydebug)
823 {
824 fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate);
825 if (yyps->save)
826 fputs("ALREADY in conflict, continuing trial parse.\n", stderr);
827 else
828 fputs("Starting trial parse.\n", stderr);
829 }
830 #endif
831 save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1));
832 if (save == NULL) goto yyenomem;
833 save->save = yyps->save;
834 save->state = yystate;
835 save->errflag = yyerrflag;
836 save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base);
837 memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));
838 save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base);
839 memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
840 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
841 save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base);
842 memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
843 #endif
844 ctry = yytable[yyn];
845 if (yyctable[ctry] == -1)
846 {
847 #if YYDEBUG
848 if (yydebug && yychar >= YYEOF)
849 fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth);
850 #endif
851 ctry++;
852 }
853 save->ctry = ctry;
854 if (yyps->save == NULL)
855 {
856 /* If this is a first conflict in the stack, start saving lexemes */
857 if (!yylexemes)
858 {
859 yylexemes = (YYINT *) malloc((YYLVQUEUEGROWTH) * sizeof(YYINT));
860 if (yylexemes == NULL) goto yyenomem;
861 yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE));
862 if (yylvals == NULL) goto yyenomem;
863 yylvlim = yylvals + YYLVQUEUEGROWTH;
864 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
865 yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE));
866 if (yylpsns == NULL) goto yyenomem;
867 yylplim = yylpsns + YYLVQUEUEGROWTH;
868 #endif
869 }
870 if (yylvp == yylve)
871 {
872 yylvp = yylve = yylvals;
873 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
874 yylpp = yylpe = yylpsns;
875 #endif
876 yylexp = yylexemes;
877 if (yychar >= YYEOF)
878 {
879 *yylve++ = yylval;
880 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
881 *yylpe++ = yylloc;
882 #endif
883 *yylexp = (YYINT) yychar;
884 yychar = YYEMPTY;
885 }
886 }
887 }
888 if (yychar >= YYEOF)
889 {
890 yylvp--;
891 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
892 yylpp--;
893 #endif
894 yylexp--;
895 yychar = YYEMPTY;
896 }
897 save->lexeme = (int) (yylvp - yylvals);
898 yyps->save = save;
899 }
900 if (yytable[yyn] == ctry)
901 {
902 #if YYDEBUG
903 if (yydebug)
904 fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n",
905 YYDEBUGSTR, yydepth, yystate, yyctable[ctry]);
906 #endif
907 if (yychar < 0)
908 {
909 yylvp++;
910 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
911 yylpp++;
912 #endif
913 yylexp++;
914 }
915 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
916 goto yyoverflow;
917 yystate = yyctable[ctry];
918 *++yystack.s_mark = (YYINT) yystate;
919 *++yystack.l_mark = yylval;
920 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
921 *++yystack.p_mark = yylloc;
922 #endif
923 yychar = YYEMPTY;
924 if (yyerrflag > 0) --yyerrflag;
925 goto yyloop;
926 }
927 else
928 {
929 yyn = yyctable[ctry];
930 goto yyreduce;
931 }
932 } /* End of code dealing with conflicts */
933 #endif /* YYBTYACC */
934 if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
935 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
936 {
937 #if YYDEBUG
938 if (yydebug)
939 fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n",
940 YYDEBUGSTR, yydepth, yystate, yytable[yyn]);
941 #endif
942 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
943 yystate = yytable[yyn];
944 *++yystack.s_mark = yytable[yyn];
945 *++yystack.l_mark = yylval;
946 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
947 *++yystack.p_mark = yylloc;
948 #endif
949 yychar = YYEMPTY;
950 if (yyerrflag > 0) --yyerrflag;
951 goto yyloop;
952 }
953 if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
954 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
955 {
956 yyn = yytable[yyn];
957 goto yyreduce;
958 }
959 if (yyerrflag != 0) goto yyinrecovery;
960 #if YYBTYACC
961
962 yynewerrflag = 1;
963 goto yyerrhandler;
964 goto yyerrlab; /* redundant goto avoids 'unused label' warning */
965
966 yyerrlab:
967 /* explicit YYERROR from an action -- pop the rhs of the rule reduced
968 * before looking for error recovery */
969 yystack.s_mark -= yym;
970 yystate = *yystack.s_mark;
971 yystack.l_mark -= yym;
972 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
973 yystack.p_mark -= yym;
974 #endif
975
976 yynewerrflag = 0;
977 yyerrhandler:
978 while (yyps->save)
979 {
980 int ctry;
981 YYParseState *save = yyps->save;
982 #if YYDEBUG
983 if (yydebug)
984 fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n",
985 YYDEBUGSTR, yydepth, yystate, yyps->save->state,
986 (int)(yylvp - yylvals - yyps->save->lexeme));
987 #endif
988 /* Memorize most forward-looking error state in case it's really an error. */
989 if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals)
990 {
991 /* Free old saved error context state */
992 if (yyerrctx) yyFreeState(yyerrctx);
993 /* Create and fill out new saved error context state */
994 yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1));
995 if (yyerrctx == NULL) goto yyenomem;
996 yyerrctx->save = yyps->save;
997 yyerrctx->state = yystate;
998 yyerrctx->errflag = yyerrflag;
999 yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base);
1000 memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));
1001 yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base);
1002 memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
1003 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1004 yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base);
1005 memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
1006 #endif
1007 yyerrctx->lexeme = (int) (yylvp - yylvals);
1008 }
1009 yylvp = yylvals + save->lexeme;
1010 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1011 yylpp = yylpsns + save->lexeme;
1012 #endif
1013 yylexp = yylexemes + save->lexeme;
1014 yychar = YYEMPTY;
1015 yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base);
1016 memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));
1017 yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base);
1018 memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
1019 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1020 yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base);
1021 memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
1022 #endif
1023 ctry = ++save->ctry;
1024 yystate = save->state;
1025 /* We tried shift, try reduce now */
1026 if ((yyn = yyctable[ctry]) >= 0) goto yyreduce;
1027 yyps->save = save->save;
1028 save->save = NULL;
1029 yyFreeState(save);
1030
1031 /* Nothing left on the stack -- error */
1032 if (!yyps->save)
1033 {
1034 #if YYDEBUG
1035 if (yydebug)
1036 fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n",
1037 YYPREFIX, yydepth);
1038 #endif
1039 /* Restore state as it was in the most forward-advanced error */
1040 yylvp = yylvals + yyerrctx->lexeme;
1041 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1042 yylpp = yylpsns + yyerrctx->lexeme;
1043 #endif
1044 yylexp = yylexemes + yyerrctx->lexeme;
1045 yychar = yylexp[-1];
1046 yylval = yylvp[-1];
1047 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1048 yylloc = yylpp[-1];
1049 #endif
1050 yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base);
1051 memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));
1052 yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base);
1053 memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
1054 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1055 yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base);
1056 memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
1057 #endif
1058 yystate = yyerrctx->state;
1059 yyFreeState(yyerrctx);
1060 yyerrctx = NULL;
1061 }
1062 yynewerrflag = 1;
1063 }
1064 if (yynewerrflag == 0) goto yyinrecovery;
1065 #endif /* YYBTYACC */
1066
1067 YYERROR_CALL("syntax error");
1068 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1069 yyerror_loc_range[1] = yylloc; /* lookahead position is error start position */
1070 #endif
1071
1072 #if !YYBTYACC
1073 goto yyerrlab; /* redundant goto avoids 'unused label' warning */
1074 yyerrlab:
1075 #endif
1076 ++yynerrs;
1077
1078 yyinrecovery:
1079 if (yyerrflag < 3)
1080 {
1081 yyerrflag = 3;
1082 for (;;)
1083 {
1084 if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 &&
1085 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE)
1086 {
1087 #if YYDEBUG
1088 if (yydebug)
1089 fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n",
1090 YYDEBUGSTR, yydepth, *yystack.s_mark, yytable[yyn]);
1091 #endif
1092 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
1093 yystate = yytable[yyn];
1094 *++yystack.s_mark = yytable[yyn];
1095 *++yystack.l_mark = yylval;
1096 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1097 /* lookahead position is error end position */
1098 yyerror_loc_range[2] = yylloc;
1099 YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */
1100 *++yystack.p_mark = yyloc;
1101 #endif
1102 goto yyloop;
1103 }
1104 else
1105 {
1106 #if YYDEBUG
1107 if (yydebug)
1108 fprintf(stderr, "%s[%d]: error recovery discarding state %d\n",
1109 YYDEBUGSTR, yydepth, *yystack.s_mark);
1110 #endif
1111 if (yystack.s_mark <= yystack.s_base) goto yyabort;
1112 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1113 /* the current TOS position is the error start position */
1114 yyerror_loc_range[1] = *yystack.p_mark;
1115 #endif
1116 #if defined(YYDESTRUCT_CALL)
1117 #if YYBTYACC
1118 if (!yytrial)
1119 #endif /* YYBTYACC */
1120 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1121 YYDESTRUCT_CALL("error: discarding state",
1122 yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark);
1123 #else
1124 YYDESTRUCT_CALL("error: discarding state",
1125 yystos[*yystack.s_mark], yystack.l_mark);
1126 #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
1127 #endif /* defined(YYDESTRUCT_CALL) */
1128 --yystack.s_mark;
1129 --yystack.l_mark;
1130 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1131 --yystack.p_mark;
1132 #endif
1133 }
1134 }
1135 }
1136 else
1137 {
1138 if (yychar == YYEOF) goto yyabort;
1139 #if YYDEBUG
1140 if (yydebug)
1141 {
1142 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
1143 fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n",
1144 YYDEBUGSTR, yydepth, yystate, yychar, yys);
1145 }
1146 #endif
1147 #if defined(YYDESTRUCT_CALL)
1148 #if YYBTYACC
1149 if (!yytrial)
1150 #endif /* YYBTYACC */
1151 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1152 YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc);
1153 #else
1154 YYDESTRUCT_CALL("error: discarding token", yychar, &yylval);
1155 #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
1156 #endif /* defined(YYDESTRUCT_CALL) */
1157 yychar = YYEMPTY;
1158 goto yyloop;
1159 }
1160
1161 yyreduce:
1162 yym = yylen[yyn];
1163 #if YYDEBUG
1164 if (yydebug)
1165 {
1166 fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)",
1167 YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]);
1168 #ifdef YYSTYPE_TOSTRING
1169 #if YYBTYACC
1170 if (!yytrial)
1171 #endif /* YYBTYACC */
1172 if (yym > 0)
1173 {
1174 int i;
1175 fputc('<', stderr);
1176 for (i = yym; i > 0; i--)
1177 {
1178 if (i != yym) fputs(", ", stderr);
1179 fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]],
1180 yystack.l_mark[1-i]), stderr);
1181 }
1182 fputc('>', stderr);
1183 }
1184 #endif
1185 fputc('\n', stderr);
1186 }
1187 #endif
1188 if (yym > 0)
1189 yyval = yystack.l_mark[1-yym];
1190 else
1191 memset(&yyval, 0, sizeof yyval);
1192 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1193
1194 /* Perform position reduction */
1195 memset(&yyloc, 0, sizeof(yyloc));
1196 #if YYBTYACC
1197 if (!yytrial)
1198 #endif /* YYBTYACC */
1199 {
1200 YYLLOC_DEFAULT(yyloc, &yystack.p_mark[-yym], yym);
1201 /* just in case YYERROR is invoked within the action, save
1202 the start of the rhs as the error start position */
1203 yyerror_loc_range[1] = yystack.p_mark[1-yym];
1204 }
1205 #endif
1206
1207 switch (yyn)
1208 {
1209 case 3:
1210 #line 38 "calc3.y"
1211 { yyerrok ; }
1212 break;
1213 case 4:
1214 #line 42 "calc3.y"
1215 { printf("%d\n",yystack.l_mark[0]);}
1216 break;
1217 case 5:
1218 #line 44 "calc3.y"
1219 { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; }
1220 break;
1221 case 6:
1222 #line 48 "calc3.y"
1223 { yyval = yystack.l_mark[-1]; }
1224 break;
1225 case 7:
1226 #line 50 "calc3.y"
1227 { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; }
1228 break;
1229 case 8:
1230 #line 52 "calc3.y"
1231 { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; }
1232 break;
1233 case 9:
1234 #line 54 "calc3.y"
1235 { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; }
1236 break;
1237 case 10:
1238 #line 56 "calc3.y"
1239 { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; }
1240 break;
1241 case 11:
1242 #line 58 "calc3.y"
1243 { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; }
1244 break;
1245 case 12:
1246 #line 60 "calc3.y"
1247 { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; }
1248 break;
1249 case 13:
1250 #line 62 "calc3.y"
1251 { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; }
1252 break;
1253 case 14:
1254 #line 64 "calc3.y"
1255 { yyval = - yystack.l_mark[0]; }
1256 break;
1257 case 15:
1258 #line 66 "calc3.y"
1259 { yyval = regs[yystack.l_mark[0]]; }
1260 break;
1261 case 17:
1262 #line 71 "calc3.y"
1263 { yyval = yystack.l_mark[0]; (*base) = (yystack.l_mark[0]==0) ? 8 : 10; }
1264 break;
1265 case 18:
1266 #line 73 "calc3.y"
1267 { yyval = (*base) * yystack.l_mark[-1] + yystack.l_mark[0]; }
1268 break;
1269 #line 1268 "calc3.tab.c"
1270 default:
1271 break;
1272 }
1273 yystack.s_mark -= yym;
1274 yystate = *yystack.s_mark;
1275 yystack.l_mark -= yym;
1276 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1277 yystack.p_mark -= yym;
1278 #endif
1279 yym = yylhs[yyn];
1280 if (yystate == 0 && yym == 0)
1281 {
1282 #if YYDEBUG
1283 if (yydebug)
1284 {
1285 fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth);
1286 #ifdef YYSTYPE_TOSTRING
1287 #if YYBTYACC
1288 if (!yytrial)
1289 #endif /* YYBTYACC */
1290 fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval));
1291 #endif
1292 fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL);
1293 }
1294 #endif
1295 yystate = YYFINAL;
1296 *++yystack.s_mark = YYFINAL;
1297 *++yystack.l_mark = yyval;
1298 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1299 *++yystack.p_mark = yyloc;
1300 #endif
1301 if (yychar < 0)
1302 {
1303 #if YYBTYACC
1304 do {
1305 if (yylvp < yylve)
1306 {
1307 /* we're currently re-reading tokens */
1308 yylval = *yylvp++;
1309 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1310 yylloc = *yylpp++;
1311 #endif
1312 yychar = *yylexp++;
1313 break;
1314 }
1315 if (yyps->save)
1316 {
1317 /* in trial mode; save scanner results for future parse attempts */
1318 if (yylvp == yylvlim)
1319 { /* Enlarge lexical value queue */
1320 size_t p = (size_t) (yylvp - yylvals);
1321 size_t s = (size_t) (yylvlim - yylvals);
1322
1323 s += YYLVQUEUEGROWTH;
1324 if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL)
1325 goto yyenomem;
1326 if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL)
1327 goto yyenomem;
1328 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1329 if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL)
1330 goto yyenomem;
1331 #endif
1332 yylvp = yylve = yylvals + p;
1333 yylvlim = yylvals + s;
1334 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1335 yylpp = yylpe = yylpsns + p;
1336 yylplim = yylpsns + s;
1337 #endif
1338 yylexp = yylexemes + p;
1339 }
1340 *yylexp = (YYINT) YYLEX;
1341 *yylvp++ = yylval;
1342 yylve++;
1343 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1344 *yylpp++ = yylloc;
1345 yylpe++;
1346 #endif
1347 yychar = *yylexp++;
1348 break;
1349 }
1350 /* normal operation, no conflict encountered */
1351 #endif /* YYBTYACC */
1352 yychar = YYLEX;
1353 #if YYBTYACC
1354 } while (0);
1355 #endif /* YYBTYACC */
1356 if (yychar < 0) yychar = YYEOF;
1357 #if YYDEBUG
1358 if (yydebug)
1359 {
1360 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
1361 fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)\n",
1362 YYDEBUGSTR, yydepth, YYFINAL, yychar, yys);
1363 }
1364 #endif
1365 }
1366 if (yychar == YYEOF) goto yyaccept;
1367 goto yyloop;
1368 }
1369 if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 &&
1370 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate)
1371 yystate = yytable[yyn];
1372 else
1373 yystate = yydgoto[yym];
1374 #if YYDEBUG
1375 if (yydebug)
1376 {
1377 fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth);
1378 #ifdef YYSTYPE_TOSTRING
1379 #if YYBTYACC
1380 if (!yytrial)
1381 #endif /* YYBTYACC */
1382 fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval));
1383 #endif
1384 fprintf(stderr, "shifting from state %d to state %d\n", *yystack.s_mark, yystate);
1385 }
1386 #endif
1387 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
1388 *++yystack.s_mark = (YYINT) yystate;
1389 *++yystack.l_mark = yyval;
1390 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1391 *++yystack.p_mark = yyloc;
1392 #endif
1393 goto yyloop;
1394 #if YYBTYACC
1395
1396 /* Reduction declares that this path is valid. Set yypath and do a full parse */
1397 yyvalid:
1398 if (yypath) YYABORT;
1399 while (yyps->save)
1400 {
1401 YYParseState *save = yyps->save;
1402 yyps->save = save->save;
1403 save->save = yypath;
1404 yypath = save;
1405 }
1406 #if YYDEBUG
1407 if (yydebug)
1408 fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n",
1409 YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme));
1410 #endif
1411 if (yyerrctx)
1412 {
1413 yyFreeState(yyerrctx);
1414 yyerrctx = NULL;
1415 }
1416 yylvp = yylvals + yypath->lexeme;
1417 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1418 yylpp = yylpsns + yypath->lexeme;
1419 #endif
1420 yylexp = yylexemes + yypath->lexeme;
1421 yychar = YYEMPTY;
1422 yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base);
1423 memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));
1424 yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base);
1425 memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
1426 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1427 yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base);
1428 memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
1429 #endif
1430 yystate = yypath->state;
1431 goto yyloop;
1432 #endif /* YYBTYACC */
1433
1434 yyoverflow:
1435 YYERROR_CALL("yacc stack overflow");
1436 #if YYBTYACC
1437 goto yyabort_nomem;
1438 yyenomem:
1439 YYERROR_CALL("memory exhausted");
1440 yyabort_nomem:
1441 #endif /* YYBTYACC */
1442 yyresult = 2;
1443 goto yyreturn;
1444
1445 yyabort:
1446 yyresult = 1;
1447 goto yyreturn;
1448
1449 yyaccept:
1450 #if YYBTYACC
1451 if (yyps->save) goto yyvalid;
1452 #endif /* YYBTYACC */
1453 yyresult = 0;
1454
1455 yyreturn:
1456 #if defined(YYDESTRUCT_CALL)
1457 if (yychar != YYEOF && yychar != YYEMPTY)
1458 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1459 YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc);
1460 #else
1461 YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval);
1462 #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
1463
1464 {
1465 YYSTYPE *pv;
1466 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1467 YYLTYPE *pp;
1468
1469 for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp)
1470 YYDESTRUCT_CALL("cleanup: discarding state",
1471 yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp);
1472 #else
1473 for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv)
1474 YYDESTRUCT_CALL("cleanup: discarding state",
1475 yystos[*(yystack.s_base + (pv - yystack.l_base))], pv);
1476 #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
1477 }
1478 #endif /* defined(YYDESTRUCT_CALL) */
1479
1480 #if YYBTYACC
1481 if (yyerrctx)
1482 {
1483 yyFreeState(yyerrctx);
1484 yyerrctx = NULL;
1485 }
1486 while (yyps)
1487 {
1488 YYParseState *save = yyps;
1489 yyps = save->save;
1490 save->save = NULL;
1491 yyFreeState(save);
1492 }
1493 while (yypath)
1494 {
1495 YYParseState *save = yypath;
1496 yypath = save->save;
1497 save->save = NULL;
1498 yyFreeState(save);
1499 }
1500 #endif /* YYBTYACC */
1501 yyfreestack(&yystack);
1502 return (yyresult);
1503 }
1504