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