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 calc1_parse
25 #define yylex calc1_lex
29 #define yyerror calc1_error
33 #define yychar calc1_char
37 #define yyval calc1_val
41 #define yylval calc1_lval
45 #define yydebug calc1_debug
49 #define yynerrs calc1_nerrs
53 #define yyerrflag calc1_errflag
54 #endif /* yyerrflag */
57 #define yylhs calc1_lhs
61 #define yylen calc1_len
65 #define yydefred calc1_defred
69 #define yystos calc1_stos
73 #define yydgoto calc1_dgoto
77 #define yysindex calc1_sindex
81 #define yyrindex calc1_rindex
85 #define yygindex calc1_gindex
89 #define yytable calc1_table
93 #define yycheck calc1_check
97 #define yyname calc1_name
101 #define yyrule calc1_rule
107 #define yycindex calc1_cindex
108 #endif /* yycindex */
111 #define yyctable calc1_ctable
112 #endif /* yyctable */
114 #endif /* YYBTYACC */
116 #define YYPREFIX "calc1_"
122 /* http://dinosaur.compilertools.net/yacc/index.html */
129 typedef struct interval
135 INTERVAL vmul(double, double, INTERVAL);
136 INTERVAL vdiv(double, double, INTERVAL);
138 extern int yylex(void);
139 static void yyerror(const char *s);
141 int dcheck(INTERVAL);
148 #undef YYSTYPE_IS_DECLARED
149 #define YYSTYPE_IS_DECLARED 1
151 #ifndef YYSTYPE_IS_DECLARED
152 #define YYSTYPE_IS_DECLARED 1
159 #endif /* !YYSTYPE_IS_DECLARED */
160 #line 161 "calc1.tab.c"
162 /* compatibility with bison */
164 /* compatibility with FreeBSD */
165 # ifdef YYPARSE_PARAM_TYPE
166 # define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
168 # define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
171 # define YYPARSE_DECL() yyparse(void)
174 /* Parameters sent to lex. */
176 # define YYLEX_DECL() yylex(void *YYLEX_PARAM)
177 # define YYLEX yylex(YYLEX_PARAM)
179 # define YYLEX_DECL() yylex(void)
180 # define YYLEX yylex()
183 /* Parameters sent to yyerror. */
185 #define YYERROR_DECL() yyerror(const char *s)
188 #define YYERROR_CALL(msg) yyerror(msg)
191 extern int YYPARSE_DECL();
197 #define YYERRCODE 256
199 static const YYINT calc1_lhs[] = { -1,
200 3, 3, 0, 0, 0, 0, 0, 1, 1, 1,
201 1, 1, 1, 1, 1, 2, 2, 2, 2, 2,
202 2, 2, 2, 2, 2, 2, 2, 2,
204 static const YYINT calc1_len[] = { 2,
205 0, 2, 2, 2, 4, 4, 2, 1, 1, 3,
206 3, 3, 3, 2, 3, 1, 5, 1, 3, 3,
207 3, 3, 3, 3, 3, 3, 2, 3,
209 static const YYINT calc1_defred[] = { 0,
210 0, 0, 0, 8, 0, 0, 0, 0, 0, 7,
211 0, 0, 9, 18, 14, 27, 0, 0, 0, 0,
212 0, 0, 3, 0, 0, 0, 0, 4, 0, 0,
213 0, 0, 0, 15, 0, 28, 0, 0, 0, 0,
214 12, 24, 13, 26, 0, 0, 23, 25, 14, 0,
215 0, 0, 0, 0, 5, 6, 0, 0, 0, 12,
218 static const YYINT calc1_stos[] = { 0,
219 256, 257, 258, 259, 45, 40, 262, 263, 264, 10,
220 61, 61, 257, 258, 263, 264, 263, 264, 43, 45,
221 42, 47, 10, 43, 45, 42, 47, 10, 45, 40,
222 263, 263, 264, 41, 44, 41, 263, 264, 263, 264,
223 263, 264, 263, 264, 264, 264, 264, 264, 263, 263,
224 43, 45, 42, 47, 10, 10, 263, 263, 263, 263,
227 static const YYINT calc1_dgoto[] = { 7,
230 static const YYINT calc1_sindex[] = { -40,
231 -8, -48, -47, 0, -37, -37, 0, 2, 17, 0,
232 -34, -37, 0, 0, 0, 0, -25, 90, -37, -37,
233 -37, -37, 0, -37, -37, -37, -37, 0, -34, -34,
234 25, 125, 31, 0, -34, 0, -11, 37, -11, 37,
235 0, 0, 0, 0, 37, 37, 0, 0, 0, 111,
236 -34, -34, -34, -34, 0, 0, 118, 69, 69, 0,
239 static const YYINT calc1_rindex[] = { 0,
240 0, 38, 44, 0, 0, 0, 0, 0, 0, 0,
241 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
242 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
243 0, -9, 0, 0, 0, 0, 51, -3, 56, 61,
244 0, 0, 0, 0, 67, 72, 0, 0, 0, 0,
245 0, 0, 0, 0, 0, 0, 0, 78, 83, 0,
249 static const YYINT calc1_cindex[] = { 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, 0, 0, 0, 0, 0,
259 static const YYINT calc1_gindex[] = { 0,
262 #define YYTABLESIZE 225
263 static const YYINT calc1_table[] = { 6,
264 16, 10, 6, 8, 5, 30, 20, 5, 15, 17,
265 29, 23, 11, 12, 31, 34, 21, 19, 35, 20,
266 0, 22, 37, 39, 41, 43, 28, 0, 0, 0,
267 21, 16, 49, 50, 55, 22, 0, 20, 57, 20,
268 56, 20, 0, 21, 19, 0, 20, 9, 22, 0,
269 0, 0, 0, 18, 58, 59, 60, 61, 26, 24,
270 10, 25, 0, 27, 0, 11, 53, 51, 0, 52,
271 22, 54, 26, 24, 0, 25, 19, 27, 26, 9,
272 9, 21, 9, 27, 9, 18, 18, 10, 18, 0,
273 18, 10, 11, 10, 10, 10, 11, 0, 11, 11,
274 11, 22, 0, 22, 0, 22, 0, 19, 0, 19,
275 53, 19, 21, 0, 21, 54, 21, 0, 10, 0,
276 10, 0, 10, 11, 0, 11, 0, 11, 16, 18,
277 36, 26, 24, 0, 25, 33, 27, 0, 0, 0,
278 0, 0, 38, 40, 42, 44, 0, 45, 46, 47,
279 48, 34, 53, 51, 0, 52, 0, 54, 62, 53,
280 51, 0, 52, 0, 54, 0, 21, 19, 0, 20,
281 0, 22, 0, 0, 0, 0, 0, 0, 0, 0,
282 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
283 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
284 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
285 0, 0, 0, 0, 0, 1, 2, 3, 4, 13,
288 static const YYINT calc1_check[] = { 40,
289 10, 10, 40, 0, 45, 40, 10, 45, 5, 6,
290 45, 10, 61, 61, 11, 41, 42, 43, 44, 45,
291 -1, 47, 19, 20, 21, 22, 10, -1, -1, -1,
292 42, 41, 29, 30, 10, 47, -1, 41, 35, 43,
293 10, 45, -1, 42, 43, -1, 45, 10, 47, -1,
294 -1, -1, -1, 10, 51, 52, 53, 54, 42, 43,
295 10, 45, -1, 47, -1, 10, 42, 43, -1, 45,
296 10, 47, 42, 43, -1, 45, 10, 47, 42, 42,
297 43, 10, 45, 47, 47, 42, 43, 10, 45, -1,
298 47, 41, 10, 43, 44, 45, 41, -1, 43, 44,
299 45, 41, -1, 43, -1, 45, -1, 41, -1, 43,
300 42, 45, 41, -1, 43, 47, 45, -1, 41, -1,
301 43, -1, 45, 41, -1, 43, -1, 45, 5, 6,
302 41, 42, 43, -1, 45, 12, 47, -1, -1, -1,
303 -1, -1, 19, 20, 21, 22, -1, 24, 25, 26,
304 27, 41, 42, 43, -1, 45, -1, 47, 41, 42,
305 43, -1, 45, -1, 47, -1, 42, 43, -1, 45,
306 -1, 47, -1, -1, -1, -1, -1, -1, -1, -1,
307 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
308 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
309 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
310 -1, -1, -1, -1, -1, 256, 257, 258, 259, 257,
311 258, 259, 257, -1, 259,
317 #define YYMAXTOKEN 260
318 #define YYUNDFTOKEN 266
319 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))
321 static const char *const calc1_name[] = {
323 "$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,
324 0,0,0,0,0,0,"'('","')'","'*'","'+'","','","'-'",0,"'/'",0,0,0,0,0,0,0,0,0,0,0,0,
325 0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
326 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
327 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
328 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
329 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
330 "error","DREG","VREG","CONST","UMINUS","$accept","line","dexp","vexp","lines",
333 static const char *const calc1_rule[] = {
336 "lines : lines line",
339 "line : DREG '=' dexp '\\n'",
340 "line : VREG '=' vexp '\\n'",
341 "line : error '\\n'",
344 "dexp : dexp '+' dexp",
345 "dexp : dexp '-' dexp",
346 "dexp : dexp '*' dexp",
347 "dexp : dexp '/' dexp",
349 "dexp : '(' dexp ')'",
351 "vexp : '(' dexp ',' dexp ')'",
353 "vexp : vexp '+' vexp",
354 "vexp : dexp '+' vexp",
355 "vexp : vexp '-' vexp",
356 "vexp : dexp '-' vexp",
357 "vexp : vexp '*' vexp",
358 "vexp : dexp '*' vexp",
359 "vexp : vexp '/' vexp",
360 "vexp : dexp '/' vexp",
362 "vexp : '(' vexp ')'",
374 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
375 YYLTYPE yyloc; /* position returned by actions */
376 YYLTYPE yylloc; /* position from the lexer */
379 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
380 #ifndef YYLLOC_DEFAULT
381 #define YYLLOC_DEFAULT(loc, rhs, n) \
386 (loc).first_line = ((rhs)[-1]).last_line; \
387 (loc).first_column = ((rhs)[-1]).last_column; \
388 (loc).last_line = ((rhs)[-1]).last_line; \
389 (loc).last_column = ((rhs)[-1]).last_column; \
393 (loc).first_line = ((rhs)[ 0 ]).first_line; \
394 (loc).first_column = ((rhs)[ 0 ]).first_column; \
395 (loc).last_line = ((rhs)[n-1]).last_line; \
396 (loc).last_column = ((rhs)[n-1]).last_column; \
399 #endif /* YYLLOC_DEFAULT */
400 #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
403 #ifndef YYLVQUEUEGROWTH
404 #define YYLVQUEUEGROWTH 32
406 #endif /* YYBTYACC */
408 /* define the initial stack-sizes */
411 #define YYMAXDEPTH YYSTACKSIZE
414 #define YYSTACKSIZE YYMAXDEPTH
416 #define YYSTACKSIZE 10000
417 #define YYMAXDEPTH 10000
421 #ifndef YYINITSTACKSIZE
422 #define YYINITSTACKSIZE 200
432 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
439 struct YYParseState_s
441 struct YYParseState_s *save; /* Previously saved parser state */
442 YYSTACKDATA yystack; /* saved parser stack */
443 int state; /* saved parser state */
444 int errflag; /* saved error recovery status */
445 int lexeme; /* saved index of the conflict lexeme in the lexical queue */
446 YYINT ctry; /* saved index in yyctable[] for this conflict */
448 typedef struct YYParseState_s YYParseState;
449 #endif /* YYBTYACC */
450 /* variables for the parser stack */
451 static YYSTACKDATA yystack;
454 /* Current parser state */
455 static YYParseState *yyps = 0;
457 /* yypath != NULL: do the full parse, starting at *yypath parser state. */
458 static YYParseState *yypath = 0;
460 /* Base of the lexical value queue */
461 static YYSTYPE *yylvals = 0;
463 /* Current position at lexical value queue */
464 static YYSTYPE *yylvp = 0;
466 /* End position of lexical value queue */
467 static YYSTYPE *yylve = 0;
469 /* The last allocated position at the lexical value queue */
470 static YYSTYPE *yylvlim = 0;
472 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
473 /* Base of the lexical position queue */
474 static YYLTYPE *yylpsns = 0;
476 /* Current position at lexical position queue */
477 static YYLTYPE *yylpp = 0;
479 /* End position of lexical position queue */
480 static YYLTYPE *yylpe = 0;
482 /* The last allocated position at the lexical position queue */
483 static YYLTYPE *yylplim = 0;
486 /* Current position at lexical token queue */
487 static short *yylexp = 0;
489 static short *yylexemes = 0;
490 #endif /* YYBTYACC */
492 /* beginning of subroutines section */
494 #define BSZ 50 /* buffer size for floating point numbers */
496 /* lexical analysis */
499 yyerror(const char *s)
501 fprintf(stderr, "%s\n", s);
509 while ((c = getchar()) == ' ')
510 { /* skip over blanks */
515 yylval.ival = c - 'A';
520 yylval.ival = c - 'a';
524 if (isdigit(c) || c == '.')
526 /* gobble up digits, points, exponents */
527 char buf[BSZ + 1], *cp = buf;
528 int dot = 0, expr = 0;
530 for (; (cp - buf) < BSZ; ++cp, c = getchar())
539 return ('.'); /* will cause syntax error */
546 return ('e'); /* will cause syntax error */
555 if ((cp - buf) >= BSZ)
556 printf("constant too long: truncated\n");
558 ungetc(c, stdin); /* push back last char read */
559 yylval.dval = atof(buf);
566 hilo(double a, double b, double c, double d)
568 /* returns the smallest interval containing a, b, c, and d */
569 /* used by *, / routines */
601 vmul(double a, double b, INTERVAL v)
603 return (hilo(a * v.hi, a * v.lo, b * v.hi, b * v.lo));
609 if (v.hi >= 0. && v.lo <= 0.)
611 printf("divisor interval contains 0.\n");
618 vdiv(double a, double b, INTERVAL v)
620 return (hilo(a / v.hi, a / v.lo, b / v.hi, b / v.lo));
622 #line 623 "calc1.tab.c"
624 /* For use in generated program */
625 #define yydepth (int)(yystack.s_mark - yystack.s_base)
627 #define yytrial (yyps->save)
628 #endif /* YYBTYACC */
631 #include <stdio.h> /* needed for printf */
634 #include <stdlib.h> /* needed for malloc, etc */
635 #include <string.h> /* needed for memset */
637 /* allocate initial stack or double stack size, up to YYMAXDEPTH */
638 static int yygrowstack(YYSTACKDATA *data)
644 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
648 if ((newsize = data->stacksize) == 0)
649 newsize = YYINITSTACKSIZE;
650 else if (newsize >= YYMAXDEPTH)
652 else if ((newsize *= 2) > YYMAXDEPTH)
653 newsize = YYMAXDEPTH;
655 i = (int) (data->s_mark - data->s_base);
656 newss = (short *)realloc(data->s_base, newsize * sizeof(*newss));
660 data->s_base = newss;
661 data->s_mark = newss + i;
663 newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
667 data->l_base = newvs;
668 data->l_mark = newvs + i;
670 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
671 newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps));
675 data->p_base = newps;
676 data->p_mark = newps + i;
679 data->stacksize = newsize;
680 data->s_last = data->s_base + newsize - 1;
684 fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize);
689 #if YYPURE || defined(YY_NO_LEAKS)
690 static void yyfreestack(YYSTACKDATA *data)
694 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
697 memset(data, 0, sizeof(*data));
700 #define yyfreestack(data) /* nothing */
701 #endif /* YYPURE || defined(YY_NO_LEAKS) */
704 static YYParseState *
705 yyNewState(unsigned size)
707 YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState));
708 if (p == NULL) return NULL;
710 p->yystack.stacksize = size;
713 p->yystack.s_base = NULL;
714 p->yystack.l_base = NULL;
715 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
716 p->yystack.p_base = NULL;
720 p->yystack.s_base = (short *) malloc(size * sizeof(short));
721 if (p->yystack.s_base == NULL) return NULL;
722 p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE));
723 if (p->yystack.l_base == NULL) return NULL;
724 memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE));
725 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
726 p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE));
727 if (p->yystack.p_base == NULL) return NULL;
728 memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE));
735 yyFreeState(YYParseState *p)
737 yyfreestack(&p->yystack);
740 #endif /* YYBTYACC */
742 #define YYABORT goto yyabort
743 #define YYREJECT goto yyabort
744 #define YYACCEPT goto yyaccept
745 #define YYERROR goto yyerrlab
747 #define YYVALID do { if (yyps->save) goto yyvalid; } while(0)
748 #define YYVALID_NESTED do { if (yyps->save && \
749 yyps->save->save == 0) goto yyvalid; } while(0)
750 #endif /* YYBTYACC */
755 int yym, yyn, yystate, yyresult;
758 YYParseState *yyerrctx = NULL;
759 #endif /* YYBTYACC */
760 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
761 YYLTYPE yyerror_loc_range[2]; /* position of error start & end */
766 if ((yys = getenv("YYDEBUG")) != 0)
769 if (yyn >= '0' && yyn <= '9')
773 fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX);
777 yyps = yyNewState(0); if (yyps == 0) goto yyenomem;
779 #endif /* YYBTYACC */
786 memset(&yystack, 0, sizeof(yystack));
789 if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
790 yystack.s_mark = yystack.s_base;
791 yystack.l_mark = yystack.l_base;
792 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
793 yystack.p_mark = yystack.p_base;
799 if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
806 /* we're currently re-reading tokens */
808 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
816 /* in trial mode; save scanner results for future parse attempts */
817 if (yylvp == yylvlim)
818 { /* Enlarge lexical value queue */
819 int p = yylvp - yylvals;
820 int s = yylvlim - yylvals;
822 s += YYLVQUEUEGROWTH;
823 if ((yylexemes = (short *) realloc(yylexemes, s * sizeof(short))) == NULL) goto yyenomem;
824 if ((yylvals = (YYSTYPE *) realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem;
825 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
826 if ((yylpsns = (YYLTYPE *) realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem;
828 yylvp = yylve = yylvals + p;
829 yylvlim = yylvals + s;
830 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
831 yylpp = yylpe = yylpsns + p;
832 yylplim = yylpsns + s;
834 yylexp = yylexemes + p;
836 *yylexp = (short) YYLEX;
839 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
846 /* normal operation, no conflict encountered */
847 #endif /* YYBTYACC */
851 #endif /* YYBTYACC */
852 if (yychar < 0) yychar = YYEOF;
853 /* if ((yychar = YYLEX) < 0) yychar = YYEOF; */
857 yys = yyname[YYTRANSLATE(yychar)];
858 fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)",
859 YYDEBUGSTR, yydepth, yystate, yychar, yys);
860 #ifdef YYSTYPE_TOSTRING
863 #endif /* YYBTYACC */
864 fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval));
872 /* Do we have a conflict? */
873 if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
874 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
883 fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n",
884 YYDEBUGSTR, yydepth, yystate);
886 /* Switch to the next conflict context */
891 if (save->state != yystate) YYABORT;
898 /* Unresolved conflict - start/continue trial parse */
903 fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate);
905 fputs("ALREADY in conflict, continuing trial parse.\n", stderr);
907 fputs("Starting trial parse.\n", stderr);
910 save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1));
911 if (save == NULL) goto yyenomem;
912 save->save = yyps->save;
913 save->state = yystate;
914 save->errflag = yyerrflag;
915 save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base);
916 memcpy (save->yystack.s_base, yystack.s_base, (yystack.s_mark - yystack.s_base + 1) * sizeof(short));
917 save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base);
918 memcpy (save->yystack.l_base, yystack.l_base, (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
919 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
920 save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base);
921 memcpy (save->yystack.p_base, yystack.p_base, (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
924 if (yyctable[ctry] == -1)
927 if (yydebug && yychar >= YYEOF)
928 fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth);
933 if (yyps->save == NULL)
935 /* If this is a first conflict in the stack, start saving lexemes */
938 yylexemes = (short *) malloc((YYLVQUEUEGROWTH) * sizeof(short));
939 if (yylexemes == NULL) goto yyenomem;
940 yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE));
941 if (yylvals == NULL) goto yyenomem;
942 yylvlim = yylvals + YYLVQUEUEGROWTH;
943 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
944 yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE));
945 if (yylpsns == NULL) goto yyenomem;
946 yylplim = yylpsns + YYLVQUEUEGROWTH;
951 yylvp = yylve = yylvals;
952 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
953 yylpp = yylpe = yylpsns;
959 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
962 *yylexp = (short) yychar;
970 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
976 save->lexeme = yylvp - yylvals;
979 if (yytable[yyn] == ctry)
983 fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n",
984 YYDEBUGSTR, yydepth, yystate, yyctable[ctry]);
989 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
994 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
996 yystate = yyctable[ctry];
997 *++yystack.s_mark = (short) yystate;
998 *++yystack.l_mark = yylval;
999 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1000 *++yystack.p_mark = yylloc;
1003 if (yyerrflag > 0) --yyerrflag;
1008 yyn = yyctable[ctry];
1011 } /* End of code dealing with conflicts */
1012 #endif /* YYBTYACC */
1013 if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
1014 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
1018 fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n",
1019 YYDEBUGSTR, yydepth, yystate, yytable[yyn]);
1021 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
1022 yystate = yytable[yyn];
1023 *++yystack.s_mark = yytable[yyn];
1024 *++yystack.l_mark = yylval;
1025 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1026 *++yystack.p_mark = yylloc;
1029 if (yyerrflag > 0) --yyerrflag;
1032 if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
1033 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
1038 if (yyerrflag != 0) goto yyinrecovery;
1051 YYParseState *save = yyps->save;
1054 fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n",
1055 YYDEBUGSTR, yydepth, yystate, yyps->save->state,
1056 (int)(yylvp - yylvals - yyps->save->lexeme));
1058 /* Memorize most forward-looking error state in case it's really an error. */
1059 if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals)
1061 /* Free old saved error context state */
1062 if (yyerrctx) yyFreeState(yyerrctx);
1063 /* Create and fill out new saved error context state */
1064 yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1));
1065 if (yyerrctx == NULL) goto yyenomem;
1066 yyerrctx->save = yyps->save;
1067 yyerrctx->state = yystate;
1068 yyerrctx->errflag = yyerrflag;
1069 yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base);
1070 memcpy (yyerrctx->yystack.s_base, yystack.s_base, (yystack.s_mark - yystack.s_base + 1) * sizeof(short));
1071 yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base);
1072 memcpy (yyerrctx->yystack.l_base, yystack.l_base, (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
1073 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1074 yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base);
1075 memcpy (yyerrctx->yystack.p_base, yystack.p_base, (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
1077 yyerrctx->lexeme = yylvp - yylvals;
1079 yylvp = yylvals + save->lexeme;
1080 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1081 yylpp = yylpsns + save->lexeme;
1083 yylexp = yylexemes + save->lexeme;
1085 yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base);
1086 memcpy (yystack.s_base, save->yystack.s_base, (yystack.s_mark - yystack.s_base + 1) * sizeof(short));
1087 yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base);
1088 memcpy (yystack.l_base, save->yystack.l_base, (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
1089 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1090 yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base);
1091 memcpy (yystack.p_base, save->yystack.p_base, (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
1093 ctry = ++save->ctry;
1094 yystate = save->state;
1095 /* We tried shift, try reduce now */
1096 if ((yyn = yyctable[ctry]) >= 0) goto yyreduce;
1097 yyps->save = save->save;
1101 /* Nothing left on the stack -- error */
1106 fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n",
1109 /* Restore state as it was in the most forward-advanced error */
1110 yylvp = yylvals + yyerrctx->lexeme;
1111 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1112 yylpp = yylpsns + yyerrctx->lexeme;
1114 yylexp = yylexemes + yyerrctx->lexeme;
1115 yychar = yylexp[-1];
1117 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1120 yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base);
1121 memcpy (yystack.s_base, yyerrctx->yystack.s_base, (yystack.s_mark - yystack.s_base + 1) * sizeof(short));
1122 yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base);
1123 memcpy (yystack.l_base, yyerrctx->yystack.l_base, (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
1124 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1125 yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base);
1126 memcpy (yystack.p_base, yyerrctx->yystack.p_base, (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
1128 yystate = yyerrctx->state;
1129 yyFreeState(yyerrctx);
1134 if (yynewerrflag == 0) goto yyinrecovery;
1135 #endif /* YYBTYACC */
1137 YYERROR_CALL("syntax error");
1138 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1139 yyerror_loc_range[0] = yylloc; /* lookahead position is error start position */
1154 if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 &&
1155 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE)
1159 fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n",
1160 YYDEBUGSTR, yydepth, *yystack.s_mark, yytable[yyn]);
1162 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
1163 yystate = yytable[yyn];
1164 *++yystack.s_mark = yytable[yyn];
1165 *++yystack.l_mark = yylval;
1166 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1167 /* lookahead position is error end position */
1168 yyerror_loc_range[1] = yylloc;
1169 YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */
1170 *++yystack.p_mark = yyloc;
1178 fprintf(stderr, "%s[%d]: error recovery discarding state %d\n",
1179 YYDEBUGSTR, yydepth, *yystack.s_mark);
1181 if (yystack.s_mark <= yystack.s_base) goto yyabort;
1182 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1183 /* the current TOS position is the error start position */
1184 yyerror_loc_range[0] = *yystack.p_mark;
1186 #if defined(YYDESTRUCT_CALL)
1189 #endif /* YYBTYACC */
1190 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1191 YYDESTRUCT_CALL("error: discarding state",
1192 yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark);
1194 YYDESTRUCT_CALL("error: discarding state",
1195 yystos[*yystack.s_mark], yystack.l_mark);
1196 #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
1197 #endif /* defined(YYDESTRUCT_CALL) */
1200 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1208 if (yychar == YYEOF) goto yyabort;
1212 yys = yyname[YYTRANSLATE(yychar)];
1213 fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n",
1214 YYDEBUGSTR, yydepth, yystate, yychar, yys);
1217 #if defined(YYDESTRUCT_CALL)
1220 #endif /* YYBTYACC */
1221 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1222 YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc);
1224 YYDESTRUCT_CALL("error: discarding token", yychar, &yylval);
1225 #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
1226 #endif /* defined(YYDESTRUCT_CALL) */
1236 fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)",
1237 YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]);
1238 #ifdef YYSTYPE_TOSTRING
1241 #endif /* YYBTYACC */
1246 for (i = yym; i > 0; i--)
1248 if (i != yym) fputs(", ", stderr);
1249 fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]],
1250 yystack.l_mark[1-i]), stderr);
1255 fputc('\n', stderr);
1259 yyval = yystack.l_mark[1-yym];
1261 memset(&yyval, 0, sizeof yyval);
1262 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1264 /* Perform position reduction */
1265 memset(&yyloc, 0, sizeof(yyloc));
1268 #endif /* YYBTYACC */
1270 YYLLOC_DEFAULT(yyloc, &yystack.p_mark[1-yym], yym);
1271 /* just in case YYERROR is invoked within the action, save
1272 the start of the rhs as the error start position */
1273 yyerror_loc_range[0] = yystack.p_mark[1-yym];
1282 (void) printf("%15.8f\n", yystack.l_mark[-1].dval);
1288 (void) printf("(%15.8f, %15.8f)\n", yystack.l_mark[-1].vval.lo, yystack.l_mark[-1].vval.hi);
1294 dreg[yystack.l_mark[-3].ival] = yystack.l_mark[-1].dval;
1300 vreg[yystack.l_mark[-3].ival] = yystack.l_mark[-1].vval;
1312 yyval.dval = dreg[yystack.l_mark[0].ival];
1318 yyval.dval = yystack.l_mark[-2].dval + yystack.l_mark[0].dval;
1324 yyval.dval = yystack.l_mark[-2].dval - yystack.l_mark[0].dval;
1330 yyval.dval = yystack.l_mark[-2].dval * yystack.l_mark[0].dval;
1336 yyval.dval = yystack.l_mark[-2].dval / yystack.l_mark[0].dval;
1342 yyval.dval = -yystack.l_mark[0].dval;
1348 yyval.dval = yystack.l_mark[-1].dval;
1354 yyval.vval.hi = yyval.vval.lo = yystack.l_mark[0].dval;
1360 yyval.vval.lo = yystack.l_mark[-3].dval;
1361 yyval.vval.hi = yystack.l_mark[-1].dval;
1362 if ( yyval.vval.lo > yyval.vval.hi )
1364 (void) printf("interval out of order\n");
1372 yyval.vval = vreg[yystack.l_mark[0].ival];
1378 yyval.vval.hi = yystack.l_mark[-2].vval.hi + yystack.l_mark[0].vval.hi;
1379 yyval.vval.lo = yystack.l_mark[-2].vval.lo + yystack.l_mark[0].vval.lo;
1385 yyval.vval.hi = yystack.l_mark[-2].dval + yystack.l_mark[0].vval.hi;
1386 yyval.vval.lo = yystack.l_mark[-2].dval + yystack.l_mark[0].vval.lo;
1392 yyval.vval.hi = yystack.l_mark[-2].vval.hi - yystack.l_mark[0].vval.lo;
1393 yyval.vval.lo = yystack.l_mark[-2].vval.lo - yystack.l_mark[0].vval.hi;
1399 yyval.vval.hi = yystack.l_mark[-2].dval - yystack.l_mark[0].vval.lo;
1400 yyval.vval.lo = yystack.l_mark[-2].dval - yystack.l_mark[0].vval.hi;
1406 yyval.vval = vmul( yystack.l_mark[-2].vval.lo, yystack.l_mark[-2].vval.hi, yystack.l_mark[0].vval );
1412 yyval.vval = vmul (yystack.l_mark[-2].dval, yystack.l_mark[-2].dval, yystack.l_mark[0].vval );
1418 if (dcheck(yystack.l_mark[0].vval)) YYERROR;
1419 yyval.vval = vdiv ( yystack.l_mark[-2].vval.lo, yystack.l_mark[-2].vval.hi, yystack.l_mark[0].vval );
1425 if (dcheck ( yystack.l_mark[0].vval )) YYERROR;
1426 yyval.vval = vdiv (yystack.l_mark[-2].dval, yystack.l_mark[-2].dval, yystack.l_mark[0].vval );
1432 yyval.vval.hi = -yystack.l_mark[0].vval.lo;
1433 yyval.vval.lo = -yystack.l_mark[0].vval.hi;
1439 yyval.vval = yystack.l_mark[-1].vval;
1442 #line 1443 "calc1.tab.c"
1446 yystack.s_mark -= yym;
1447 yystate = *yystack.s_mark;
1448 yystack.l_mark -= yym;
1449 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1450 yystack.p_mark -= yym;
1453 if (yystate == 0 && yym == 0)
1458 fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth);
1459 #ifdef YYSTYPE_TOSTRING
1462 #endif /* YYBTYACC */
1463 fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval));
1465 fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL);
1469 *++yystack.s_mark = YYFINAL;
1470 *++yystack.l_mark = yyval;
1471 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1472 *++yystack.p_mark = yyloc;
1480 /* we're currently re-reading tokens */
1482 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1490 /* in trial mode; save scanner results for future parse attempts */
1491 if (yylvp == yylvlim)
1492 { /* Enlarge lexical value queue */
1493 int p = yylvp - yylvals;
1494 int s = yylvlim - yylvals;
1496 s += YYLVQUEUEGROWTH;
1497 if ((yylexemes = (short *) realloc(yylexemes, s * sizeof(short))) == NULL)
1499 if ((yylvals = (YYSTYPE *) realloc(yylvals, s * sizeof(YYSTYPE))) == NULL)
1501 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1502 if ((yylpsns = (YYLTYPE *) realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL)
1505 yylvp = yylve = yylvals + p;
1506 yylvlim = yylvals + s;
1507 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1508 yylpp = yylpe = yylpsns + p;
1509 yylplim = yylpsns + s;
1511 yylexp = yylexemes + p;
1513 *yylexp = (short) YYLEX;
1516 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1523 /* normal operation, no conflict encountered */
1524 #endif /* YYBTYACC */
1528 #endif /* YYBTYACC */
1529 if (yychar < 0) yychar = YYEOF;
1530 /* if ((yychar = YYLEX) < 0) yychar = YYEOF; */
1534 yys = yyname[YYTRANSLATE(yychar)];
1535 fprintf(stderr, "%s[%d]: state %d, reading %d (%s)\n",
1536 YYDEBUGSTR, yydepth, YYFINAL, yychar, yys);
1540 if (yychar == YYEOF) goto yyaccept;
1543 if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 &&
1544 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate)
1545 yystate = yytable[yyn];
1547 yystate = yydgoto[yym];
1551 fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth);
1552 #ifdef YYSTYPE_TOSTRING
1555 #endif /* YYBTYACC */
1556 fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval));
1558 fprintf(stderr, "shifting from state %d to state %d\n", *yystack.s_mark, yystate);
1561 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
1562 *++yystack.s_mark = (short) yystate;
1563 *++yystack.l_mark = yyval;
1564 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1565 *++yystack.p_mark = yyloc;
1570 /* Reduction declares that this path is valid. Set yypath and do a full parse */
1572 if (yypath) YYABORT;
1575 YYParseState *save = yyps->save;
1576 yyps->save = save->save;
1577 save->save = yypath;
1582 fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n",
1583 YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme));
1587 yyFreeState(yyerrctx);
1590 yylvp = yylvals + yypath->lexeme;
1591 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1592 yylpp = yylpsns + yypath->lexeme;
1594 yylexp = yylexemes + yypath->lexeme;
1596 yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base);
1597 memcpy (yystack.s_base, yypath->yystack.s_base, (yystack.s_mark - yystack.s_base + 1) * sizeof(short));
1598 yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base);
1599 memcpy (yystack.l_base, yypath->yystack.l_base, (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
1600 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1601 yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base);
1602 memcpy (yystack.p_base, yypath->yystack.p_base, (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
1604 yystate = yypath->state;
1606 #endif /* YYBTYACC */
1609 YYERROR_CALL("yacc stack overflow");
1613 YYERROR_CALL("memory exhausted");
1615 #endif /* YYBTYACC */
1625 if (yyps->save) goto yyvalid;
1626 #endif /* YYBTYACC */
1630 #if defined(YYDESTRUCT_CALL)
1631 if (yychar != YYEOF && yychar != YYEMPTY)
1632 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1633 YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc);
1635 YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval);
1636 #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
1640 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1643 for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp)
1644 YYDESTRUCT_CALL("cleanup: discarding state",
1645 yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp);
1647 for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv)
1648 YYDESTRUCT_CALL("cleanup: discarding state",
1649 yystos[*(yystack.s_base + (pv - yystack.l_base))], pv);
1650 #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
1652 #endif /* defined(YYDESTRUCT_CALL) */
1657 yyFreeState(yyerrctx);
1662 YYParseState *save = yyps;
1669 YYParseState *save = yypath;
1670 yypath = save->save;
1674 #endif /* YYBTYACC */
1675 yyfreestack(&yystack);