1 /* original parser id follows */
2 /* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */
3 /* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
8 #define YYCHECK "yyyymmdd"
11 #define yyclearin (yychar = YYEMPTY)
12 #define yyerrok (yyerrflag = 0)
13 #define YYRECOVERING() (yyerrflag != 0)
18 #define YYDEBUGSTR YYPREFIX "debug"
21 #define yyparse calc3_parse
25 #define yylex calc3_lex
29 #define yyerror calc3_error
33 #define yychar calc3_char
37 #define yyval calc3_val
41 #define yylval calc3_lval
45 #define yydebug calc3_debug
49 #define yynerrs calc3_nerrs
53 #define yyerrflag calc3_errflag
54 #endif /* yyerrflag */
57 #define yylhs calc3_lhs
61 #define yylen calc3_len
65 #define yydefred calc3_defred
69 #define yystos calc3_stos
73 #define yydgoto calc3_dgoto
77 #define yysindex calc3_sindex
81 #define yyrindex calc3_rindex
85 #define yygindex calc3_gindex
89 #define yytable calc3_table
93 #define yycheck calc3_check
97 #define yyname calc3_name
101 #define yyrule calc3_rule
107 #define yycindex calc3_cindex
108 #endif /* yycindex */
111 #define yyctable calc3_ctable
112 #endif /* yyctable */
114 #endif /* YYBTYACC */
116 #define YYPREFIX "calc3_"
126 #define YYLEX_PARAM base
127 #define YYLEX_DECL() yylex(YYSTYPE *yylval, int *YYLEX_PARAM)
128 #define YYERROR_DECL() yyerror(int regs[26], int *base, const char *s)
130 static void YYERROR_DECL();
133 #line 134 "calc3.tab.c"
135 #if ! defined(YYSTYPE) && ! defined(YYSTYPE_IS_DECLARED)
136 /* Default: YYSTYPE is the semantic value type. */
138 # define YYSTYPE_IS_DECLARED 1
141 /* compatibility with bison */
143 /* compatibility with FreeBSD */
144 # ifdef YYPARSE_PARAM_TYPE
145 # define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
147 # define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
150 # define YYPARSE_DECL() yyparse(int regs[26], int *base)
153 /* Parameters sent to lex. */
155 # ifdef YYLEX_PARAM_TYPE
156 # define YYLEX_DECL() yylex(YYSTYPE *yylval, YYLEX_PARAM_TYPE YYLEX_PARAM)
158 # define YYLEX_DECL() yylex(YYSTYPE *yylval, void * YYLEX_PARAM)
160 # define YYLEX yylex(&yylval, YYLEX_PARAM)
162 # define YYLEX_DECL() yylex(YYSTYPE *yylval, int *base)
163 # define YYLEX yylex(&yylval, base)
166 /* Parameters sent to yyerror. */
168 #define YYERROR_DECL() yyerror(int regs[26], int *base, const char *s)
171 #define YYERROR_CALL(msg) yyerror(regs, base, msg)
174 extern int YYPARSE_DECL();
179 #define YYERRCODE 256
181 static const YYINT calc3_lhs[] = { -1,
182 0, 0, 0, 1, 1, 2, 2, 2, 2, 2,
183 2, 2, 2, 2, 2, 2, 3, 3,
185 static const YYINT calc3_len[] = { 2,
186 0, 3, 3, 1, 3, 3, 3, 3, 3, 3,
187 3, 3, 3, 2, 1, 1, 1, 2,
189 static const YYINT calc3_defred[] = { 1,
190 0, 0, 17, 0, 0, 0, 0, 0, 0, 3,
191 0, 15, 14, 0, 2, 0, 0, 0, 0, 0,
192 0, 0, 18, 0, 6, 0, 0, 0, 0, 9,
195 #if defined(YYDESTRUCT_CALL) || defined(YYSTYPE_TOSTRING)
196 static const YYINT calc3_stos[] = { 0,
197 261, 256, 257, 258, 45, 40, 262, 263, 264, 10,
198 61, 258, 263, 263, 10, 124, 38, 43, 45, 42,
199 47, 37, 257, 263, 41, 263, 263, 263, 263, 263,
202 #endif /* YYDESTRUCT_CALL || YYSTYPE_TOSTRING */
203 static const YYINT calc3_dgoto[] = { 1,
206 static const YYINT calc3_sindex[] = { 0,
207 -40, -7, 0, -55, -38, -38, 1, -29, -247, 0,
208 -38, 0, 0, 22, 0, -38, -38, -38, -38, -38,
209 -38, -38, 0, -29, 0, 51, 60, -20, -20, 0,
212 static const YYINT calc3_rindex[] = { 0,
213 0, 0, 0, 2, 0, 0, 0, 9, -9, 0,
214 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
215 0, 0, 0, 10, 0, -6, 14, 5, 13, 0,
219 static const YYINT calc3_cindex[] = { 0,
220 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
221 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
222 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
226 static const YYINT calc3_gindex[] = { 0,
229 #define YYTABLESIZE 220
230 static const YYINT calc3_table[] = { 6,
231 16, 6, 10, 13, 5, 11, 5, 22, 17, 23,
232 15, 15, 20, 18, 7, 19, 22, 21, 4, 5,
233 0, 20, 8, 12, 0, 0, 21, 16, 16, 0,
234 0, 16, 16, 16, 13, 16, 0, 16, 15, 15,
235 0, 0, 7, 15, 15, 7, 15, 7, 15, 7,
236 8, 12, 0, 8, 12, 8, 0, 8, 22, 17,
237 0, 0, 25, 20, 18, 0, 19, 0, 21, 13,
238 14, 0, 0, 0, 0, 24, 0, 0, 0, 0,
239 26, 27, 28, 29, 30, 31, 32, 22, 17, 0,
240 0, 0, 20, 18, 16, 19, 22, 21, 0, 0,
241 0, 20, 18, 0, 19, 0, 21, 0, 0, 0,
242 0, 0, 0, 0, 16, 0, 0, 13, 0, 0,
243 0, 0, 0, 0, 0, 15, 0, 0, 7, 0,
244 0, 0, 0, 0, 0, 0, 8, 12, 0, 0,
245 0, 0, 0, 0, 0, 16, 0, 0, 0, 0,
246 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
247 0, 0, 0, 0, 0, 0, 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, 2, 3, 4, 3, 12,
254 static const YYINT calc3_check[] = { 40,
255 10, 40, 10, 10, 45, 61, 45, 37, 38, 257,
256 10, 10, 42, 43, 10, 45, 37, 47, 10, 10,
257 -1, 42, 10, 10, -1, -1, 47, 37, 38, -1,
258 -1, 41, 42, 43, 41, 45, -1, 47, 37, 38,
259 -1, -1, 38, 42, 43, 41, 45, 43, 47, 45,
260 38, 38, -1, 41, 41, 43, -1, 45, 37, 38,
261 -1, -1, 41, 42, 43, -1, 45, -1, 47, 5,
262 6, -1, -1, -1, -1, 11, -1, -1, -1, -1,
263 16, 17, 18, 19, 20, 21, 22, 37, 38, -1,
264 -1, -1, 42, 43, 124, 45, 37, 47, -1, -1,
265 -1, 42, 43, -1, 45, -1, 47, -1, -1, -1,
266 -1, -1, -1, -1, 124, -1, -1, 124, -1, -1,
267 -1, -1, -1, -1, -1, 124, -1, -1, 124, -1,
268 -1, -1, -1, -1, -1, -1, 124, 124, -1, -1,
269 -1, -1, -1, -1, -1, 124, -1, -1, -1, -1,
270 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
271 -1, -1, -1, -1, -1, -1, -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, 256, 257, 258, 257, 258,
279 static const YYINT calc3_ctable[] = { -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, -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,
308 #define YYMAXTOKEN 259
309 #define YYUNDFTOKEN 265
310 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))
312 static const char *const calc3_name[] = {
314 "$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,
315 0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,0,0,0,
316 0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,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,0,0,0,0,0,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,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,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,"error","DIGIT","LETTER","UMINUS","$accept","list","stat","expr","number",
324 static const char *const calc3_rule[] = {
327 "list : list stat '\\n'",
328 "list : list error '\\n'",
330 "stat : LETTER '=' expr",
331 "expr : '(' expr ')'",
332 "expr : expr '+' expr",
333 "expr : expr '-' expr",
334 "expr : expr '*' expr",
335 "expr : expr '/' expr",
336 "expr : expr '%' expr",
337 "expr : expr '&' expr",
338 "expr : expr '|' expr",
343 "number : number DIGIT",
352 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
353 #ifndef YYLLOC_DEFAULT
354 #define YYLLOC_DEFAULT(loc, rhs, n) \
359 (loc).first_line = YYRHSLOC(rhs, 0).last_line; \
360 (loc).first_column = YYRHSLOC(rhs, 0).last_column; \
361 (loc).last_line = YYRHSLOC(rhs, 0).last_line; \
362 (loc).last_column = YYRHSLOC(rhs, 0).last_column; \
366 (loc).first_line = YYRHSLOC(rhs, 1).first_line; \
367 (loc).first_column = YYRHSLOC(rhs, 1).first_column; \
368 (loc).last_line = YYRHSLOC(rhs, n).last_line; \
369 (loc).last_column = YYRHSLOC(rhs, n).last_column; \
372 #endif /* YYLLOC_DEFAULT */
373 #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
376 #ifndef YYLVQUEUEGROWTH
377 #define YYLVQUEUEGROWTH 32
379 #endif /* YYBTYACC */
381 /* define the initial stack-sizes */
384 #define YYMAXDEPTH YYSTACKSIZE
387 #define YYSTACKSIZE YYMAXDEPTH
389 #define YYSTACKSIZE 10000
390 #define YYMAXDEPTH 10000
394 #ifndef YYINITSTACKSIZE
395 #define YYINITSTACKSIZE 200
405 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
412 struct YYParseState_s
414 struct YYParseState_s *save; /* Previously saved parser state */
415 YYSTACKDATA yystack; /* saved parser stack */
416 int state; /* saved parser state */
417 int errflag; /* saved error recovery status */
418 int lexeme; /* saved index of the conflict lexeme in the lexical queue */
419 YYINT ctry; /* saved index in yyctable[] for this conflict */
421 typedef struct YYParseState_s YYParseState;
422 #endif /* YYBTYACC */
424 /* start of programs */
427 extern int YYLEX_DECL();
436 while(!feof(stdin)) {
437 yyparse(regs, &base);
442 #define UNUSED(x) ((void)(x))
447 UNUSED(regs); /* %parse-param regs is not actually used here */
448 UNUSED(base); /* %parse-param base is not actually used here */
449 fprintf(stderr, "%s\n", s);
455 /* lexical analysis routine */
456 /* returns LETTER for a lower case letter, yylval = 0 through 25 */
457 /* return DIGIT for a digit, yylval = 0 through 9 */
458 /* all other characters are returned immediately */
462 while( (c=getchar()) == ' ' ) { /* skip blanks */ }
464 /* c is now nonblank */
471 *yylval = (c - '0') % (*base);
476 #line 477 "calc3.tab.c"
478 /* For use in generated program */
479 #define yydepth (int)(yystack.s_mark - yystack.s_base)
481 #define yytrial (yyps->save)
482 #endif /* YYBTYACC */
485 #include <stdio.h> /* needed for printf */
488 #include <stdlib.h> /* needed for malloc, etc */
489 #include <string.h> /* needed for memset */
491 /* allocate initial stack or double stack size, up to YYMAXDEPTH */
492 static int yygrowstack(YYSTACKDATA *data)
498 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
502 if ((newsize = data->stacksize) == 0)
503 newsize = YYINITSTACKSIZE;
504 else if (newsize >= YYMAXDEPTH)
506 else if ((newsize *= 2) > YYMAXDEPTH)
507 newsize = YYMAXDEPTH;
509 i = (int) (data->s_mark - data->s_base);
510 newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
514 data->s_base = newss;
515 data->s_mark = newss + i;
517 newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
521 data->l_base = newvs;
522 data->l_mark = newvs + i;
524 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
525 newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps));
529 data->p_base = newps;
530 data->p_mark = newps + i;
533 data->stacksize = newsize;
534 data->s_last = data->s_base + newsize - 1;
538 fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize);
543 #if YYPURE || defined(YY_NO_LEAKS)
544 static void yyfreestack(YYSTACKDATA *data)
548 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
551 memset(data, 0, sizeof(*data));
554 #define yyfreestack(data) /* nothing */
555 #endif /* YYPURE || defined(YY_NO_LEAKS) */
558 static YYParseState *
559 yyNewState(unsigned size)
561 YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState));
562 if (p == NULL) return NULL;
564 p->yystack.stacksize = size;
567 p->yystack.s_base = NULL;
568 p->yystack.l_base = NULL;
569 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
570 p->yystack.p_base = NULL;
574 p->yystack.s_base = (YYINT *) malloc(size * sizeof(YYINT));
575 if (p->yystack.s_base == NULL) return NULL;
576 p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE));
577 if (p->yystack.l_base == NULL) return NULL;
578 memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE));
579 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
580 p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE));
581 if (p->yystack.p_base == NULL) return NULL;
582 memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE));
589 yyFreeState(YYParseState *p)
591 yyfreestack(&p->yystack);
594 #endif /* YYBTYACC */
596 #define YYABORT goto yyabort
597 #define YYREJECT goto yyabort
598 #define YYACCEPT goto yyaccept
599 #define YYERROR goto yyerrlab
601 #define YYVALID do { if (yyps->save) goto yyvalid; } while(0)
602 #define YYVALID_NESTED do { if (yyps->save && \
603 yyps->save->save == 0) goto yyvalid; } while(0)
604 #endif /* YYBTYACC */
615 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
616 YYLTYPE yyloc; /* position returned by actions */
617 YYLTYPE yylloc; /* position from the lexer */
620 /* variables for the parser stack */
624 /* Current parser state */
625 static YYParseState *yyps = 0;
627 /* yypath != NULL: do the full parse, starting at *yypath parser state. */
628 static YYParseState *yypath = 0;
630 /* Base of the lexical value queue */
631 static YYSTYPE *yylvals = 0;
633 /* Current position at lexical value queue */
634 static YYSTYPE *yylvp = 0;
636 /* End position of lexical value queue */
637 static YYSTYPE *yylve = 0;
639 /* The last allocated position at the lexical value queue */
640 static YYSTYPE *yylvlim = 0;
642 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
643 /* Base of the lexical position queue */
644 static YYLTYPE *yylpsns = 0;
646 /* Current position at lexical position queue */
647 static YYLTYPE *yylpp = 0;
649 /* End position of lexical position queue */
650 static YYLTYPE *yylpe = 0;
652 /* The last allocated position at the lexical position queue */
653 static YYLTYPE *yylplim = 0;
656 /* Current position at lexical token queue */
657 static YYINT *yylexp = 0;
659 static YYINT *yylexemes = 0;
660 #endif /* YYBTYACC */
661 int yym, yyn, yystate, yyresult;
664 YYParseState *yyerrctx = NULL;
665 #endif /* YYBTYACC */
666 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
667 YYLTYPE yyerror_loc_range[3]; /* position of error start/end (0 unused) */
672 if ((yys = getenv("YYDEBUG")) != 0)
675 if (yyn >= '0' && yyn <= '9')
679 fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX);
681 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
682 memset(yyerror_loc_range, 0, sizeof(yyerror_loc_range));
687 memset(&yyval, 0, sizeof(yyval));
688 memset(&yylval, 0, sizeof(yylval));
689 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
690 memset(&yyloc, 0, sizeof(yyloc));
691 memset(&yylloc, 0, sizeof(yylloc));
695 yyps = yyNewState(0); if (yyps == 0) goto yyenomem;
697 #endif /* YYBTYACC */
706 memset(&yystack, 0, sizeof(yystack));
709 if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
710 yystack.s_mark = yystack.s_base;
711 yystack.l_mark = yystack.l_base;
712 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
713 yystack.p_mark = yystack.p_base;
719 if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
726 /* we're currently re-reading tokens */
728 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
736 /* in trial mode; save scanner results for future parse attempts */
737 if (yylvp == yylvlim)
738 { /* Enlarge lexical value queue */
739 size_t p = (size_t) (yylvp - yylvals);
740 size_t s = (size_t) (yylvlim - yylvals);
742 s += YYLVQUEUEGROWTH;
743 if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem;
744 if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem;
745 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
746 if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem;
748 yylvp = yylve = yylvals + p;
749 yylvlim = yylvals + s;
750 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
751 yylpp = yylpe = yylpsns + p;
752 yylplim = yylpsns + s;
754 yylexp = yylexemes + p;
756 *yylexp = (YYINT) YYLEX;
759 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
766 /* normal operation, no conflict encountered */
767 #endif /* YYBTYACC */
771 #endif /* YYBTYACC */
772 if (yychar < 0) yychar = YYEOF;
776 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
777 fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)",
778 YYDEBUGSTR, yydepth, yystate, yychar, yys);
779 #ifdef YYSTYPE_TOSTRING
782 #endif /* YYBTYACC */
783 fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval));
791 /* Do we have a conflict? */
792 if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
793 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
802 fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n",
803 YYDEBUGSTR, yydepth, yystate);
805 /* Switch to the next conflict context */
810 if (save->state != yystate) YYABORT;
817 /* Unresolved conflict - start/continue trial parse */
822 fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate);
824 fputs("ALREADY in conflict, continuing trial parse.\n", stderr);
826 fputs("Starting trial parse.\n", stderr);
829 save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1));
830 if (save == NULL) goto yyenomem;
831 save->save = yyps->save;
832 save->state = yystate;
833 save->errflag = yyerrflag;
834 save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base);
835 memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));
836 save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base);
837 memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
838 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
839 save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base);
840 memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
843 if (yyctable[ctry] == -1)
846 if (yydebug && yychar >= YYEOF)
847 fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth);
852 if (yyps->save == NULL)
854 /* If this is a first conflict in the stack, start saving lexemes */
857 yylexemes = (YYINT *) malloc((YYLVQUEUEGROWTH) * sizeof(YYINT));
858 if (yylexemes == NULL) goto yyenomem;
859 yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE));
860 if (yylvals == NULL) goto yyenomem;
861 yylvlim = yylvals + YYLVQUEUEGROWTH;
862 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
863 yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE));
864 if (yylpsns == NULL) goto yyenomem;
865 yylplim = yylpsns + YYLVQUEUEGROWTH;
870 yylvp = yylve = yylvals;
871 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
872 yylpp = yylpe = yylpsns;
878 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
881 *yylexp = (YYINT) yychar;
889 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
895 save->lexeme = (int) (yylvp - yylvals);
898 if (yytable[yyn] == ctry)
902 fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n",
903 YYDEBUGSTR, yydepth, yystate, yyctable[ctry]);
908 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
913 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
915 yystate = yyctable[ctry];
916 *++yystack.s_mark = (YYINT) yystate;
917 *++yystack.l_mark = yylval;
918 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
919 *++yystack.p_mark = yylloc;
922 if (yyerrflag > 0) --yyerrflag;
927 yyn = yyctable[ctry];
930 } /* End of code dealing with conflicts */
931 #endif /* YYBTYACC */
932 if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
933 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
937 fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n",
938 YYDEBUGSTR, yydepth, yystate, yytable[yyn]);
940 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
941 yystate = yytable[yyn];
942 *++yystack.s_mark = yytable[yyn];
943 *++yystack.l_mark = yylval;
944 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
945 *++yystack.p_mark = yylloc;
948 if (yyerrflag > 0) --yyerrflag;
951 if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
952 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
957 if (yyerrflag != 0) goto yyinrecovery;
962 goto yyerrlab; /* redundant goto avoids 'unused label' warning */
965 /* explicit YYERROR from an action -- pop the rhs of the rule reduced
966 * before looking for error recovery */
967 yystack.s_mark -= yym;
968 yystate = *yystack.s_mark;
969 yystack.l_mark -= yym;
970 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
971 yystack.p_mark -= yym;
979 YYParseState *save = yyps->save;
982 fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n",
983 YYDEBUGSTR, yydepth, yystate, yyps->save->state,
984 (int)(yylvp - yylvals - yyps->save->lexeme));
986 /* Memorize most forward-looking error state in case it's really an error. */
987 if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals)
989 /* Free old saved error context state */
990 if (yyerrctx) yyFreeState(yyerrctx);
991 /* Create and fill out new saved error context state */
992 yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1));
993 if (yyerrctx == NULL) goto yyenomem;
994 yyerrctx->save = yyps->save;
995 yyerrctx->state = yystate;
996 yyerrctx->errflag = yyerrflag;
997 yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base);
998 memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));
999 yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base);
1000 memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
1001 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1002 yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base);
1003 memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
1005 yyerrctx->lexeme = (int) (yylvp - yylvals);
1007 yylvp = yylvals + save->lexeme;
1008 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1009 yylpp = yylpsns + save->lexeme;
1011 yylexp = yylexemes + save->lexeme;
1013 yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base);
1014 memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));
1015 yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base);
1016 memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
1017 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1018 yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base);
1019 memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
1021 ctry = ++save->ctry;
1022 yystate = save->state;
1023 /* We tried shift, try reduce now */
1024 if ((yyn = yyctable[ctry]) >= 0) goto yyreduce;
1025 yyps->save = save->save;
1029 /* Nothing left on the stack -- error */
1034 fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n",
1037 /* Restore state as it was in the most forward-advanced error */
1038 yylvp = yylvals + yyerrctx->lexeme;
1039 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1040 yylpp = yylpsns + yyerrctx->lexeme;
1042 yylexp = yylexemes + yyerrctx->lexeme;
1043 yychar = yylexp[-1];
1045 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1048 yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base);
1049 memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));
1050 yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base);
1051 memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
1052 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1053 yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base);
1054 memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
1056 yystate = yyerrctx->state;
1057 yyFreeState(yyerrctx);
1062 if (yynewerrflag == 0) goto yyinrecovery;
1063 #endif /* YYBTYACC */
1065 YYERROR_CALL("syntax error");
1066 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1067 yyerror_loc_range[1] = yylloc; /* lookahead position is error start position */
1071 goto yyerrlab; /* redundant goto avoids 'unused label' warning */
1082 if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 &&
1083 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE)
1087 fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n",
1088 YYDEBUGSTR, yydepth, *yystack.s_mark, yytable[yyn]);
1090 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
1091 yystate = yytable[yyn];
1092 *++yystack.s_mark = yytable[yyn];
1093 *++yystack.l_mark = yylval;
1094 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1095 /* lookahead position is error end position */
1096 yyerror_loc_range[2] = yylloc;
1097 YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */
1098 *++yystack.p_mark = yyloc;
1106 fprintf(stderr, "%s[%d]: error recovery discarding state %d\n",
1107 YYDEBUGSTR, yydepth, *yystack.s_mark);
1109 if (yystack.s_mark <= yystack.s_base) goto yyabort;
1110 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1111 /* the current TOS position is the error start position */
1112 yyerror_loc_range[1] = *yystack.p_mark;
1114 #if defined(YYDESTRUCT_CALL)
1117 #endif /* YYBTYACC */
1118 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1119 YYDESTRUCT_CALL("error: discarding state",
1120 yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark);
1122 YYDESTRUCT_CALL("error: discarding state",
1123 yystos[*yystack.s_mark], yystack.l_mark);
1124 #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
1125 #endif /* defined(YYDESTRUCT_CALL) */
1128 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1136 if (yychar == YYEOF) goto yyabort;
1140 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
1141 fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n",
1142 YYDEBUGSTR, yydepth, yystate, yychar, yys);
1145 #if defined(YYDESTRUCT_CALL)
1148 #endif /* YYBTYACC */
1149 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1150 YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc);
1152 YYDESTRUCT_CALL("error: discarding token", yychar, &yylval);
1153 #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
1154 #endif /* defined(YYDESTRUCT_CALL) */
1164 fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)",
1165 YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]);
1166 #ifdef YYSTYPE_TOSTRING
1169 #endif /* YYBTYACC */
1174 for (i = yym; i > 0; i--)
1176 if (i != yym) fputs(", ", stderr);
1177 fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]],
1178 yystack.l_mark[1-i]), stderr);
1183 fputc('\n', stderr);
1187 yyval = yystack.l_mark[1-yym];
1189 memset(&yyval, 0, sizeof yyval);
1190 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1192 /* Perform position reduction */
1193 memset(&yyloc, 0, sizeof(yyloc));
1196 #endif /* YYBTYACC */
1198 YYLLOC_DEFAULT(yyloc, &yystack.p_mark[-yym], yym);
1199 /* just in case YYERROR is invoked within the action, save
1200 the start of the rhs as the error start position */
1201 yyerror_loc_range[1] = yystack.p_mark[1-yym];
1213 { printf("%d\n",yystack.l_mark[0]);}
1217 { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; }
1221 { yyval = yystack.l_mark[-1]; }
1225 { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; }
1229 { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; }
1233 { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; }
1237 { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; }
1241 { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; }
1245 { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; }
1249 { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; }
1253 { yyval = - yystack.l_mark[0]; }
1257 { yyval = regs[yystack.l_mark[0]]; }
1261 { yyval = yystack.l_mark[0]; (*base) = (yystack.l_mark[0]==0) ? 8 : 10; }
1265 { yyval = (*base) * yystack.l_mark[-1] + yystack.l_mark[0]; }
1267 #line 1268 "calc3.tab.c"
1271 yystack.s_mark -= yym;
1272 yystate = *yystack.s_mark;
1273 yystack.l_mark -= yym;
1274 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1275 yystack.p_mark -= yym;
1278 if (yystate == 0 && yym == 0)
1283 fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth);
1284 #ifdef YYSTYPE_TOSTRING
1287 #endif /* YYBTYACC */
1288 fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval));
1290 fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL);
1294 *++yystack.s_mark = YYFINAL;
1295 *++yystack.l_mark = yyval;
1296 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1297 *++yystack.p_mark = yyloc;
1305 /* we're currently re-reading tokens */
1307 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1315 /* in trial mode; save scanner results for future parse attempts */
1316 if (yylvp == yylvlim)
1317 { /* Enlarge lexical value queue */
1318 size_t p = (size_t) (yylvp - yylvals);
1319 size_t s = (size_t) (yylvlim - yylvals);
1321 s += YYLVQUEUEGROWTH;
1322 if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL)
1324 if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL)
1326 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1327 if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL)
1330 yylvp = yylve = yylvals + p;
1331 yylvlim = yylvals + s;
1332 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1333 yylpp = yylpe = yylpsns + p;
1334 yylplim = yylpsns + s;
1336 yylexp = yylexemes + p;
1338 *yylexp = (YYINT) YYLEX;
1341 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1348 /* normal operation, no conflict encountered */
1349 #endif /* YYBTYACC */
1353 #endif /* YYBTYACC */
1354 if (yychar < 0) yychar = YYEOF;
1358 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
1359 fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)\n",
1360 YYDEBUGSTR, yydepth, YYFINAL, yychar, yys);
1364 if (yychar == YYEOF) goto yyaccept;
1367 if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 &&
1368 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate)
1369 yystate = yytable[yyn];
1371 yystate = yydgoto[yym];
1375 fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth);
1376 #ifdef YYSTYPE_TOSTRING
1379 #endif /* YYBTYACC */
1380 fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval));
1382 fprintf(stderr, "shifting from state %d to state %d\n", *yystack.s_mark, yystate);
1385 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
1386 *++yystack.s_mark = (YYINT) yystate;
1387 *++yystack.l_mark = yyval;
1388 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1389 *++yystack.p_mark = yyloc;
1394 /* Reduction declares that this path is valid. Set yypath and do a full parse */
1396 if (yypath) YYABORT;
1399 YYParseState *save = yyps->save;
1400 yyps->save = save->save;
1401 save->save = yypath;
1406 fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n",
1407 YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme));
1411 yyFreeState(yyerrctx);
1414 yylvp = yylvals + yypath->lexeme;
1415 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1416 yylpp = yylpsns + yypath->lexeme;
1418 yylexp = yylexemes + yypath->lexeme;
1420 yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base);
1421 memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));
1422 yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base);
1423 memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
1424 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1425 yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base);
1426 memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
1428 yystate = yypath->state;
1430 #endif /* YYBTYACC */
1433 YYERROR_CALL("yacc stack overflow");
1437 YYERROR_CALL("memory exhausted");
1439 #endif /* YYBTYACC */
1449 if (yyps->save) goto yyvalid;
1450 #endif /* YYBTYACC */
1454 #if defined(YYDESTRUCT_CALL)
1455 if (yychar != YYEOF && yychar != YYEMPTY)
1456 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1457 YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc);
1459 YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval);
1460 #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
1464 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1467 for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp)
1468 YYDESTRUCT_CALL("cleanup: discarding state",
1469 yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp);
1471 for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv)
1472 YYDESTRUCT_CALL("cleanup: discarding state",
1473 yystos[*(yystack.s_base + (pv - yystack.l_base))], pv);
1474 #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
1476 #endif /* defined(YYDESTRUCT_CALL) */
1481 yyFreeState(yyerrctx);
1486 YYParseState *save = yyps;
1493 YYParseState *save = yypath;
1494 yypath = save->save;
1498 #endif /* YYBTYACC */
1499 yyfreestack(&yystack);