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 static const YYINT calc_stos[] = { 0,
199 261, 256, 257, 258, 45, 40, 262, 263, 264, 10,
200 61, 258, 263, 263, 10, 124, 38, 43, 45, 42,
201 47, 37, 257, 263, 41, 263, 263, 263, 263, 263,
204 static const YYINT calc_dgoto[] = { 1,
207 static const YYINT calc_sindex[] = { 0,
208 -40, -7, 0, -55, -38, -38, 1, -29, -247, 0,
209 -38, 0, 0, 22, 0, -38, -38, -38, -38, -38,
210 -38, -38, 0, -29, 0, 51, 60, -20, -20, 0,
213 static const YYINT calc_rindex[] = { 0,
214 0, 0, 0, 2, 0, 0, 0, 9, -9, 0,
215 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
216 0, 0, 0, 10, 0, -6, 14, 5, 13, 0,
220 static const YYINT calc_cindex[] = { 0,
221 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
222 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
223 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
227 static const YYINT calc_gindex[] = { 0,
230 #define YYTABLESIZE 220
231 static const YYINT calc_table[] = { 6,
232 16, 6, 10, 13, 5, 11, 5, 22, 17, 23,
233 15, 15, 20, 18, 7, 19, 22, 21, 4, 5,
234 0, 20, 8, 12, 0, 0, 21, 16, 16, 0,
235 0, 16, 16, 16, 13, 16, 0, 16, 15, 15,
236 0, 0, 7, 15, 15, 7, 15, 7, 15, 7,
237 8, 12, 0, 8, 12, 8, 0, 8, 22, 17,
238 0, 0, 25, 20, 18, 0, 19, 0, 21, 13,
239 14, 0, 0, 0, 0, 24, 0, 0, 0, 0,
240 26, 27, 28, 29, 30, 31, 32, 22, 17, 0,
241 0, 0, 20, 18, 16, 19, 22, 21, 0, 0,
242 0, 20, 18, 0, 19, 0, 21, 0, 0, 0,
243 0, 0, 0, 0, 16, 0, 0, 13, 0, 0,
244 0, 0, 0, 0, 0, 15, 0, 0, 7, 0,
245 0, 0, 0, 0, 0, 0, 8, 12, 0, 0,
246 0, 0, 0, 0, 0, 16, 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, 0, 0, 0, 0, 0,
253 0, 0, 0, 0, 0, 2, 3, 4, 3, 12,
255 static const YYINT calc_check[] = { 40,
256 10, 40, 10, 10, 45, 61, 45, 37, 38, 257,
257 10, 10, 42, 43, 10, 45, 37, 47, 10, 10,
258 -1, 42, 10, 10, -1, -1, 47, 37, 38, -1,
259 -1, 41, 42, 43, 41, 45, -1, 47, 37, 38,
260 -1, -1, 38, 42, 43, 41, 45, 43, 47, 45,
261 38, 38, -1, 41, 41, 43, -1, 45, 37, 38,
262 -1, -1, 41, 42, 43, -1, 45, -1, 47, 5,
263 6, -1, -1, -1, -1, 11, -1, -1, -1, -1,
264 16, 17, 18, 19, 20, 21, 22, 37, 38, -1,
265 -1, -1, 42, 43, 124, 45, 37, 47, -1, -1,
266 -1, 42, 43, -1, 45, -1, 47, -1, -1, -1,
267 -1, -1, -1, -1, 124, -1, -1, 124, -1, -1,
268 -1, -1, -1, -1, -1, 124, -1, -1, 124, -1,
269 -1, -1, -1, -1, -1, -1, 124, 124, -1, -1,
270 -1, -1, -1, -1, -1, 124, -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, -1, -1, -1, -1, -1,
277 -1, -1, -1, -1, -1, 256, 257, 258, 257, 258,
280 static const YYINT calc_ctable[] = { -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, -1,
302 -1, -1, -1, -1, -1, -1, -1, -1, -1,
309 #define YYMAXTOKEN 259
310 #define YYUNDFTOKEN 265
311 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))
313 static const char *const calc_name[] = {
315 "$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,
316 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,
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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,"error","DIGIT","LETTER","UMINUS","$accept","list","stat","expr","number",
325 static const char *const calc_rule[] = {
328 "list : list stat '\\n'",
329 "list : list error '\\n'",
331 "stat : LETTER '=' expr",
332 "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",
339 "expr : expr '|' expr",
344 "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 = ((rhs)[-1]).last_line; \
360 (loc).first_column = ((rhs)[-1]).last_column; \
361 (loc).last_line = ((rhs)[-1]).last_line; \
362 (loc).last_column = ((rhs)[-1]).last_column; \
366 (loc).first_line = ((rhs)[ 0 ]).first_line; \
367 (loc).first_column = ((rhs)[ 0 ]).first_column; \
368 (loc).last_line = ((rhs)[n-1]).last_line; \
369 (loc).last_column = ((rhs)[n-1]).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 */
423 #line 72 "pure_calc.y"
424 /* start of programs */
427 static int YYLEX_DECL();
433 while(!feof(stdin)) {
442 fprintf(stderr, "%s\n", s);
448 /* lexical analysis routine */
449 /* returns LETTER for a lower case letter, yylval = 0 through 25 */
450 /* return DIGIT for a digit, yylval = 0 through 9 */
451 /* all other characters are returned immediately */
455 while( (c=getchar()) == ' ' ) { /* skip blanks */ }
457 /* c is now nonblank */
469 #line 470 "pure_calc.tab.c"
471 /* For use in generated program */
472 #define yydepth (int)(yystack.s_mark - yystack.s_base)
474 #define yytrial (yyps->save)
475 #endif /* YYBTYACC */
478 #include <stdio.h> /* needed for printf */
481 #include <stdlib.h> /* needed for malloc, etc */
482 #include <string.h> /* needed for memset */
484 /* allocate initial stack or double stack size, up to YYMAXDEPTH */
485 static int yygrowstack(YYSTACKDATA *data)
491 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
495 if ((newsize = data->stacksize) == 0)
496 newsize = YYINITSTACKSIZE;
497 else if (newsize >= YYMAXDEPTH)
499 else if ((newsize *= 2) > YYMAXDEPTH)
500 newsize = YYMAXDEPTH;
502 i = (int) (data->s_mark - data->s_base);
503 newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
507 data->s_base = newss;
508 data->s_mark = newss + i;
510 newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
514 data->l_base = newvs;
515 data->l_mark = newvs + i;
517 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
518 newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps));
522 data->p_base = newps;
523 data->p_mark = newps + i;
526 data->stacksize = newsize;
527 data->s_last = data->s_base + newsize - 1;
531 fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize);
536 #if YYPURE || defined(YY_NO_LEAKS)
537 static void yyfreestack(YYSTACKDATA *data)
541 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
544 memset(data, 0, sizeof(*data));
547 #define yyfreestack(data) /* nothing */
548 #endif /* YYPURE || defined(YY_NO_LEAKS) */
551 static YYParseState *
552 yyNewState(unsigned size)
554 YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState));
555 if (p == NULL) return NULL;
557 p->yystack.stacksize = size;
560 p->yystack.s_base = NULL;
561 p->yystack.l_base = NULL;
562 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
563 p->yystack.p_base = NULL;
567 p->yystack.s_base = (YYINT *) malloc(size * sizeof(YYINT));
568 if (p->yystack.s_base == NULL) return NULL;
569 p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE));
570 if (p->yystack.l_base == NULL) return NULL;
571 memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE));
572 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
573 p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE));
574 if (p->yystack.p_base == NULL) return NULL;
575 memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE));
582 yyFreeState(YYParseState *p)
584 yyfreestack(&p->yystack);
587 #endif /* YYBTYACC */
589 #define YYABORT goto yyabort
590 #define YYREJECT goto yyabort
591 #define YYACCEPT goto yyaccept
592 #define YYERROR goto yyerrlab
594 #define YYVALID do { if (yyps->save) goto yyvalid; } while(0)
595 #define YYVALID_NESTED do { if (yyps->save && \
596 yyps->save->save == 0) goto yyvalid; } while(0)
597 #endif /* YYBTYACC */
606 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
607 YYLTYPE yyloc; /* position returned by actions */
608 YYLTYPE yylloc; /* position from the lexer */
611 /* variables for the parser stack */
615 /* Current parser state */
616 static YYParseState *yyps = 0;
618 /* yypath != NULL: do the full parse, starting at *yypath parser state. */
619 static YYParseState *yypath = 0;
621 /* Base of the lexical value queue */
622 static YYSTYPE *yylvals = 0;
624 /* Current position at lexical value queue */
625 static YYSTYPE *yylvp = 0;
627 /* End position of lexical value queue */
628 static YYSTYPE *yylve = 0;
630 /* The last allocated position at the lexical value queue */
631 static YYSTYPE *yylvlim = 0;
633 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
634 /* Base of the lexical position queue */
635 static YYLTYPE *yylpsns = 0;
637 /* Current position at lexical position queue */
638 static YYLTYPE *yylpp = 0;
640 /* End position of lexical position queue */
641 static YYLTYPE *yylpe = 0;
643 /* The last allocated position at the lexical position queue */
644 static YYLTYPE *yylplim = 0;
647 /* Current position at lexical token queue */
648 static short *yylexp = 0;
650 static short *yylexemes = 0;
651 #endif /* YYBTYACC */
652 int yym, yyn, yystate, yyresult;
655 YYParseState *yyerrctx = NULL;
656 #endif /* YYBTYACC */
657 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
658 YYLTYPE yyerror_loc_range[2]; /* position of error start & end */
663 if ((yys = getenv("YYDEBUG")) != 0)
666 if (yyn >= '0' && yyn <= '9')
670 fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX);
674 yyps = yyNewState(0); if (yyps == 0) goto yyenomem;
676 #endif /* YYBTYACC */
685 memset(&yystack, 0, sizeof(yystack));
688 if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
689 yystack.s_mark = yystack.s_base;
690 yystack.l_mark = yystack.l_base;
691 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
692 yystack.p_mark = yystack.p_base;
698 if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
705 /* we're currently re-reading tokens */
707 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
715 /* in trial mode; save scanner results for future parse attempts */
716 if (yylvp == yylvlim)
717 { /* Enlarge lexical value queue */
718 size_t p = (size_t) (yylvp - yylvals);
719 size_t s = (size_t) (yylvlim - yylvals);
721 s += YYLVQUEUEGROWTH;
722 if ((yylexemes = (short *) realloc(yylexemes, s * sizeof(short))) == NULL) goto yyenomem;
723 if ((yylvals = (YYSTYPE *) realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem;
724 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
725 if ((yylpsns = (YYLTYPE *) realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem;
727 yylvp = yylve = yylvals + p;
728 yylvlim = yylvals + s;
729 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
730 yylpp = yylpe = yylpsns + p;
731 yylplim = yylpsns + s;
733 yylexp = yylexemes + p;
735 *yylexp = (short) YYLEX;
738 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
745 /* normal operation, no conflict encountered */
746 #endif /* YYBTYACC */
750 #endif /* YYBTYACC */
751 if (yychar < 0) yychar = YYEOF;
755 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
756 fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)",
757 YYDEBUGSTR, yydepth, yystate, yychar, yys);
758 #ifdef YYSTYPE_TOSTRING
761 #endif /* YYBTYACC */
762 fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval));
770 /* Do we have a conflict? */
771 if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
772 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
781 fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n",
782 YYDEBUGSTR, yydepth, yystate);
784 /* Switch to the next conflict context */
789 if (save->state != yystate) YYABORT;
796 /* Unresolved conflict - start/continue trial parse */
801 fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate);
803 fputs("ALREADY in conflict, continuing trial parse.\n", stderr);
805 fputs("Starting trial parse.\n", stderr);
808 save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1));
809 if (save == NULL) goto yyenomem;
810 save->save = yyps->save;
811 save->state = yystate;
812 save->errflag = yyerrflag;
813 save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base);
814 memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));
815 save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base);
816 memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
817 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
818 save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base);
819 memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
822 if (yyctable[ctry] == -1)
825 if (yydebug && yychar >= YYEOF)
826 fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth);
831 if (yyps->save == NULL)
833 /* If this is a first conflict in the stack, start saving lexemes */
836 yylexemes = (short *) malloc((YYLVQUEUEGROWTH) * sizeof(short));
837 if (yylexemes == NULL) goto yyenomem;
838 yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE));
839 if (yylvals == NULL) goto yyenomem;
840 yylvlim = yylvals + YYLVQUEUEGROWTH;
841 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
842 yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE));
843 if (yylpsns == NULL) goto yyenomem;
844 yylplim = yylpsns + YYLVQUEUEGROWTH;
849 yylvp = yylve = yylvals;
850 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
851 yylpp = yylpe = yylpsns;
857 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
860 *yylexp = (short) yychar;
868 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
874 save->lexeme = (int) (yylvp - yylvals);
877 if (yytable[yyn] == ctry)
881 fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n",
882 YYDEBUGSTR, yydepth, yystate, yyctable[ctry]);
887 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
892 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
894 yystate = yyctable[ctry];
895 *++yystack.s_mark = (YYINT) yystate;
896 *++yystack.l_mark = yylval;
897 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
898 *++yystack.p_mark = yylloc;
901 if (yyerrflag > 0) --yyerrflag;
906 yyn = yyctable[ctry];
909 } /* End of code dealing with conflicts */
910 #endif /* YYBTYACC */
911 if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
912 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
916 fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n",
917 YYDEBUGSTR, yydepth, yystate, yytable[yyn]);
919 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
920 yystate = yytable[yyn];
921 *++yystack.s_mark = yytable[yyn];
922 *++yystack.l_mark = yylval;
923 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
924 *++yystack.p_mark = yylloc;
927 if (yyerrflag > 0) --yyerrflag;
930 if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
931 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
936 if (yyerrflag != 0) goto yyinrecovery;
941 goto yyerrlab; /* redundant goto avoids 'unused label' warning */
944 /* explicit YYERROR from an action -- pop the rhs of the rule reduced
945 * before looking for error recovery */
946 yystack.s_mark -= yym;
947 yystate = *yystack.s_mark;
948 yystack.l_mark -= yym;
949 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
950 yystack.p_mark -= yym;
958 YYParseState *save = yyps->save;
961 fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n",
962 YYDEBUGSTR, yydepth, yystate, yyps->save->state,
963 (int)(yylvp - yylvals - yyps->save->lexeme));
965 /* Memorize most forward-looking error state in case it's really an error. */
966 if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals)
968 /* Free old saved error context state */
969 if (yyerrctx) yyFreeState(yyerrctx);
970 /* Create and fill out new saved error context state */
971 yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1));
972 if (yyerrctx == NULL) goto yyenomem;
973 yyerrctx->save = yyps->save;
974 yyerrctx->state = yystate;
975 yyerrctx->errflag = yyerrflag;
976 yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base);
977 memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));
978 yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base);
979 memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
980 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
981 yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base);
982 memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
984 yyerrctx->lexeme = (int) (yylvp - yylvals);
986 yylvp = yylvals + save->lexeme;
987 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
988 yylpp = yylpsns + save->lexeme;
990 yylexp = yylexemes + save->lexeme;
992 yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base);
993 memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));
994 yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base);
995 memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
996 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
997 yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base);
998 memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
1000 ctry = ++save->ctry;
1001 yystate = save->state;
1002 /* We tried shift, try reduce now */
1003 if ((yyn = yyctable[ctry]) >= 0) goto yyreduce;
1004 yyps->save = save->save;
1008 /* Nothing left on the stack -- error */
1013 fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n",
1016 /* Restore state as it was in the most forward-advanced error */
1017 yylvp = yylvals + yyerrctx->lexeme;
1018 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1019 yylpp = yylpsns + yyerrctx->lexeme;
1021 yylexp = yylexemes + yyerrctx->lexeme;
1022 yychar = yylexp[-1];
1024 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1027 yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base);
1028 memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));
1029 yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base);
1030 memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
1031 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1032 yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base);
1033 memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
1035 yystate = yyerrctx->state;
1036 yyFreeState(yyerrctx);
1041 if (yynewerrflag == 0) goto yyinrecovery;
1042 #endif /* YYBTYACC */
1044 YYERROR_CALL("syntax error");
1045 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1046 yyerror_loc_range[0] = yylloc; /* lookahead position is error start position */
1050 goto yyerrlab; /* redundant goto avoids 'unused label' warning */
1061 if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 &&
1062 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE)
1066 fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n",
1067 YYDEBUGSTR, yydepth, *yystack.s_mark, yytable[yyn]);
1069 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
1070 yystate = yytable[yyn];
1071 *++yystack.s_mark = yytable[yyn];
1072 *++yystack.l_mark = yylval;
1073 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1074 /* lookahead position is error end position */
1075 yyerror_loc_range[1] = yylloc;
1076 YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */
1077 *++yystack.p_mark = yyloc;
1085 fprintf(stderr, "%s[%d]: error recovery discarding state %d\n",
1086 YYDEBUGSTR, yydepth, *yystack.s_mark);
1088 if (yystack.s_mark <= yystack.s_base) goto yyabort;
1089 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1090 /* the current TOS position is the error start position */
1091 yyerror_loc_range[0] = *yystack.p_mark;
1093 #if defined(YYDESTRUCT_CALL)
1096 #endif /* YYBTYACC */
1097 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1098 YYDESTRUCT_CALL("error: discarding state",
1099 yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark);
1101 YYDESTRUCT_CALL("error: discarding state",
1102 yystos[*yystack.s_mark], yystack.l_mark);
1103 #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
1104 #endif /* defined(YYDESTRUCT_CALL) */
1107 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1115 if (yychar == YYEOF) goto yyabort;
1119 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
1120 fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n",
1121 YYDEBUGSTR, yydepth, yystate, yychar, yys);
1124 #if defined(YYDESTRUCT_CALL)
1127 #endif /* YYBTYACC */
1128 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1129 YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc);
1131 YYDESTRUCT_CALL("error: discarding token", yychar, &yylval);
1132 #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
1133 #endif /* defined(YYDESTRUCT_CALL) */
1143 fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)",
1144 YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]);
1145 #ifdef YYSTYPE_TOSTRING
1148 #endif /* YYBTYACC */
1153 for (i = yym; i > 0; i--)
1155 if (i != yym) fputs(", ", stderr);
1156 fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]],
1157 yystack.l_mark[1-i]), stderr);
1162 fputc('\n', stderr);
1166 yyval = yystack.l_mark[1-yym];
1168 memset(&yyval, 0, sizeof yyval);
1169 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1171 /* Perform position reduction */
1172 memset(&yyloc, 0, sizeof(yyloc));
1175 #endif /* YYBTYACC */
1177 YYLLOC_DEFAULT(yyloc, &yystack.p_mark[1-yym], yym);
1178 /* just in case YYERROR is invoked within the action, save
1179 the start of the rhs as the error start position */
1180 yyerror_loc_range[0] = yystack.p_mark[1-yym];
1187 #line 34 "pure_calc.y"
1191 #line 38 "pure_calc.y"
1192 { printf("%d\n",yystack.l_mark[0]);}
1195 #line 40 "pure_calc.y"
1196 { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; }
1199 #line 44 "pure_calc.y"
1200 { yyval = yystack.l_mark[-1]; }
1203 #line 46 "pure_calc.y"
1204 { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; }
1207 #line 48 "pure_calc.y"
1208 { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; }
1211 #line 50 "pure_calc.y"
1212 { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; }
1215 #line 52 "pure_calc.y"
1216 { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; }
1219 #line 54 "pure_calc.y"
1220 { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; }
1223 #line 56 "pure_calc.y"
1224 { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; }
1227 #line 58 "pure_calc.y"
1228 { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; }
1231 #line 60 "pure_calc.y"
1232 { yyval = - yystack.l_mark[0]; }
1235 #line 62 "pure_calc.y"
1236 { yyval = regs[yystack.l_mark[0]]; }
1239 #line 67 "pure_calc.y"
1240 { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; }
1243 #line 69 "pure_calc.y"
1244 { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; }
1246 #line 1247 "pure_calc.tab.c"
1250 yystack.s_mark -= yym;
1251 yystate = *yystack.s_mark;
1252 yystack.l_mark -= yym;
1253 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1254 yystack.p_mark -= yym;
1257 if (yystate == 0 && yym == 0)
1262 fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth);
1263 #ifdef YYSTYPE_TOSTRING
1266 #endif /* YYBTYACC */
1267 fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval));
1269 fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL);
1273 *++yystack.s_mark = YYFINAL;
1274 *++yystack.l_mark = yyval;
1275 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1276 *++yystack.p_mark = yyloc;
1284 /* we're currently re-reading tokens */
1286 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1294 /* in trial mode; save scanner results for future parse attempts */
1295 if (yylvp == yylvlim)
1296 { /* Enlarge lexical value queue */
1297 size_t p = (size_t) (yylvp - yylvals);
1298 size_t s = (size_t) (yylvlim - yylvals);
1300 s += YYLVQUEUEGROWTH;
1301 if ((yylexemes = (short *) realloc(yylexemes, s * sizeof(short))) == NULL)
1303 if ((yylvals = (YYSTYPE *) realloc(yylvals, s * sizeof(YYSTYPE))) == NULL)
1305 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1306 if ((yylpsns = (YYLTYPE *) realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL)
1309 yylvp = yylve = yylvals + p;
1310 yylvlim = yylvals + s;
1311 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1312 yylpp = yylpe = yylpsns + p;
1313 yylplim = yylpsns + s;
1315 yylexp = yylexemes + p;
1317 *yylexp = (short) YYLEX;
1320 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1327 /* normal operation, no conflict encountered */
1328 #endif /* YYBTYACC */
1332 #endif /* YYBTYACC */
1333 if (yychar < 0) yychar = YYEOF;
1337 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
1338 fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)\n",
1339 YYDEBUGSTR, yydepth, YYFINAL, yychar, yys);
1343 if (yychar == YYEOF) goto yyaccept;
1346 if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 &&
1347 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate)
1348 yystate = yytable[yyn];
1350 yystate = yydgoto[yym];
1354 fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth);
1355 #ifdef YYSTYPE_TOSTRING
1358 #endif /* YYBTYACC */
1359 fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval));
1361 fprintf(stderr, "shifting from state %d to state %d\n", *yystack.s_mark, yystate);
1364 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
1365 *++yystack.s_mark = (YYINT) yystate;
1366 *++yystack.l_mark = yyval;
1367 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1368 *++yystack.p_mark = yyloc;
1373 /* Reduction declares that this path is valid. Set yypath and do a full parse */
1375 if (yypath) YYABORT;
1378 YYParseState *save = yyps->save;
1379 yyps->save = save->save;
1380 save->save = yypath;
1385 fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n",
1386 YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme));
1390 yyFreeState(yyerrctx);
1393 yylvp = yylvals + yypath->lexeme;
1394 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1395 yylpp = yylpsns + yypath->lexeme;
1397 yylexp = yylexemes + yypath->lexeme;
1399 yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base);
1400 memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));
1401 yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base);
1402 memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
1403 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1404 yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base);
1405 memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
1407 yystate = yypath->state;
1409 #endif /* YYBTYACC */
1412 YYERROR_CALL("yacc stack overflow");
1416 YYERROR_CALL("memory exhausted");
1418 #endif /* YYBTYACC */
1428 if (yyps->save) goto yyvalid;
1429 #endif /* YYBTYACC */
1433 #if defined(YYDESTRUCT_CALL)
1434 if (yychar != YYEOF && yychar != YYEMPTY)
1435 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1436 YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc);
1438 YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval);
1439 #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
1443 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1446 for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp)
1447 YYDESTRUCT_CALL("cleanup: discarding state",
1448 yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp);
1450 for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv)
1451 YYDESTRUCT_CALL("cleanup: discarding state",
1452 yystos[*(yystack.s_base + (pv - yystack.l_base))], pv);
1453 #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
1455 #endif /* defined(YYDESTRUCT_CALL) */
1460 yyFreeState(yyerrctx);
1465 YYParseState *save = yyps;
1472 YYParseState *save = yypath;
1473 yypath = save->save;
1477 #endif /* YYBTYACC */
1478 yyfreestack(&yystack);