xref: /netbsd-src/external/bsd/byacc/dist/test/yacc/varsyntax_calc1.tab.c (revision 4b004442778f1201b2161e87fd65ba87aae6601a)
1 /*	$NetBSD: varsyntax_calc1.tab.c,v 1.4 2021/02/20 22:57:57 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 2
9 #define YYMINOR 0
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 #ifdef YYSTYPE
130 #undef  YYSTYPE_IS_DECLARED
131 #define YYSTYPE_IS_DECLARED 1
132 #endif
133 #ifndef YYSTYPE_IS_DECLARED
134 #define YYSTYPE_IS_DECLARED 1
135 #line 32 "varsyntax_calc1.y"
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 #if YYDEBUG
330 int      yydebug;
331 #endif
332 
333 int      yyerrflag;
334 int      yychar;
335 YYSTYPE  yyval;
336 YYSTYPE  yylval;
337 int      yynerrs;
338 
339 /* define the initial stack-sizes */
340 #ifdef YYSTACKSIZE
341 #undef YYMAXDEPTH
342 #define YYMAXDEPTH  YYSTACKSIZE
343 #else
344 #ifdef YYMAXDEPTH
345 #define YYSTACKSIZE YYMAXDEPTH
346 #else
347 #define YYSTACKSIZE 10000
348 #define YYMAXDEPTH  10000
349 #endif
350 #endif
351 
352 #define YYINITSTACKSIZE 200
353 
354 typedef struct {
355     unsigned stacksize;
356     YYINT    *s_base;
357     YYINT    *s_mark;
358     YYINT    *s_last;
359     YYSTYPE  *l_base;
360     YYSTYPE  *l_mark;
361 } YYSTACKDATA;
362 /* variables for the parser stack */
363 static YYSTACKDATA yystack;
364 #line 178 "varsyntax_calc1.y"
365 	/* beginning of subroutines section */
366 
367 #define BSZ 50			/* buffer size for floating point numbers */
368 
369 	/* lexical analysis */
370 
371 static void
372 yyerror(const char *s)
373 {
374     fprintf(stderr, "%s\n", s);
375 }
376 
377 int
378 yylex(void)
379 {
380     int c;
381 
382     while ((c = getchar()) == ' ')
383     {				/* skip over blanks */
384     }
385 
386     if (isupper(c))
387     {
388 	yylval.ival = c - 'A';
389 	return (VREG);
390     }
391     if (islower(c))
392     {
393 	yylval.ival = c - 'a';
394 	return (DREG);
395     }
396 
397     if (isdigit(c) || c == '.')
398     {
399 	/* gobble up digits, points, exponents */
400 	char buf[BSZ + 1], *cp = buf;
401 	int dot = 0, expr = 0;
402 
403 	for (; (cp - buf) < BSZ; ++cp, c = getchar())
404 	{
405 
406 	    *cp = (char) c;
407 	    if (isdigit(c))
408 		continue;
409 	    if (c == '.')
410 	    {
411 		if (dot++ || expr)
412 		    return ('.');	/* will cause syntax error */
413 		continue;
414 	    }
415 
416 	    if (c == 'e')
417 	    {
418 		if (expr++)
419 		    return ('e');	/*  will  cause  syntax  error  */
420 		continue;
421 	    }
422 
423 	    /*  end  of  number  */
424 	    break;
425 	}
426 	*cp = '\0';
427 
428 	if ((cp - buf) >= BSZ)
429 	    printf("constant  too  long:  truncated\n");
430 	else
431 	    ungetc(c, stdin);	/*  push  back  last  char  read  */
432 	yylval.dval = atof(buf);
433 	return (CONST);
434     }
435     return (c);
436 }
437 
438 static INTERVAL
439 hilo(double a, double b, double c, double d)
440 {
441     /*  returns  the  smallest  interval  containing  a,  b,  c,  and  d  */
442     /*  used  by  *,  /  routines  */
443     INTERVAL v;
444 
445     if (a > b)
446     {
447 	v.hi = a;
448 	v.lo = b;
449     }
450     else
451     {
452 	v.hi = b;
453 	v.lo = a;
454     }
455 
456     if (c > d)
457     {
458 	if (c > v.hi)
459 	    v.hi = c;
460 	if (d < v.lo)
461 	    v.lo = d;
462     }
463     else
464     {
465 	if (d > v.hi)
466 	    v.hi = d;
467 	if (c < v.lo)
468 	    v.lo = c;
469     }
470     return (v);
471 }
472 
473 INTERVAL
474 vmul(double a, double b, INTERVAL v)
475 {
476     return (hilo(a * v.hi, a * v.lo, b * v.hi, b * v.lo));
477 }
478 
479 int
480 dcheck(INTERVAL v)
481 {
482     if (v.hi >= 0. && v.lo <= 0.)
483     {
484 	printf("divisor  interval  contains  0.\n");
485 	return (1);
486     }
487     return (0);
488 }
489 
490 INTERVAL
491 vdiv(double a, double b, INTERVAL v)
492 {
493     return (hilo(a / v.hi, a / v.lo, b / v.hi, b / v.lo));
494 }
495 #line 494 "varsyntax_calc1.tab.c"
496 
497 #if YYDEBUG
498 #include <stdio.h>	/* needed for printf */
499 #endif
500 
501 #include <stdlib.h>	/* needed for malloc, etc */
502 #include <string.h>	/* needed for memset */
503 
504 /* allocate initial stack or double stack size, up to YYMAXDEPTH */
505 static int yygrowstack(YYSTACKDATA *data)
506 {
507     int i;
508     unsigned newsize;
509     YYINT *newss;
510     YYSTYPE *newvs;
511 
512     if ((newsize = data->stacksize) == 0)
513         newsize = YYINITSTACKSIZE;
514     else if (newsize >= YYMAXDEPTH)
515         return YYENOMEM;
516     else if ((newsize *= 2) > YYMAXDEPTH)
517         newsize = YYMAXDEPTH;
518 
519     i = (int) (data->s_mark - data->s_base);
520     newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
521     if (newss == 0)
522         return YYENOMEM;
523 
524     data->s_base = newss;
525     data->s_mark = newss + i;
526 
527     newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
528     if (newvs == 0)
529         return YYENOMEM;
530 
531     data->l_base = newvs;
532     data->l_mark = newvs + i;
533 
534     data->stacksize = newsize;
535     data->s_last = data->s_base + newsize - 1;
536     return 0;
537 }
538 
539 #if YYPURE || defined(YY_NO_LEAKS)
540 static void yyfreestack(YYSTACKDATA *data)
541 {
542     free(data->s_base);
543     free(data->l_base);
544     memset(data, 0, sizeof(*data));
545 }
546 #else
547 #define yyfreestack(data) /* nothing */
548 #endif
549 
550 #define YYABORT  goto yyabort
551 #define YYREJECT goto yyabort
552 #define YYACCEPT goto yyaccept
553 #define YYERROR  goto yyerrlab
554 
555 int
556 YYPARSE_DECL()
557 {
558     int yym, yyn, yystate;
559 #if YYDEBUG
560     const char *yys;
561 
562     if ((yys = getenv("YYDEBUG")) != 0)
563     {
564         yyn = *yys;
565         if (yyn >= '0' && yyn <= '9')
566             yydebug = yyn - '0';
567     }
568 #endif
569 
570     yym = 0;
571     yyn = 0;
572     yynerrs = 0;
573     yyerrflag = 0;
574     yychar = YYEMPTY;
575     yystate = 0;
576 
577 #if YYPURE
578     memset(&yystack, 0, sizeof(yystack));
579 #endif
580 
581     if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
582     yystack.s_mark = yystack.s_base;
583     yystack.l_mark = yystack.l_base;
584     yystate = 0;
585     *yystack.s_mark = 0;
586 
587 yyloop:
588     if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
589     if (yychar < 0)
590     {
591         yychar = YYLEX;
592         if (yychar < 0) yychar = YYEOF;
593 #if YYDEBUG
594         if (yydebug)
595         {
596             if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
597             printf("%sdebug: state %d, reading %d (%s)\n",
598                     YYPREFIX, yystate, yychar, yys);
599         }
600 #endif
601     }
602     if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
603             yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
604     {
605 #if YYDEBUG
606         if (yydebug)
607             printf("%sdebug: state %d, shifting to state %d\n",
608                     YYPREFIX, yystate, yytable[yyn]);
609 #endif
610         if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
611         yystate = yytable[yyn];
612         *++yystack.s_mark = yytable[yyn];
613         *++yystack.l_mark = yylval;
614         yychar = YYEMPTY;
615         if (yyerrflag > 0)  --yyerrflag;
616         goto yyloop;
617     }
618     if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
619             yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
620     {
621         yyn = yytable[yyn];
622         goto yyreduce;
623     }
624     if (yyerrflag != 0) goto yyinrecovery;
625 
626     YYERROR_CALL("syntax error");
627 
628     goto yyerrlab; /* redundant goto avoids 'unused label' warning */
629 yyerrlab:
630     ++yynerrs;
631 
632 yyinrecovery:
633     if (yyerrflag < 3)
634     {
635         yyerrflag = 3;
636         for (;;)
637         {
638             if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 &&
639                     yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE)
640             {
641 #if YYDEBUG
642                 if (yydebug)
643                     printf("%sdebug: state %d, error recovery shifting\
644  to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
645 #endif
646                 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
647                 yystate = yytable[yyn];
648                 *++yystack.s_mark = yytable[yyn];
649                 *++yystack.l_mark = yylval;
650                 goto yyloop;
651             }
652             else
653             {
654 #if YYDEBUG
655                 if (yydebug)
656                     printf("%sdebug: error recovery discarding state %d\n",
657                             YYPREFIX, *yystack.s_mark);
658 #endif
659                 if (yystack.s_mark <= yystack.s_base) goto yyabort;
660                 --yystack.s_mark;
661                 --yystack.l_mark;
662             }
663         }
664     }
665     else
666     {
667         if (yychar == YYEOF) goto yyabort;
668 #if YYDEBUG
669         if (yydebug)
670         {
671             if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
672             printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
673                     YYPREFIX, yystate, yychar, yys);
674         }
675 #endif
676         yychar = YYEMPTY;
677         goto yyloop;
678     }
679 
680 yyreduce:
681 #if YYDEBUG
682     if (yydebug)
683         printf("%sdebug: state %d, reducing by rule %d (%s)\n",
684                 YYPREFIX, yystate, yyn, yyrule[yyn]);
685 #endif
686     yym = yylen[yyn];
687     if (yym > 0)
688         yyval = yystack.l_mark[1-yym];
689     else
690         memset(&yyval, 0, sizeof yyval);
691 
692     switch (yyn)
693     {
694 case 3:
695 #line 59 "varsyntax_calc1.y"
696 	{
697 		(void) printf("%15.8f\n", yystack.l_mark[-1].dval);
698 	}
699 break;
700 case 4:
701 #line 63 "varsyntax_calc1.y"
702 	{
703 		(void) printf("(%15.8f, %15.8f)\n", yystack.l_mark[-1].vval.lo, yystack.l_mark[-1].vval.hi);
704 	}
705 break;
706 case 5:
707 #line 67 "varsyntax_calc1.y"
708 	{
709 		dreg[yystack.l_mark[-3].ival] = yystack.l_mark[-1].dval;
710 	}
711 break;
712 case 6:
713 #line 71 "varsyntax_calc1.y"
714 	{
715 		vreg[yystack.l_mark[-3].ival] = yystack.l_mark[-1].vval;
716 	}
717 break;
718 case 7:
719 #line 75 "varsyntax_calc1.y"
720 	{
721 		yyerrok;
722 	}
723 break;
724 case 9:
725 #line 82 "varsyntax_calc1.y"
726 	{
727 		yyval.dval = dreg[yystack.l_mark[0].ival]; /* $$ & $1 are sufficient here*/
728 	}
729 break;
730 case 10:
731 #line 86 "varsyntax_calc1.y"
732 	{
733 		yyval.dval = yystack.l_mark[-2].dval + yystack.l_mark[0].dval;
734 	}
735 break;
736 case 11:
737 #line 90 "varsyntax_calc1.y"
738 	{
739 		yyval.dval = yystack.l_mark[-2].dval - yystack.l_mark[0].dval;
740 	}
741 break;
742 case 12:
743 #line 94 "varsyntax_calc1.y"
744 	{
745 		yyval.dval = yystack.l_mark[-2].dval * yystack.l_mark[0].dval;
746 	}
747 break;
748 case 13:
749 #line 98 "varsyntax_calc1.y"
750 	{
751 		yyval.dval = yystack.l_mark[-2].dval / yystack.l_mark[0].dval;
752 	}
753 break;
754 case 14:
755 #line 102 "varsyntax_calc1.y"
756 	{
757 		yyval.dval = -yystack.l_mark[0].dval;
758 	}
759 break;
760 case 15:
761 #line 106 "varsyntax_calc1.y"
762 	{
763 		yyval.dval = yystack.l_mark[-1].dval;
764 	}
765 break;
766 case 16:
767 #line 112 "varsyntax_calc1.y"
768 	{
769 		yyval.vval.hi = yyval.vval.lo = yystack.l_mark[0].dval;
770 	}
771 break;
772 case 17:
773 #line 116 "varsyntax_calc1.y"
774 	{
775 		yyval.vval.lo = yystack.l_mark[-3].dval;
776 		yyval.vval.hi = yystack.l_mark[-1].dval;
777 		if ( yyval.vval.lo > yyval.vval.hi )
778 		{
779 			(void) printf("interval out of order\n");
780 			YYERROR;
781 		}
782 	}
783 break;
784 case 18:
785 #line 126 "varsyntax_calc1.y"
786 	{
787 		yyval.vval = vreg[yystack.l_mark[0].ival];
788 	}
789 break;
790 case 19:
791 #line 130 "varsyntax_calc1.y"
792 	{
793 		yyval.vval.hi = yystack.l_mark[-2].vval.hi + yystack.l_mark[0].vval.hi;
794 		yyval.vval.lo = yystack.l_mark[-2].vval.lo + yystack.l_mark[0].vval.lo;
795 	}
796 break;
797 case 20:
798 #line 135 "varsyntax_calc1.y"
799 	{
800 		yyval.vval.hi = yystack.l_mark[-2].dval + yystack.l_mark[0].vval.hi;
801 		yyval.vval.lo = yystack.l_mark[-2].dval + yystack.l_mark[0].vval.lo;
802 	}
803 break;
804 case 21:
805 #line 140 "varsyntax_calc1.y"
806 	{
807 		yyval.vval.hi = yystack.l_mark[-2].vval.hi - yystack.l_mark[0].vval.lo;
808 		yyval.vval.lo = yystack.l_mark[-2].vval.lo - yystack.l_mark[0].vval.hi;
809 	}
810 break;
811 case 22:
812 #line 145 "varsyntax_calc1.y"
813 	{
814 		yyval.vval.hi = yystack.l_mark[-2].dval - yystack.l_mark[0].vval.lo;
815 		yyval.vval.lo = yystack.l_mark[-2].dval - yystack.l_mark[0].vval.hi;
816 	}
817 break;
818 case 23:
819 #line 150 "varsyntax_calc1.y"
820 	{
821 		yyval.vval = vmul( yystack.l_mark[-2].vval.lo, yystack.l_mark[-2].vval.hi, yystack.l_mark[0].vval );
822 	}
823 break;
824 case 24:
825 #line 154 "varsyntax_calc1.y"
826 	{
827 		yyval.vval = vmul (yystack.l_mark[-2].dval, yystack.l_mark[-2].dval, yystack.l_mark[0].vval );
828 	}
829 break;
830 case 25:
831 #line 158 "varsyntax_calc1.y"
832 	{
833 		if (dcheck(yystack.l_mark[0].vval)) YYERROR;
834 		yyval.vval = vdiv ( yystack.l_mark[-2].vval.lo, yystack.l_mark[-2].vval.hi, yystack.l_mark[0].vval );
835 	}
836 break;
837 case 26:
838 #line 163 "varsyntax_calc1.y"
839 	{
840 		if (dcheck ( yystack.l_mark[0].vval )) YYERROR;
841 		yyval.vval = vdiv (yystack.l_mark[-2].dval, yystack.l_mark[-2].dval, yystack.l_mark[0].vval );
842 	}
843 break;
844 case 27:
845 #line 168 "varsyntax_calc1.y"
846 	{
847 		yyval.vval.hi = -yystack.l_mark[0].vval.lo;
848 		yyval.vval.lo = -yystack.l_mark[0].vval.hi;
849 	}
850 break;
851 case 28:
852 #line 173 "varsyntax_calc1.y"
853 	{
854 		yyval.vval = yystack.l_mark[-1].vval;
855 	}
856 break;
857 #line 856 "varsyntax_calc1.tab.c"
858     }
859     yystack.s_mark -= yym;
860     yystate = *yystack.s_mark;
861     yystack.l_mark -= yym;
862     yym = yylhs[yyn];
863     if (yystate == 0 && yym == 0)
864     {
865 #if YYDEBUG
866         if (yydebug)
867             printf("%sdebug: after reduction, shifting from state 0 to\
868  state %d\n", YYPREFIX, YYFINAL);
869 #endif
870         yystate = YYFINAL;
871         *++yystack.s_mark = YYFINAL;
872         *++yystack.l_mark = yyval;
873         if (yychar < 0)
874         {
875             yychar = YYLEX;
876             if (yychar < 0) yychar = YYEOF;
877 #if YYDEBUG
878             if (yydebug)
879             {
880                 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
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]) != 0) && (yyn += yystate) >= 0 &&
890             yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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) goto yyoverflow;
900     *++yystack.s_mark = (YYINT) yystate;
901     *++yystack.l_mark = yyval;
902     goto yyloop;
903 
904 yyoverflow:
905     YYERROR_CALL("yacc stack overflow");
906 
907 yyabort:
908     yyfreestack(&yystack);
909     return (1);
910 
911 yyaccept:
912     yyfreestack(&yystack);
913     return (0);
914 }
915