xref: /netbsd-src/external/bsd/byacc/dist/test/yacc/varsyntax_calc1.tab.c (revision 479d8f7d843cc1b22d497efdf1f27a50ee8418d4)
1 /*	$NetBSD: varsyntax_calc1.tab.c,v 1.1.1.3 2016/01/09 21:59:45 christos Exp $	*/
2 
3 /* original parser id follows */
4 /* yysccsid[] = "@(#)yaccpar	1.9 (Berkeley) 02/21/93" */
5 /* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
6 
7 #define YYBYACC 1
8 #define YYMAJOR 1
9 #define YYMINOR 9
10 #define YYCHECK "yyyymmdd"
11 
12 #define YYEMPTY        (-1)
13 #define yyclearin      (yychar = YYEMPTY)
14 #define yyerrok        (yyerrflag = 0)
15 #define YYRECOVERING() (yyerrflag != 0)
16 #define YYENOMEM       (-2)
17 #define YYEOF          0
18 #ident "check variant syntax features"
19 
20 #ifndef yyparse
21 #define yyparse    varsyntax_calc1_parse
22 #endif /* yyparse */
23 
24 #ifndef yylex
25 #define yylex      varsyntax_calc1_lex
26 #endif /* yylex */
27 
28 #ifndef yyerror
29 #define yyerror    varsyntax_calc1_error
30 #endif /* yyerror */
31 
32 #ifndef yychar
33 #define yychar     varsyntax_calc1_char
34 #endif /* yychar */
35 
36 #ifndef yyval
37 #define yyval      varsyntax_calc1_val
38 #endif /* yyval */
39 
40 #ifndef yylval
41 #define yylval     varsyntax_calc1_lval
42 #endif /* yylval */
43 
44 #ifndef yydebug
45 #define yydebug    varsyntax_calc1_debug
46 #endif /* yydebug */
47 
48 #ifndef yynerrs
49 #define yynerrs    varsyntax_calc1_nerrs
50 #endif /* yynerrs */
51 
52 #ifndef yyerrflag
53 #define yyerrflag  varsyntax_calc1_errflag
54 #endif /* yyerrflag */
55 
56 #ifndef yylhs
57 #define yylhs      varsyntax_calc1_lhs
58 #endif /* yylhs */
59 
60 #ifndef yylen
61 #define yylen      varsyntax_calc1_len
62 #endif /* yylen */
63 
64 #ifndef yydefred
65 #define yydefred   varsyntax_calc1_defred
66 #endif /* yydefred */
67 
68 #ifndef yydgoto
69 #define yydgoto    varsyntax_calc1_dgoto
70 #endif /* yydgoto */
71 
72 #ifndef yysindex
73 #define yysindex   varsyntax_calc1_sindex
74 #endif /* yysindex */
75 
76 #ifndef yyrindex
77 #define yyrindex   varsyntax_calc1_rindex
78 #endif /* yyrindex */
79 
80 #ifndef yygindex
81 #define yygindex   varsyntax_calc1_gindex
82 #endif /* yygindex */
83 
84 #ifndef yytable
85 #define yytable    varsyntax_calc1_table
86 #endif /* yytable */
87 
88 #ifndef yycheck
89 #define yycheck    varsyntax_calc1_check
90 #endif /* yycheck */
91 
92 #ifndef yyname
93 #define yyname     varsyntax_calc1_name
94 #endif /* yyname */
95 
96 #ifndef yyrule
97 #define yyrule     varsyntax_calc1_rule
98 #endif /* yyrule */
99 #define YYPREFIX "varsyntax_calc1_"
100 
101 #define YYPURE 0
102 
103 #line 3 "varsyntax_calc1.y"
104 
105 /* http://dinosaur.compilertools.net/yacc/index.html * /*/
106 
107 #include <stdlib.h>
108 #include <stdio.h>
109 #include <ctype.h>
110 #include <math.h>
111 
112 typedef struct interval
113 {
114     double lo, hi;
115 }
116 INTERVAL;
117 
118 INTERVAL vmul(double, double, INTERVAL);
119 INTERVAL vdiv(double, double, INTERVAL);
120 
121 extern int yylex(void);
122 static void yyerror(const char *s);
123 
124 int dcheck(INTERVAL);
125 
126 double dreg[26];
127 INTERVAL vreg[26];
128 
129 #line 32 "varsyntax_calc1.y"
130 #ifdef YYSTYPE
131 #undef  YYSTYPE_IS_DECLARED
132 #define YYSTYPE_IS_DECLARED 1
133 #endif
134 #ifndef YYSTYPE_IS_DECLARED
135 #define YYSTYPE_IS_DECLARED 1
136 typedef union
137 {
138 	int ival;	/* dreg & vreg array index values*/
139 	double dval;	/* floating point values*/
140 	INTERVAL vval;	/* interval values*/
141 } YYSTYPE;
142 #endif /* !YYSTYPE_IS_DECLARED */
143 #line 142 "varsyntax_calc1.tab.c"
144 
145 /* compatibility with bison */
146 #ifdef YYPARSE_PARAM
147 /* compatibility with FreeBSD */
148 # ifdef YYPARSE_PARAM_TYPE
149 #  define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
150 # else
151 #  define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
152 # endif
153 #else
154 # define YYPARSE_DECL() yyparse(void)
155 #endif
156 
157 /* Parameters sent to lex. */
158 #ifdef YYLEX_PARAM
159 # define YYLEX_DECL() yylex(void *YYLEX_PARAM)
160 # define YYLEX yylex(YYLEX_PARAM)
161 #else
162 # define YYLEX_DECL() yylex(void)
163 # define YYLEX yylex()
164 #endif
165 
166 /* Parameters sent to yyerror. */
167 #ifndef YYERROR_DECL
168 #define YYERROR_DECL() yyerror(const char *s)
169 #endif
170 #ifndef YYERROR_CALL
171 #define YYERROR_CALL(msg) yyerror(msg)
172 #endif
173 
174 extern int YYPARSE_DECL();
175 
176 #define DREG 257
177 #define VREG 258
178 #define CONST 259
179 #define UMINUS 260
180 #define YYERRCODE 256
181 typedef short YYINT;
182 static const YYINT varsyntax_calc1_lhs[] = {             -1,
183     3,    3,    0,    0,    0,    0,    0,    1,    1,    1,
184     1,    1,    1,    1,    1,    2,    2,    2,    2,    2,
185     2,    2,    2,    2,    2,    2,    2,    2,
186 };
187 static const YYINT varsyntax_calc1_len[] = {              2,
188     0,    2,    2,    2,    4,    4,    2,    1,    1,    3,
189     3,    3,    3,    2,    3,    1,    5,    1,    3,    3,
190     3,    3,    3,    3,    3,    3,    2,    3,
191 };
192 static const YYINT varsyntax_calc1_defred[] = {           0,
193     0,    0,    0,    8,    0,    0,    0,    0,    0,    7,
194     0,    0,    9,   18,   14,   27,    0,    0,    0,    0,
195     0,    0,    3,    0,    0,    0,    0,    4,    0,    0,
196     0,    0,    0,   15,    0,   28,    0,    0,    0,    0,
197    12,   24,   13,   26,    0,    0,   23,   25,   14,    0,
198     0,    0,    0,    0,    5,    6,    0,    0,    0,   12,
199    13,   17,
200 };
201 static const YYINT varsyntax_calc1_dgoto[] = {            7,
202    32,    9,    0,
203 };
204 static const YYINT varsyntax_calc1_sindex[] = {         -40,
205    -8,  -48,  -47,    0,  -37,  -37,    0,    2,   17,    0,
206   -34,  -37,    0,    0,    0,    0,  -25,   90,  -37,  -37,
207   -37,  -37,    0,  -37,  -37,  -37,  -37,    0,  -34,  -34,
208    25,  125,   31,    0,  -34,    0,  -11,   37,  -11,   37,
209     0,    0,    0,    0,   37,   37,    0,    0,    0,  111,
210   -34,  -34,  -34,  -34,    0,    0,  118,   69,   69,    0,
211     0,    0,
212 };
213 static const YYINT varsyntax_calc1_rindex[] = {           0,
214     0,   38,   44,    0,    0,    0,    0,    0,    0,    0,
215     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
216     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
217     0,   -9,    0,    0,    0,    0,   51,   -3,   56,   61,
218     0,    0,    0,    0,   67,   72,    0,    0,    0,    0,
219     0,    0,    0,    0,    0,    0,    0,   78,   83,    0,
220     0,    0,
221 };
222 static const YYINT varsyntax_calc1_gindex[] = {           0,
223     4,  124,    0,
224 };
225 #define YYTABLESIZE 225
226 static const YYINT varsyntax_calc1_table[] = {            6,
227    16,   10,    6,    8,    5,   30,   20,    5,   15,   17,
228    29,   23,   11,   12,   31,   34,   21,   19,   35,   20,
229     0,   22,   37,   39,   41,   43,   28,    0,    0,    0,
230    21,   16,   49,   50,   55,   22,    0,   20,   57,   20,
231    56,   20,    0,   21,   19,    0,   20,    9,   22,    0,
232     0,    0,    0,   18,   58,   59,   60,   61,   26,   24,
233    10,   25,    0,   27,    0,   11,   53,   51,    0,   52,
234    22,   54,   26,   24,    0,   25,   19,   27,   26,    9,
235     9,   21,    9,   27,    9,   18,   18,   10,   18,    0,
236    18,   10,   11,   10,   10,   10,   11,    0,   11,   11,
237    11,   22,    0,   22,    0,   22,    0,   19,    0,   19,
238    53,   19,   21,    0,   21,   54,   21,    0,   10,    0,
239    10,    0,   10,   11,    0,   11,    0,   11,   16,   18,
240    36,   26,   24,    0,   25,   33,   27,    0,    0,    0,
241     0,    0,   38,   40,   42,   44,    0,   45,   46,   47,
242    48,   34,   53,   51,    0,   52,    0,   54,   62,   53,
243    51,    0,   52,    0,   54,    0,   21,   19,    0,   20,
244     0,   22,    0,    0,    0,    0,    0,    0,    0,    0,
245     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
246     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
247     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
248     0,    0,    0,    0,    0,    1,    2,    3,    4,   13,
249    14,    4,   13,    0,    4,
250 };
251 static const YYINT varsyntax_calc1_check[] = {           40,
252    10,   10,   40,    0,   45,   40,   10,   45,    5,    6,
253    45,   10,   61,   61,   11,   41,   42,   43,   44,   45,
254    -1,   47,   19,   20,   21,   22,   10,   -1,   -1,   -1,
255    42,   41,   29,   30,   10,   47,   -1,   41,   35,   43,
256    10,   45,   -1,   42,   43,   -1,   45,   10,   47,   -1,
257    -1,   -1,   -1,   10,   51,   52,   53,   54,   42,   43,
258    10,   45,   -1,   47,   -1,   10,   42,   43,   -1,   45,
259    10,   47,   42,   43,   -1,   45,   10,   47,   42,   42,
260    43,   10,   45,   47,   47,   42,   43,   10,   45,   -1,
261    47,   41,   10,   43,   44,   45,   41,   -1,   43,   44,
262    45,   41,   -1,   43,   -1,   45,   -1,   41,   -1,   43,
263    42,   45,   41,   -1,   43,   47,   45,   -1,   41,   -1,
264    43,   -1,   45,   41,   -1,   43,   -1,   45,    5,    6,
265    41,   42,   43,   -1,   45,   12,   47,   -1,   -1,   -1,
266    -1,   -1,   19,   20,   21,   22,   -1,   24,   25,   26,
267    27,   41,   42,   43,   -1,   45,   -1,   47,   41,   42,
268    43,   -1,   45,   -1,   47,   -1,   42,   43,   -1,   45,
269    -1,   47,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
270    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
271    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
272    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
273    -1,   -1,   -1,   -1,   -1,  256,  257,  258,  259,  257,
274   258,  259,  257,   -1,  259,
275 };
276 #define YYFINAL 7
277 #ifndef YYDEBUG
278 #define YYDEBUG 0
279 #endif
280 #define YYMAXTOKEN 260
281 #define YYUNDFTOKEN 266
282 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))
283 #if YYDEBUG
284 static const char *const varsyntax_calc1_name[] = {
285 
286 "end-of-file",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,
287 0,0,0,0,0,0,0,0,0,"'('","')'","'*'","'+'","','","'-'",0,"'/'",0,0,0,0,0,0,0,0,0,
288 0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
289 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
290 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
291 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
292 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
293 0,0,"DREG","VREG","CONST","UMINUS",0,0,0,0,0,"illegal-symbol",
294 };
295 static const char *const varsyntax_calc1_rule[] = {
296 "$accept : line",
297 "lines :",
298 "lines : lines line",
299 "line : dexp '\\n'",
300 "line : vexp '\\n'",
301 "line : DREG '=' dexp '\\n'",
302 "line : VREG '=' vexp '\\n'",
303 "line : error '\\n'",
304 "dexp : CONST",
305 "dexp : DREG",
306 "dexp : dexp '+' dexp",
307 "dexp : dexp '-' dexp",
308 "dexp : dexp '*' dexp",
309 "dexp : dexp '/' dexp",
310 "dexp : '-' dexp",
311 "dexp : '(' dexp ')'",
312 "vexp : dexp",
313 "vexp : '(' dexp ',' dexp ')'",
314 "vexp : VREG",
315 "vexp : vexp '+' vexp",
316 "vexp : dexp '+' vexp",
317 "vexp : vexp '-' vexp",
318 "vexp : dexp '-' vexp",
319 "vexp : vexp '*' vexp",
320 "vexp : dexp '*' vexp",
321 "vexp : vexp '/' vexp",
322 "vexp : dexp '/' vexp",
323 "vexp : '-' vexp",
324 "vexp : '(' vexp ')'",
325 
326 };
327 #endif
328 
329 int      yydebug;
330 int      yynerrs;
331 
332 int      yyerrflag;
333 int      yychar;
334 YYSTYPE  yyval;
335 YYSTYPE  yylval;
336 
337 /* define the initial stack-sizes */
338 #ifdef YYSTACKSIZE
339 #undef YYMAXDEPTH
340 #define YYMAXDEPTH  YYSTACKSIZE
341 #else
342 #ifdef YYMAXDEPTH
343 #define YYSTACKSIZE YYMAXDEPTH
344 #else
345 #define YYSTACKSIZE 10000
346 #define YYMAXDEPTH  10000
347 #endif
348 #endif
349 
350 #define YYINITSTACKSIZE 200
351 
352 typedef struct {
353     unsigned stacksize;
354     YYINT    *s_base;
355     YYINT    *s_mark;
356     YYINT    *s_last;
357     YYSTYPE  *l_base;
358     YYSTYPE  *l_mark;
359 } YYSTACKDATA;
360 /* variables for the parser stack */
361 static YYSTACKDATA yystack;
362 #line 178 "varsyntax_calc1.y"
363 	/* beginning of subroutines section */
364 
365 #define BSZ 50			/* buffer size for floating point numbers */
366 
367 	/* lexical analysis */
368 
369 static void
370 yyerror(const char *s)
371 {
372     fprintf(stderr, "%s\n", s);
373 }
374 
375 int
376 yylex(void)
377 {
378     int c;
379 
380     while ((c = getchar()) == ' ')
381     {				/* skip over blanks */
382     }
383 
384     if (isupper(c))
385     {
386 	yylval.ival = c - 'A';
387 	return (VREG);
388     }
389     if (islower(c))
390     {
391 	yylval.ival = c - 'a';
392 	return (DREG);
393     }
394 
395     if (isdigit(c) || c == '.')
396     {
397 	/* gobble up digits, points, exponents */
398 	char buf[BSZ + 1], *cp = buf;
399 	int dot = 0, expr = 0;
400 
401 	for (; (cp - buf) < BSZ; ++cp, c = getchar())
402 	{
403 
404 	    *cp = (char) c;
405 	    if (isdigit(c))
406 		continue;
407 	    if (c == '.')
408 	    {
409 		if (dot++ || expr)
410 		    return ('.');	/* will cause syntax error */
411 		continue;
412 	    }
413 
414 	    if (c == 'e')
415 	    {
416 		if (expr++)
417 		    return ('e');	/*  will  cause  syntax  error  */
418 		continue;
419 	    }
420 
421 	    /*  end  of  number  */
422 	    break;
423 	}
424 	*cp = '\0';
425 
426 	if ((cp - buf) >= BSZ)
427 	    printf("constant  too  long:  truncated\n");
428 	else
429 	    ungetc(c, stdin);	/*  push  back  last  char  read  */
430 	yylval.dval = atof(buf);
431 	return (CONST);
432     }
433     return (c);
434 }
435 
436 static INTERVAL
437 hilo(double a, double b, double c, double d)
438 {
439     /*  returns  the  smallest  interval  containing  a,  b,  c,  and  d  */
440     /*  used  by  *,  /  routines  */
441     INTERVAL v;
442 
443     if (a > b)
444     {
445 	v.hi = a;
446 	v.lo = b;
447     }
448     else
449     {
450 	v.hi = b;
451 	v.lo = a;
452     }
453 
454     if (c > d)
455     {
456 	if (c > v.hi)
457 	    v.hi = c;
458 	if (d < v.lo)
459 	    v.lo = d;
460     }
461     else
462     {
463 	if (d > v.hi)
464 	    v.hi = d;
465 	if (c < v.lo)
466 	    v.lo = c;
467     }
468     return (v);
469 }
470 
471 INTERVAL
472 vmul(double a, double b, INTERVAL v)
473 {
474     return (hilo(a * v.hi, a * v.lo, b * v.hi, b * v.lo));
475 }
476 
477 int
478 dcheck(INTERVAL v)
479 {
480     if (v.hi >= 0. && v.lo <= 0.)
481     {
482 	printf("divisor  interval  contains  0.\n");
483 	return (1);
484     }
485     return (0);
486 }
487 
488 INTERVAL
489 vdiv(double a, double b, INTERVAL v)
490 {
491     return (hilo(a / v.hi, a / v.lo, b / v.hi, b / v.lo));
492 }
493 #line 492 "varsyntax_calc1.tab.c"
494 
495 #if YYDEBUG
496 #include <stdio.h>		/* needed for printf */
497 #endif
498 
499 #include <stdlib.h>	/* needed for malloc, etc */
500 #include <string.h>	/* needed for memset */
501 
502 /* allocate initial stack or double stack size, up to YYMAXDEPTH */
503 static int yygrowstack(YYSTACKDATA *data)
504 {
505     int i;
506     unsigned newsize;
507     YYINT *newss;
508     YYSTYPE *newvs;
509 
510     if ((newsize = data->stacksize) == 0)
511         newsize = YYINITSTACKSIZE;
512     else if (newsize >= YYMAXDEPTH)
513         return YYENOMEM;
514     else if ((newsize *= 2) > YYMAXDEPTH)
515         newsize = YYMAXDEPTH;
516 
517     i = (int) (data->s_mark - data->s_base);
518     newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
519     if (newss == 0)
520         return YYENOMEM;
521 
522     data->s_base = newss;
523     data->s_mark = newss + i;
524 
525     newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
526     if (newvs == 0)
527         return YYENOMEM;
528 
529     data->l_base = newvs;
530     data->l_mark = newvs + i;
531 
532     data->stacksize = newsize;
533     data->s_last = data->s_base + newsize - 1;
534     return 0;
535 }
536 
537 #if YYPURE || defined(YY_NO_LEAKS)
538 static void yyfreestack(YYSTACKDATA *data)
539 {
540     free(data->s_base);
541     free(data->l_base);
542     memset(data, 0, sizeof(*data));
543 }
544 #else
545 #define yyfreestack(data) /* nothing */
546 #endif
547 
548 #define YYABORT  goto yyabort
549 #define YYREJECT goto yyabort
550 #define YYACCEPT goto yyaccept
551 #define YYERROR  goto yyerrlab
552 
553 int
554 YYPARSE_DECL()
555 {
556     int yym, yyn, yystate;
557 #if YYDEBUG
558     const char *yys;
559 
560     if ((yys = getenv("YYDEBUG")) != 0)
561     {
562         yyn = *yys;
563         if (yyn >= '0' && yyn <= '9')
564             yydebug = yyn - '0';
565     }
566 #endif
567 
568     yynerrs = 0;
569     yyerrflag = 0;
570     yychar = YYEMPTY;
571     yystate = 0;
572 
573 #if YYPURE
574     memset(&yystack, 0, sizeof(yystack));
575 #endif
576 
577     if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
578     yystack.s_mark = yystack.s_base;
579     yystack.l_mark = yystack.l_base;
580     yystate = 0;
581     *yystack.s_mark = 0;
582 
583 yyloop:
584     if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
585     if (yychar < 0)
586     {
587         if ((yychar = YYLEX) < 0) yychar = YYEOF;
588 #if YYDEBUG
589         if (yydebug)
590         {
591             yys = yyname[YYTRANSLATE(yychar)];
592             printf("%sdebug: state %d, reading %d (%s)\n",
593                     YYPREFIX, yystate, yychar, yys);
594         }
595 #endif
596     }
597     if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
598             yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
599     {
600 #if YYDEBUG
601         if (yydebug)
602             printf("%sdebug: state %d, shifting to state %d\n",
603                     YYPREFIX, yystate, yytable[yyn]);
604 #endif
605         if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
606         {
607             goto yyoverflow;
608         }
609         yystate = yytable[yyn];
610         *++yystack.s_mark = yytable[yyn];
611         *++yystack.l_mark = yylval;
612         yychar = YYEMPTY;
613         if (yyerrflag > 0)  --yyerrflag;
614         goto yyloop;
615     }
616     if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
617             yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
618     {
619         yyn = yytable[yyn];
620         goto yyreduce;
621     }
622     if (yyerrflag) goto yyinrecovery;
623 
624     YYERROR_CALL("syntax error");
625 
626     goto yyerrlab;
627 
628 yyerrlab:
629     ++yynerrs;
630 
631 yyinrecovery:
632     if (yyerrflag < 3)
633     {
634         yyerrflag = 3;
635         for (;;)
636         {
637             if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
638                     yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
639             {
640 #if YYDEBUG
641                 if (yydebug)
642                     printf("%sdebug: state %d, error recovery shifting\
643  to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
644 #endif
645                 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
646                 {
647                     goto yyoverflow;
648                 }
649                 yystate = yytable[yyn];
650                 *++yystack.s_mark = yytable[yyn];
651                 *++yystack.l_mark = yylval;
652                 goto yyloop;
653             }
654             else
655             {
656 #if YYDEBUG
657                 if (yydebug)
658                     printf("%sdebug: error recovery discarding state %d\n",
659                             YYPREFIX, *yystack.s_mark);
660 #endif
661                 if (yystack.s_mark <= yystack.s_base) goto yyabort;
662                 --yystack.s_mark;
663                 --yystack.l_mark;
664             }
665         }
666     }
667     else
668     {
669         if (yychar == YYEOF) goto yyabort;
670 #if YYDEBUG
671         if (yydebug)
672         {
673             yys = yyname[YYTRANSLATE(yychar)];
674             printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
675                     YYPREFIX, yystate, yychar, yys);
676         }
677 #endif
678         yychar = YYEMPTY;
679         goto yyloop;
680     }
681 
682 yyreduce:
683 #if YYDEBUG
684     if (yydebug)
685         printf("%sdebug: state %d, reducing by rule %d (%s)\n",
686                 YYPREFIX, yystate, yyn, yyrule[yyn]);
687 #endif
688     yym = yylen[yyn];
689     if (yym)
690         yyval = yystack.l_mark[1-yym];
691     else
692         memset(&yyval, 0, sizeof yyval);
693     switch (yyn)
694     {
695 case 3:
696 #line 59 "varsyntax_calc1.y"
697 	{
698 		(void) printf("%15.8f\n", yystack.l_mark[-1].dval);
699 	}
700 break;
701 case 4:
702 #line 63 "varsyntax_calc1.y"
703 	{
704 		(void) printf("(%15.8f, %15.8f)\n", yystack.l_mark[-1].vval.lo, yystack.l_mark[-1].vval.hi);
705 	}
706 break;
707 case 5:
708 #line 67 "varsyntax_calc1.y"
709 	{
710 		dreg[yystack.l_mark[-3].ival] = yystack.l_mark[-1].dval;
711 	}
712 break;
713 case 6:
714 #line 71 "varsyntax_calc1.y"
715 	{
716 		vreg[yystack.l_mark[-3].ival] = yystack.l_mark[-1].vval;
717 	}
718 break;
719 case 7:
720 #line 75 "varsyntax_calc1.y"
721 	{
722 		yyerrok;
723 	}
724 break;
725 case 9:
726 #line 82 "varsyntax_calc1.y"
727 	{
728 		yyval.dval = dreg[yystack.l_mark[0].ival]; /* $$ & $1 are sufficient here*/
729 	}
730 break;
731 case 10:
732 #line 86 "varsyntax_calc1.y"
733 	{
734 		yyval.dval = yystack.l_mark[-2].dval + yystack.l_mark[0].dval;
735 	}
736 break;
737 case 11:
738 #line 90 "varsyntax_calc1.y"
739 	{
740 		yyval.dval = yystack.l_mark[-2].dval - yystack.l_mark[0].dval;
741 	}
742 break;
743 case 12:
744 #line 94 "varsyntax_calc1.y"
745 	{
746 		yyval.dval = yystack.l_mark[-2].dval * yystack.l_mark[0].dval;
747 	}
748 break;
749 case 13:
750 #line 98 "varsyntax_calc1.y"
751 	{
752 		yyval.dval = yystack.l_mark[-2].dval / yystack.l_mark[0].dval;
753 	}
754 break;
755 case 14:
756 #line 102 "varsyntax_calc1.y"
757 	{
758 		yyval.dval = -yystack.l_mark[0].dval;
759 	}
760 break;
761 case 15:
762 #line 106 "varsyntax_calc1.y"
763 	{
764 		yyval.dval = yystack.l_mark[-1].dval;
765 	}
766 break;
767 case 16:
768 #line 112 "varsyntax_calc1.y"
769 	{
770 		yyval.vval.hi = yyval.vval.lo = yystack.l_mark[0].dval;
771 	}
772 break;
773 case 17:
774 #line 116 "varsyntax_calc1.y"
775 	{
776 		yyval.vval.lo = yystack.l_mark[-3].dval;
777 		yyval.vval.hi = yystack.l_mark[-1].dval;
778 		if ( yyval.vval.lo > yyval.vval.hi )
779 		{
780 			(void) printf("interval out of order\n");
781 			YYERROR;
782 		}
783 	}
784 break;
785 case 18:
786 #line 126 "varsyntax_calc1.y"
787 	{
788 		yyval.vval = vreg[yystack.l_mark[0].ival];
789 	}
790 break;
791 case 19:
792 #line 130 "varsyntax_calc1.y"
793 	{
794 		yyval.vval.hi = yystack.l_mark[-2].vval.hi + yystack.l_mark[0].vval.hi;
795 		yyval.vval.lo = yystack.l_mark[-2].vval.lo + yystack.l_mark[0].vval.lo;
796 	}
797 break;
798 case 20:
799 #line 135 "varsyntax_calc1.y"
800 	{
801 		yyval.vval.hi = yystack.l_mark[-2].dval + yystack.l_mark[0].vval.hi;
802 		yyval.vval.lo = yystack.l_mark[-2].dval + yystack.l_mark[0].vval.lo;
803 	}
804 break;
805 case 21:
806 #line 140 "varsyntax_calc1.y"
807 	{
808 		yyval.vval.hi = yystack.l_mark[-2].vval.hi - yystack.l_mark[0].vval.lo;
809 		yyval.vval.lo = yystack.l_mark[-2].vval.lo - yystack.l_mark[0].vval.hi;
810 	}
811 break;
812 case 22:
813 #line 145 "varsyntax_calc1.y"
814 	{
815 		yyval.vval.hi = yystack.l_mark[-2].dval - yystack.l_mark[0].vval.lo;
816 		yyval.vval.lo = yystack.l_mark[-2].dval - yystack.l_mark[0].vval.hi;
817 	}
818 break;
819 case 23:
820 #line 150 "varsyntax_calc1.y"
821 	{
822 		yyval.vval = vmul( yystack.l_mark[-2].vval.lo, yystack.l_mark[-2].vval.hi, yystack.l_mark[0].vval );
823 	}
824 break;
825 case 24:
826 #line 154 "varsyntax_calc1.y"
827 	{
828 		yyval.vval = vmul (yystack.l_mark[-2].dval, yystack.l_mark[-2].dval, yystack.l_mark[0].vval );
829 	}
830 break;
831 case 25:
832 #line 158 "varsyntax_calc1.y"
833 	{
834 		if (dcheck(yystack.l_mark[0].vval)) YYERROR;
835 		yyval.vval = vdiv ( yystack.l_mark[-2].vval.lo, yystack.l_mark[-2].vval.hi, yystack.l_mark[0].vval );
836 	}
837 break;
838 case 26:
839 #line 163 "varsyntax_calc1.y"
840 	{
841 		if (dcheck ( yystack.l_mark[0].vval )) YYERROR;
842 		yyval.vval = vdiv (yystack.l_mark[-2].dval, yystack.l_mark[-2].dval, yystack.l_mark[0].vval );
843 	}
844 break;
845 case 27:
846 #line 168 "varsyntax_calc1.y"
847 	{
848 		yyval.vval.hi = -yystack.l_mark[0].vval.lo;
849 		yyval.vval.lo = -yystack.l_mark[0].vval.hi;
850 	}
851 break;
852 case 28:
853 #line 173 "varsyntax_calc1.y"
854 	{
855 		yyval.vval = yystack.l_mark[-1].vval;
856 	}
857 break;
858 #line 857 "varsyntax_calc1.tab.c"
859     }
860     yystack.s_mark -= yym;
861     yystate = *yystack.s_mark;
862     yystack.l_mark -= yym;
863     yym = yylhs[yyn];
864     if (yystate == 0 && yym == 0)
865     {
866 #if YYDEBUG
867         if (yydebug)
868             printf("%sdebug: after reduction, shifting from state 0 to\
869  state %d\n", YYPREFIX, YYFINAL);
870 #endif
871         yystate = YYFINAL;
872         *++yystack.s_mark = YYFINAL;
873         *++yystack.l_mark = yyval;
874         if (yychar < 0)
875         {
876             if ((yychar = YYLEX) < 0) yychar = YYEOF;
877 #if YYDEBUG
878             if (yydebug)
879             {
880                 yys = yyname[YYTRANSLATE(yychar)];
881                 printf("%sdebug: state %d, reading %d (%s)\n",
882                         YYPREFIX, YYFINAL, yychar, yys);
883             }
884 #endif
885         }
886         if (yychar == YYEOF) goto yyaccept;
887         goto yyloop;
888     }
889     if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
890             yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
891         yystate = yytable[yyn];
892     else
893         yystate = yydgoto[yym];
894 #if YYDEBUG
895     if (yydebug)
896         printf("%sdebug: after reduction, shifting from state %d \
897 to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
898 #endif
899     if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
900     {
901         goto yyoverflow;
902     }
903     *++yystack.s_mark = (YYINT) yystate;
904     *++yystack.l_mark = yyval;
905     goto yyloop;
906 
907 yyoverflow:
908     YYERROR_CALL("yacc stack overflow");
909 
910 yyabort:
911     yyfreestack(&yystack);
912     return (1);
913 
914 yyaccept:
915     yyfreestack(&yystack);
916     return (0);
917 }
918