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 calc_parse
25 #define yylex calc_lex
29 #define yyerror calc_error
33 #define yychar calc_char
37 #define yyval calc_val
41 #define yylval calc_lval
45 #define yydebug calc_debug
49 #define yynerrs calc_nerrs
53 #define yyerrflag calc_errflag
54 #endif /* yyerrflag */
57 #define yylhs calc_lhs
61 #define yylen calc_len
65 #define yydefred calc_defred
69 #define yystos calc_stos
73 #define yydgoto calc_dgoto
77 #define yysindex calc_sindex
81 #define yyrindex calc_rindex
85 #define yygindex calc_gindex
89 #define yytable calc_table
93 #define yycheck calc_check
97 #define yyname calc_name
101 #define yyrule calc_rule
107 #define yycindex calc_cindex
108 #endif /* yycindex */
111 #define yyctable calc_ctable
112 #endif /* yyctable */
114 #endif /* YYBTYACC */
116 #define YYPREFIX "calc_"
120 #line 2 "pure_calc.y"
129 #define YYLEX_PARAM &yylval
130 #define YYLEX_DECL() yylex(YYSTYPE *yylval)
131 #define YYERROR_DECL() yyerror(const char *s)
133 static void YYERROR_DECL();
136 #line 137 "pure_calc.tab.c"
138 #if ! defined(YYSTYPE) && ! defined(YYSTYPE_IS_DECLARED)
139 /* Default: YYSTYPE is the semantic value type. */
141 # define YYSTYPE_IS_DECLARED 1
144 /* compatibility with bison */
146 /* compatibility with FreeBSD */
147 # ifdef YYPARSE_PARAM_TYPE
148 # define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
150 # define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
153 # define YYPARSE_DECL() yyparse(void)
156 /* Parameters sent to lex. */
158 # ifdef YYLEX_PARAM_TYPE
159 # define YYLEX_DECL() yylex(YYSTYPE *yylval, YYLEX_PARAM_TYPE YYLEX_PARAM)
161 # define YYLEX_DECL() yylex(YYSTYPE *yylval, void * YYLEX_PARAM)
163 # define YYLEX yylex(&yylval, YYLEX_PARAM)
165 # define YYLEX_DECL() yylex(YYSTYPE *yylval)
166 # define YYLEX yylex(&yylval)
169 /* Parameters sent to yyerror. */
171 #define YYERROR_DECL() yyerror(const char *s)
174 #define YYERROR_CALL(msg) yyerror(msg)
177 extern int YYPARSE_DECL();
182 #define YYERRCODE 256
184 static const YYINT calc_lhs[] = { -1,
185 0, 0, 0, 1, 1, 2, 2, 2, 2, 2,
186 2, 2, 2, 2, 2, 2, 3, 3,
188 static const YYINT calc_len[] = { 2,
189 0, 3, 3, 1, 3, 3, 3, 3, 3, 3,
190 3, 3, 3, 2, 1, 1, 1, 2,
192 static const YYINT calc_defred[] = { 1,
193 0, 0, 17, 0, 0, 0, 0, 0, 0, 3,
194 0, 15, 14, 0, 2, 0, 0, 0, 0, 0,
195 0, 0, 18, 0, 6, 0, 0, 0, 0, 9,
198 #if defined(YYDESTRUCT_CALL) || defined(YYSTYPE_TOSTRING)
199 static const YYINT calc_stos[] = { 0,
200 261, 256, 257, 258, 45, 40, 262, 263, 264, 10,
201 61, 258, 263, 263, 10, 124, 38, 43, 45, 42,
202 47, 37, 257, 263, 41, 263, 263, 263, 263, 263,
205 #endif /* YYDESTRUCT_CALL || YYSTYPE_TOSTRING */
206 static const YYINT calc_dgoto[] = { 1,
209 static const YYINT calc_sindex[] = { 0,
210 -40, -7, 0, -55, -38, -38, 1, -29, -247, 0,
211 -38, 0, 0, 22, 0, -38, -38, -38, -38, -38,
212 -38, -38, 0, -29, 0, 51, 60, -20, -20, 0,
215 static const YYINT calc_rindex[] = { 0,
216 0, 0, 0, 2, 0, 0, 0, 9, -9, 0,
217 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
218 0, 0, 0, 10, 0, -6, 14, 5, 13, 0,
222 static const YYINT calc_cindex[] = { 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, 0, 0, 0, 0, 0, 0, 0, 0,
229 static const YYINT calc_gindex[] = { 0,
232 #define YYTABLESIZE 220
233 static const YYINT calc_table[] = { 6,
234 16, 6, 10, 13, 5, 11, 5, 22, 17, 23,
235 15, 15, 20, 18, 7, 19, 22, 21, 4, 5,
236 0, 20, 8, 12, 0, 0, 21, 16, 16, 0,
237 0, 16, 16, 16, 13, 16, 0, 16, 15, 15,
238 0, 0, 7, 15, 15, 7, 15, 7, 15, 7,
239 8, 12, 0, 8, 12, 8, 0, 8, 22, 17,
240 0, 0, 25, 20, 18, 0, 19, 0, 21, 13,
241 14, 0, 0, 0, 0, 24, 0, 0, 0, 0,
242 26, 27, 28, 29, 30, 31, 32, 22, 17, 0,
243 0, 0, 20, 18, 16, 19, 22, 21, 0, 0,
244 0, 20, 18, 0, 19, 0, 21, 0, 0, 0,
245 0, 0, 0, 0, 16, 0, 0, 13, 0, 0,
246 0, 0, 0, 0, 0, 15, 0, 0, 7, 0,
247 0, 0, 0, 0, 0, 0, 8, 12, 0, 0,
248 0, 0, 0, 0, 0, 16, 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, 0, 0, 0, 0, 0,
255 0, 0, 0, 0, 0, 2, 3, 4, 3, 12,
257 static const YYINT calc_check[] = { 40,
258 10, 40, 10, 10, 45, 61, 45, 37, 38, 257,
259 10, 10, 42, 43, 10, 45, 37, 47, 10, 10,
260 -1, 42, 10, 10, -1, -1, 47, 37, 38, -1,
261 -1, 41, 42, 43, 41, 45, -1, 47, 37, 38,
262 -1, -1, 38, 42, 43, 41, 45, 43, 47, 45,
263 38, 38, -1, 41, 41, 43, -1, 45, 37, 38,
264 -1, -1, 41, 42, 43, -1, 45, -1, 47, 5,
265 6, -1, -1, -1, -1, 11, -1, -1, -1, -1,
266 16, 17, 18, 19, 20, 21, 22, 37, 38, -1,
267 -1, -1, 42, 43, 124, 45, 37, 47, -1, -1,
268 -1, 42, 43, -1, 45, -1, 47, -1, -1, -1,
269 -1, -1, -1, -1, 124, -1, -1, 124, -1, -1,
270 -1, -1, -1, -1, -1, 124, -1, -1, 124, -1,
271 -1, -1, -1, -1, -1, -1, 124, 124, -1, -1,
272 -1, -1, -1, -1, -1, 124, -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, -1, -1, -1, -1, -1,
279 -1, -1, -1, -1, -1, 256, 257, 258, 257, 258,
282 static const YYINT calc_ctable[] = { -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, -1,
304 -1, -1, -1, -1, -1, -1, -1, -1, -1,
311 #define YYMAXTOKEN 259
312 #define YYUNDFTOKEN 265
313 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))
315 static const char *const calc_name[] = {
317 "$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,
318 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,
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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
324 0,0,"error","DIGIT","LETTER","UMINUS","$accept","list","stat","expr","number",
327 static const char *const calc_rule[] = {
330 "list : list stat '\\n'",
331 "list : list error '\\n'",
333 "stat : LETTER '=' expr",
334 "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 '|' expr",
346 "number : number DIGIT",
355 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
356 #ifndef YYLLOC_DEFAULT
357 #define YYLLOC_DEFAULT(loc, rhs, n) \
362 (loc).first_line = YYRHSLOC(rhs, 0).last_line; \
363 (loc).first_column = YYRHSLOC(rhs, 0).last_column; \
364 (loc).last_line = YYRHSLOC(rhs, 0).last_line; \
365 (loc).last_column = YYRHSLOC(rhs, 0).last_column; \
369 (loc).first_line = YYRHSLOC(rhs, 1).first_line; \
370 (loc).first_column = YYRHSLOC(rhs, 1).first_column; \
371 (loc).last_line = YYRHSLOC(rhs, n).last_line; \
372 (loc).last_column = YYRHSLOC(rhs, n).last_column; \
375 #endif /* YYLLOC_DEFAULT */
376 #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
379 #ifndef YYLVQUEUEGROWTH
380 #define YYLVQUEUEGROWTH 32
382 #endif /* YYBTYACC */
384 /* define the initial stack-sizes */
387 #define YYMAXDEPTH YYSTACKSIZE
390 #define YYSTACKSIZE YYMAXDEPTH
392 #define YYSTACKSIZE 10000
393 #define YYMAXDEPTH 10000
397 #ifndef YYINITSTACKSIZE
398 #define YYINITSTACKSIZE 200
408 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
415 struct YYParseState_s
417 struct YYParseState_s *save; /* Previously saved parser state */
418 YYSTACKDATA yystack; /* saved parser stack */
419 int state; /* saved parser state */
420 int errflag; /* saved error recovery status */
421 int lexeme; /* saved index of the conflict lexeme in the lexical queue */
422 YYINT ctry; /* saved index in yyctable[] for this conflict */
424 typedef struct YYParseState_s YYParseState;
425 #endif /* YYBTYACC */
426 #line 72 "pure_calc.y"
427 /* start of programs */
430 static int YYLEX_DECL();
436 while(!feof(stdin)) {
445 fprintf(stderr, "%s\n", s);
451 /* lexical analysis routine */
452 /* returns LETTER for a lower case letter, yylval = 0 through 25 */
453 /* return DIGIT for a digit, yylval = 0 through 9 */
454 /* all other characters are returned immediately */
458 while( (c=getchar()) == ' ' ) { /* skip blanks */ }
460 /* c is now nonblank */
472 #line 473 "pure_calc.tab.c"
474 /* For use in generated program */
475 #define yydepth (int)(yystack.s_mark - yystack.s_base)
477 #define yytrial (yyps->save)
478 #endif /* YYBTYACC */
481 #include <stdio.h> /* needed for printf */
484 #include <stdlib.h> /* needed for malloc, etc */
485 #include <string.h> /* needed for memset */
487 /* allocate initial stack or double stack size, up to YYMAXDEPTH */
488 static int yygrowstack(YYSTACKDATA *data)
494 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
498 if ((newsize = data->stacksize) == 0)
499 newsize = YYINITSTACKSIZE;
500 else if (newsize >= YYMAXDEPTH)
502 else if ((newsize *= 2) > YYMAXDEPTH)
503 newsize = YYMAXDEPTH;
505 i = (int) (data->s_mark - data->s_base);
506 newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
510 data->s_base = newss;
511 data->s_mark = newss + i;
513 newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
517 data->l_base = newvs;
518 data->l_mark = newvs + i;
520 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
521 newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps));
525 data->p_base = newps;
526 data->p_mark = newps + i;
529 data->stacksize = newsize;
530 data->s_last = data->s_base + newsize - 1;
534 fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize);
539 #if YYPURE || defined(YY_NO_LEAKS)
540 static void yyfreestack(YYSTACKDATA *data)
544 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
547 memset(data, 0, sizeof(*data));
550 #define yyfreestack(data) /* nothing */
551 #endif /* YYPURE || defined(YY_NO_LEAKS) */
554 static YYParseState *
555 yyNewState(unsigned size)
557 YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState));
558 if (p == NULL) return NULL;
560 p->yystack.stacksize = size;
563 p->yystack.s_base = NULL;
564 p->yystack.l_base = NULL;
565 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
566 p->yystack.p_base = NULL;
570 p->yystack.s_base = (YYINT *) malloc(size * sizeof(YYINT));
571 if (p->yystack.s_base == NULL) return NULL;
572 p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE));
573 if (p->yystack.l_base == NULL) return NULL;
574 memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE));
575 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
576 p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE));
577 if (p->yystack.p_base == NULL) return NULL;
578 memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE));
585 yyFreeState(YYParseState *p)
587 yyfreestack(&p->yystack);
590 #endif /* YYBTYACC */
592 #define YYABORT goto yyabort
593 #define YYREJECT goto yyabort
594 #define YYACCEPT goto yyaccept
595 #define YYERROR goto yyerrlab
597 #define YYVALID do { if (yyps->save) goto yyvalid; } while(0)
598 #define YYVALID_NESTED do { if (yyps->save && \
599 yyps->save->save == 0) goto yyvalid; } while(0)
600 #endif /* YYBTYACC */
611 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
612 YYLTYPE yyloc; /* position returned by actions */
613 YYLTYPE yylloc; /* position from the lexer */
616 /* variables for the parser stack */
620 /* Current parser state */
621 static YYParseState *yyps = 0;
623 /* yypath != NULL: do the full parse, starting at *yypath parser state. */
624 static YYParseState *yypath = 0;
626 /* Base of the lexical value queue */
627 static YYSTYPE *yylvals = 0;
629 /* Current position at lexical value queue */
630 static YYSTYPE *yylvp = 0;
632 /* End position of lexical value queue */
633 static YYSTYPE *yylve = 0;
635 /* The last allocated position at the lexical value queue */
636 static YYSTYPE *yylvlim = 0;
638 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
639 /* Base of the lexical position queue */
640 static YYLTYPE *yylpsns = 0;
642 /* Current position at lexical position queue */
643 static YYLTYPE *yylpp = 0;
645 /* End position of lexical position queue */
646 static YYLTYPE *yylpe = 0;
648 /* The last allocated position at the lexical position queue */
649 static YYLTYPE *yylplim = 0;
652 /* Current position at lexical token queue */
653 static YYINT *yylexp = 0;
655 static YYINT *yylexemes = 0;
656 #endif /* YYBTYACC */
657 int yym, yyn, yystate, yyresult;
660 YYParseState *yyerrctx = NULL;
661 #endif /* YYBTYACC */
662 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
663 YYLTYPE yyerror_loc_range[3]; /* position of error start/end (0 unused) */
668 if ((yys = getenv("YYDEBUG")) != 0)
671 if (yyn >= '0' && yyn <= '9')
675 fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX);
677 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
678 memset(yyerror_loc_range, 0, sizeof(yyerror_loc_range));
683 memset(&yyval, 0, sizeof(yyval));
684 memset(&yylval, 0, sizeof(yylval));
685 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
686 memset(&yyloc, 0, sizeof(yyloc));
687 memset(&yylloc, 0, sizeof(yylloc));
691 yyps = yyNewState(0); if (yyps == 0) goto yyenomem;
693 #endif /* YYBTYACC */
702 memset(&yystack, 0, sizeof(yystack));
705 if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
706 yystack.s_mark = yystack.s_base;
707 yystack.l_mark = yystack.l_base;
708 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
709 yystack.p_mark = yystack.p_base;
715 if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
722 /* we're currently re-reading tokens */
724 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
732 /* in trial mode; save scanner results for future parse attempts */
733 if (yylvp == yylvlim)
734 { /* Enlarge lexical value queue */
735 size_t p = (size_t) (yylvp - yylvals);
736 size_t s = (size_t) (yylvlim - yylvals);
738 s += YYLVQUEUEGROWTH;
739 if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem;
740 if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem;
741 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
742 if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem;
744 yylvp = yylve = yylvals + p;
745 yylvlim = yylvals + s;
746 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
747 yylpp = yylpe = yylpsns + p;
748 yylplim = yylpsns + s;
750 yylexp = yylexemes + p;
752 *yylexp = (YYINT) YYLEX;
755 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
762 /* normal operation, no conflict encountered */
763 #endif /* YYBTYACC */
767 #endif /* YYBTYACC */
768 if (yychar < 0) yychar = YYEOF;
772 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
773 fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)",
774 YYDEBUGSTR, yydepth, yystate, yychar, yys);
775 #ifdef YYSTYPE_TOSTRING
778 #endif /* YYBTYACC */
779 fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval));
787 /* Do we have a conflict? */
788 if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
789 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
798 fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n",
799 YYDEBUGSTR, yydepth, yystate);
801 /* Switch to the next conflict context */
806 if (save->state != yystate) YYABORT;
813 /* Unresolved conflict - start/continue trial parse */
818 fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate);
820 fputs("ALREADY in conflict, continuing trial parse.\n", stderr);
822 fputs("Starting trial parse.\n", stderr);
825 save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1));
826 if (save == NULL) goto yyenomem;
827 save->save = yyps->save;
828 save->state = yystate;
829 save->errflag = yyerrflag;
830 save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base);
831 memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));
832 save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base);
833 memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
834 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
835 save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base);
836 memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
839 if (yyctable[ctry] == -1)
842 if (yydebug && yychar >= YYEOF)
843 fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth);
848 if (yyps->save == NULL)
850 /* If this is a first conflict in the stack, start saving lexemes */
853 yylexemes = (YYINT *) malloc((YYLVQUEUEGROWTH) * sizeof(YYINT));
854 if (yylexemes == NULL) goto yyenomem;
855 yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE));
856 if (yylvals == NULL) goto yyenomem;
857 yylvlim = yylvals + YYLVQUEUEGROWTH;
858 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
859 yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE));
860 if (yylpsns == NULL) goto yyenomem;
861 yylplim = yylpsns + YYLVQUEUEGROWTH;
866 yylvp = yylve = yylvals;
867 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
868 yylpp = yylpe = yylpsns;
874 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
877 *yylexp = (YYINT) yychar;
885 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
891 save->lexeme = (int) (yylvp - yylvals);
894 if (yytable[yyn] == ctry)
898 fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n",
899 YYDEBUGSTR, yydepth, yystate, yyctable[ctry]);
904 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
909 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
911 yystate = yyctable[ctry];
912 *++yystack.s_mark = (YYINT) yystate;
913 *++yystack.l_mark = yylval;
914 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
915 *++yystack.p_mark = yylloc;
918 if (yyerrflag > 0) --yyerrflag;
923 yyn = yyctable[ctry];
926 } /* End of code dealing with conflicts */
927 #endif /* YYBTYACC */
928 if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
929 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
933 fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n",
934 YYDEBUGSTR, yydepth, yystate, yytable[yyn]);
936 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
937 yystate = yytable[yyn];
938 *++yystack.s_mark = yytable[yyn];
939 *++yystack.l_mark = yylval;
940 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
941 *++yystack.p_mark = yylloc;
944 if (yyerrflag > 0) --yyerrflag;
947 if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
948 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
953 if (yyerrflag != 0) goto yyinrecovery;
958 goto yyerrlab; /* redundant goto avoids 'unused label' warning */
961 /* explicit YYERROR from an action -- pop the rhs of the rule reduced
962 * before looking for error recovery */
963 yystack.s_mark -= yym;
964 yystate = *yystack.s_mark;
965 yystack.l_mark -= yym;
966 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
967 yystack.p_mark -= yym;
975 YYParseState *save = yyps->save;
978 fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n",
979 YYDEBUGSTR, yydepth, yystate, yyps->save->state,
980 (int)(yylvp - yylvals - yyps->save->lexeme));
982 /* Memorize most forward-looking error state in case it's really an error. */
983 if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals)
985 /* Free old saved error context state */
986 if (yyerrctx) yyFreeState(yyerrctx);
987 /* Create and fill out new saved error context state */
988 yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1));
989 if (yyerrctx == NULL) goto yyenomem;
990 yyerrctx->save = yyps->save;
991 yyerrctx->state = yystate;
992 yyerrctx->errflag = yyerrflag;
993 yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base);
994 memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));
995 yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base);
996 memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
997 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
998 yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base);
999 memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
1001 yyerrctx->lexeme = (int) (yylvp - yylvals);
1003 yylvp = yylvals + save->lexeme;
1004 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1005 yylpp = yylpsns + save->lexeme;
1007 yylexp = yylexemes + save->lexeme;
1009 yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base);
1010 memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));
1011 yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base);
1012 memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
1013 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1014 yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base);
1015 memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
1017 ctry = ++save->ctry;
1018 yystate = save->state;
1019 /* We tried shift, try reduce now */
1020 if ((yyn = yyctable[ctry]) >= 0) goto yyreduce;
1021 yyps->save = save->save;
1025 /* Nothing left on the stack -- error */
1030 fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n",
1033 /* Restore state as it was in the most forward-advanced error */
1034 yylvp = yylvals + yyerrctx->lexeme;
1035 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1036 yylpp = yylpsns + yyerrctx->lexeme;
1038 yylexp = yylexemes + yyerrctx->lexeme;
1039 yychar = yylexp[-1];
1041 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1044 yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base);
1045 memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));
1046 yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base);
1047 memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
1048 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1049 yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base);
1050 memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
1052 yystate = yyerrctx->state;
1053 yyFreeState(yyerrctx);
1058 if (yynewerrflag == 0) goto yyinrecovery;
1059 #endif /* YYBTYACC */
1061 YYERROR_CALL("syntax error");
1062 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1063 yyerror_loc_range[1] = yylloc; /* lookahead position is error start position */
1067 goto yyerrlab; /* redundant goto avoids 'unused label' warning */
1078 if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 &&
1079 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE)
1083 fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n",
1084 YYDEBUGSTR, yydepth, *yystack.s_mark, yytable[yyn]);
1086 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
1087 yystate = yytable[yyn];
1088 *++yystack.s_mark = yytable[yyn];
1089 *++yystack.l_mark = yylval;
1090 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1091 /* lookahead position is error end position */
1092 yyerror_loc_range[2] = yylloc;
1093 YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */
1094 *++yystack.p_mark = yyloc;
1102 fprintf(stderr, "%s[%d]: error recovery discarding state %d\n",
1103 YYDEBUGSTR, yydepth, *yystack.s_mark);
1105 if (yystack.s_mark <= yystack.s_base) goto yyabort;
1106 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1107 /* the current TOS position is the error start position */
1108 yyerror_loc_range[1] = *yystack.p_mark;
1110 #if defined(YYDESTRUCT_CALL)
1113 #endif /* YYBTYACC */
1114 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1115 YYDESTRUCT_CALL("error: discarding state",
1116 yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark);
1118 YYDESTRUCT_CALL("error: discarding state",
1119 yystos[*yystack.s_mark], yystack.l_mark);
1120 #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
1121 #endif /* defined(YYDESTRUCT_CALL) */
1124 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1132 if (yychar == YYEOF) goto yyabort;
1136 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
1137 fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n",
1138 YYDEBUGSTR, yydepth, yystate, yychar, yys);
1141 #if defined(YYDESTRUCT_CALL)
1144 #endif /* YYBTYACC */
1145 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1146 YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc);
1148 YYDESTRUCT_CALL("error: discarding token", yychar, &yylval);
1149 #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
1150 #endif /* defined(YYDESTRUCT_CALL) */
1160 fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)",
1161 YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]);
1162 #ifdef YYSTYPE_TOSTRING
1165 #endif /* YYBTYACC */
1170 for (i = yym; i > 0; i--)
1172 if (i != yym) fputs(", ", stderr);
1173 fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]],
1174 yystack.l_mark[1-i]), stderr);
1179 fputc('\n', stderr);
1183 yyval = yystack.l_mark[1-yym];
1185 memset(&yyval, 0, sizeof yyval);
1186 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1188 /* Perform position reduction */
1189 memset(&yyloc, 0, sizeof(yyloc));
1192 #endif /* YYBTYACC */
1194 YYLLOC_DEFAULT(yyloc, &yystack.p_mark[-yym], yym);
1195 /* just in case YYERROR is invoked within the action, save
1196 the start of the rhs as the error start position */
1197 yyerror_loc_range[1] = yystack.p_mark[1-yym];
1204 #line 34 "pure_calc.y"
1208 #line 38 "pure_calc.y"
1209 { printf("%d\n",yystack.l_mark[0]);}
1212 #line 40 "pure_calc.y"
1213 { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; }
1216 #line 44 "pure_calc.y"
1217 { yyval = yystack.l_mark[-1]; }
1220 #line 46 "pure_calc.y"
1221 { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; }
1224 #line 48 "pure_calc.y"
1225 { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; }
1228 #line 50 "pure_calc.y"
1229 { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; }
1232 #line 52 "pure_calc.y"
1233 { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; }
1236 #line 54 "pure_calc.y"
1237 { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; }
1240 #line 56 "pure_calc.y"
1241 { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; }
1244 #line 58 "pure_calc.y"
1245 { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; }
1248 #line 60 "pure_calc.y"
1249 { yyval = - yystack.l_mark[0]; }
1252 #line 62 "pure_calc.y"
1253 { yyval = regs[yystack.l_mark[0]]; }
1256 #line 67 "pure_calc.y"
1257 { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; }
1260 #line 69 "pure_calc.y"
1261 { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; }
1263 #line 1264 "pure_calc.tab.c"
1267 yystack.s_mark -= yym;
1268 yystate = *yystack.s_mark;
1269 yystack.l_mark -= yym;
1270 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1271 yystack.p_mark -= yym;
1274 if (yystate == 0 && yym == 0)
1279 fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth);
1280 #ifdef YYSTYPE_TOSTRING
1283 #endif /* YYBTYACC */
1284 fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval));
1286 fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL);
1290 *++yystack.s_mark = YYFINAL;
1291 *++yystack.l_mark = yyval;
1292 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1293 *++yystack.p_mark = yyloc;
1301 /* we're currently re-reading tokens */
1303 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1311 /* in trial mode; save scanner results for future parse attempts */
1312 if (yylvp == yylvlim)
1313 { /* Enlarge lexical value queue */
1314 size_t p = (size_t) (yylvp - yylvals);
1315 size_t s = (size_t) (yylvlim - yylvals);
1317 s += YYLVQUEUEGROWTH;
1318 if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL)
1320 if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL)
1322 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1323 if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL)
1326 yylvp = yylve = yylvals + p;
1327 yylvlim = yylvals + s;
1328 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1329 yylpp = yylpe = yylpsns + p;
1330 yylplim = yylpsns + s;
1332 yylexp = yylexemes + p;
1334 *yylexp = (YYINT) YYLEX;
1337 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1344 /* normal operation, no conflict encountered */
1345 #endif /* YYBTYACC */
1349 #endif /* YYBTYACC */
1350 if (yychar < 0) yychar = YYEOF;
1354 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
1355 fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)\n",
1356 YYDEBUGSTR, yydepth, YYFINAL, yychar, yys);
1360 if (yychar == YYEOF) goto yyaccept;
1363 if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 &&
1364 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate)
1365 yystate = yytable[yyn];
1367 yystate = yydgoto[yym];
1371 fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth);
1372 #ifdef YYSTYPE_TOSTRING
1375 #endif /* YYBTYACC */
1376 fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval));
1378 fprintf(stderr, "shifting from state %d to state %d\n", *yystack.s_mark, yystate);
1381 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
1382 *++yystack.s_mark = (YYINT) yystate;
1383 *++yystack.l_mark = yyval;
1384 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1385 *++yystack.p_mark = yyloc;
1390 /* Reduction declares that this path is valid. Set yypath and do a full parse */
1392 if (yypath) YYABORT;
1395 YYParseState *save = yyps->save;
1396 yyps->save = save->save;
1397 save->save = yypath;
1402 fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n",
1403 YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme));
1407 yyFreeState(yyerrctx);
1410 yylvp = yylvals + yypath->lexeme;
1411 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1412 yylpp = yylpsns + yypath->lexeme;
1414 yylexp = yylexemes + yypath->lexeme;
1416 yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base);
1417 memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));
1418 yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base);
1419 memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
1420 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1421 yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base);
1422 memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
1424 yystate = yypath->state;
1426 #endif /* YYBTYACC */
1429 YYERROR_CALL("yacc stack overflow");
1433 YYERROR_CALL("memory exhausted");
1435 #endif /* YYBTYACC */
1445 if (yyps->save) goto yyvalid;
1446 #endif /* YYBTYACC */
1450 #if defined(YYDESTRUCT_CALL)
1451 if (yychar != YYEOF && yychar != YYEMPTY)
1452 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1453 YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc);
1455 YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval);
1456 #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
1460 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1463 for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp)
1464 YYDESTRUCT_CALL("cleanup: discarding state",
1465 yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp);
1467 for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv)
1468 YYDESTRUCT_CALL("cleanup: discarding state",
1469 yystos[*(yystack.s_base + (pv - yystack.l_base))], pv);
1470 #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
1472 #endif /* defined(YYDESTRUCT_CALL) */
1477 yyFreeState(yyerrctx);
1482 YYParseState *save = yyps;
1489 YYParseState *save = yypath;
1490 yypath = save->save;
1494 #endif /* YYBTYACC */
1495 yyfreestack(&yystack);