varsyntax_calc1.tab.c revision 1.2
1/*	$NetBSD: varsyntax_calc1.tab.c,v 1.2 2017/02/11 19:33:13 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
112typedef struct interval
113{
114    double lo, hi;
115}
116INTERVAL;
117
118INTERVAL vmul(double, double, INTERVAL);
119INTERVAL vdiv(double, double, INTERVAL);
120
121extern int yylex(void);
122static void yyerror(const char *s);
123
124int dcheck(INTERVAL);
125
126double dreg[26];
127INTERVAL 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"
136typedef 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
174extern int YYPARSE_DECL();
175
176#define DREG 257
177#define VREG 258
178#define CONST 259
179#define UMINUS 260
180#define YYERRCODE 256
181typedef short YYINT;
182static 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};
187static 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};
192static 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};
201static const YYINT varsyntax_calc1_dgoto[] = {            7,
202   32,    9,    0,
203};
204static 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};
213static 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};
222static const YYINT varsyntax_calc1_gindex[] = {           0,
223    4,  124,    0,
224};
225#define YYTABLESIZE 225
226static 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};
251static 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
284static 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,
2870,0,0,0,0,0,0,0,0,"'('","')'","'*'","'+'","','","'-'",0,"'/'",0,0,0,0,0,0,0,0,0,
2880,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
2890,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
2900,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
2910,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
2920,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
2930,0,"DREG","VREG","CONST","UMINUS",0,0,0,0,0,"illegal-symbol",
294};
295static 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
329int      yydebug;
330int      yynerrs;
331
332int      yyerrflag;
333int      yychar;
334YYSTYPE  yyval;
335YYSTYPE  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
352typedef 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 */
361static 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
369static void
370yyerror(const char *s)
371{
372    fprintf(stderr, "%s\n", s);
373}
374
375int
376yylex(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
436static INTERVAL
437hilo(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
471INTERVAL
472vmul(double a, double b, INTERVAL v)
473{
474    return (hilo(a * v.hi, a * v.lo, b * v.hi, b * v.lo));
475}
476
477int
478dcheck(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
488INTERVAL
489vdiv(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 */
503static 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)
538static 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
553int
554YYPARSE_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    yym = 0;
569    yyn = 0;
570    yynerrs = 0;
571    yyerrflag = 0;
572    yychar = YYEMPTY;
573    yystate = 0;
574
575#if YYPURE
576    memset(&yystack, 0, sizeof(yystack));
577#endif
578
579    if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
580    yystack.s_mark = yystack.s_base;
581    yystack.l_mark = yystack.l_base;
582    yystate = 0;
583    *yystack.s_mark = 0;
584
585yyloop:
586    if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
587    if (yychar < 0)
588    {
589        yychar = YYLEX;
590        if (yychar < 0) yychar = YYEOF;
591#if YYDEBUG
592        if (yydebug)
593        {
594            if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
595            printf("%sdebug: state %d, reading %d (%s)\n",
596                    YYPREFIX, yystate, yychar, yys);
597        }
598#endif
599    }
600    if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
601            yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
602    {
603#if YYDEBUG
604        if (yydebug)
605            printf("%sdebug: state %d, shifting to state %d\n",
606                    YYPREFIX, yystate, yytable[yyn]);
607#endif
608        if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
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]) != 0) && (yyn += yychar) >= 0 &&
617            yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
618    {
619        yyn = yytable[yyn];
620        goto yyreduce;
621    }
622    if (yyerrflag != 0) goto yyinrecovery;
623
624    YYERROR_CALL("syntax error");
625
626    goto yyerrlab; /* redundant goto avoids 'unused label' warning */
627yyerrlab:
628    ++yynerrs;
629
630yyinrecovery:
631    if (yyerrflag < 3)
632    {
633        yyerrflag = 3;
634        for (;;)
635        {
636            if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 &&
637                    yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE)
638            {
639#if YYDEBUG
640                if (yydebug)
641                    printf("%sdebug: state %d, error recovery shifting\
642 to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
643#endif
644                if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
645                yystate = yytable[yyn];
646                *++yystack.s_mark = yytable[yyn];
647                *++yystack.l_mark = yylval;
648                goto yyloop;
649            }
650            else
651            {
652#if YYDEBUG
653                if (yydebug)
654                    printf("%sdebug: error recovery discarding state %d\n",
655                            YYPREFIX, *yystack.s_mark);
656#endif
657                if (yystack.s_mark <= yystack.s_base) goto yyabort;
658                --yystack.s_mark;
659                --yystack.l_mark;
660            }
661        }
662    }
663    else
664    {
665        if (yychar == YYEOF) goto yyabort;
666#if YYDEBUG
667        if (yydebug)
668        {
669            if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
670            printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
671                    YYPREFIX, yystate, yychar, yys);
672        }
673#endif
674        yychar = YYEMPTY;
675        goto yyloop;
676    }
677
678yyreduce:
679#if YYDEBUG
680    if (yydebug)
681        printf("%sdebug: state %d, reducing by rule %d (%s)\n",
682                YYPREFIX, yystate, yyn, yyrule[yyn]);
683#endif
684    yym = yylen[yyn];
685    if (yym > 0)
686        yyval = yystack.l_mark[1-yym];
687    else
688        memset(&yyval, 0, sizeof yyval);
689
690    switch (yyn)
691    {
692case 3:
693#line 59 "varsyntax_calc1.y"
694	{
695		(void) printf("%15.8f\n", yystack.l_mark[-1].dval);
696	}
697break;
698case 4:
699#line 63 "varsyntax_calc1.y"
700	{
701		(void) printf("(%15.8f, %15.8f)\n", yystack.l_mark[-1].vval.lo, yystack.l_mark[-1].vval.hi);
702	}
703break;
704case 5:
705#line 67 "varsyntax_calc1.y"
706	{
707		dreg[yystack.l_mark[-3].ival] = yystack.l_mark[-1].dval;
708	}
709break;
710case 6:
711#line 71 "varsyntax_calc1.y"
712	{
713		vreg[yystack.l_mark[-3].ival] = yystack.l_mark[-1].vval;
714	}
715break;
716case 7:
717#line 75 "varsyntax_calc1.y"
718	{
719		yyerrok;
720	}
721break;
722case 9:
723#line 82 "varsyntax_calc1.y"
724	{
725		yyval.dval = dreg[yystack.l_mark[0].ival]; /* $$ & $1 are sufficient here*/
726	}
727break;
728case 10:
729#line 86 "varsyntax_calc1.y"
730	{
731		yyval.dval = yystack.l_mark[-2].dval + yystack.l_mark[0].dval;
732	}
733break;
734case 11:
735#line 90 "varsyntax_calc1.y"
736	{
737		yyval.dval = yystack.l_mark[-2].dval - yystack.l_mark[0].dval;
738	}
739break;
740case 12:
741#line 94 "varsyntax_calc1.y"
742	{
743		yyval.dval = yystack.l_mark[-2].dval * yystack.l_mark[0].dval;
744	}
745break;
746case 13:
747#line 98 "varsyntax_calc1.y"
748	{
749		yyval.dval = yystack.l_mark[-2].dval / yystack.l_mark[0].dval;
750	}
751break;
752case 14:
753#line 102 "varsyntax_calc1.y"
754	{
755		yyval.dval = -yystack.l_mark[0].dval;
756	}
757break;
758case 15:
759#line 106 "varsyntax_calc1.y"
760	{
761		yyval.dval = yystack.l_mark[-1].dval;
762	}
763break;
764case 16:
765#line 112 "varsyntax_calc1.y"
766	{
767		yyval.vval.hi = yyval.vval.lo = yystack.l_mark[0].dval;
768	}
769break;
770case 17:
771#line 116 "varsyntax_calc1.y"
772	{
773		yyval.vval.lo = yystack.l_mark[-3].dval;
774		yyval.vval.hi = yystack.l_mark[-1].dval;
775		if ( yyval.vval.lo > yyval.vval.hi )
776		{
777			(void) printf("interval out of order\n");
778			YYERROR;
779		}
780	}
781break;
782case 18:
783#line 126 "varsyntax_calc1.y"
784	{
785		yyval.vval = vreg[yystack.l_mark[0].ival];
786	}
787break;
788case 19:
789#line 130 "varsyntax_calc1.y"
790	{
791		yyval.vval.hi = yystack.l_mark[-2].vval.hi + yystack.l_mark[0].vval.hi;
792		yyval.vval.lo = yystack.l_mark[-2].vval.lo + yystack.l_mark[0].vval.lo;
793	}
794break;
795case 20:
796#line 135 "varsyntax_calc1.y"
797	{
798		yyval.vval.hi = yystack.l_mark[-2].dval + yystack.l_mark[0].vval.hi;
799		yyval.vval.lo = yystack.l_mark[-2].dval + yystack.l_mark[0].vval.lo;
800	}
801break;
802case 21:
803#line 140 "varsyntax_calc1.y"
804	{
805		yyval.vval.hi = yystack.l_mark[-2].vval.hi - yystack.l_mark[0].vval.lo;
806		yyval.vval.lo = yystack.l_mark[-2].vval.lo - yystack.l_mark[0].vval.hi;
807	}
808break;
809case 22:
810#line 145 "varsyntax_calc1.y"
811	{
812		yyval.vval.hi = yystack.l_mark[-2].dval - yystack.l_mark[0].vval.lo;
813		yyval.vval.lo = yystack.l_mark[-2].dval - yystack.l_mark[0].vval.hi;
814	}
815break;
816case 23:
817#line 150 "varsyntax_calc1.y"
818	{
819		yyval.vval = vmul( yystack.l_mark[-2].vval.lo, yystack.l_mark[-2].vval.hi, yystack.l_mark[0].vval );
820	}
821break;
822case 24:
823#line 154 "varsyntax_calc1.y"
824	{
825		yyval.vval = vmul (yystack.l_mark[-2].dval, yystack.l_mark[-2].dval, yystack.l_mark[0].vval );
826	}
827break;
828case 25:
829#line 158 "varsyntax_calc1.y"
830	{
831		if (dcheck(yystack.l_mark[0].vval)) YYERROR;
832		yyval.vval = vdiv ( yystack.l_mark[-2].vval.lo, yystack.l_mark[-2].vval.hi, yystack.l_mark[0].vval );
833	}
834break;
835case 26:
836#line 163 "varsyntax_calc1.y"
837	{
838		if (dcheck ( yystack.l_mark[0].vval )) YYERROR;
839		yyval.vval = vdiv (yystack.l_mark[-2].dval, yystack.l_mark[-2].dval, yystack.l_mark[0].vval );
840	}
841break;
842case 27:
843#line 168 "varsyntax_calc1.y"
844	{
845		yyval.vval.hi = -yystack.l_mark[0].vval.lo;
846		yyval.vval.lo = -yystack.l_mark[0].vval.hi;
847	}
848break;
849case 28:
850#line 173 "varsyntax_calc1.y"
851	{
852		yyval.vval = yystack.l_mark[-1].vval;
853	}
854break;
855#line 854 "varsyntax_calc1.tab.c"
856    }
857    yystack.s_mark -= yym;
858    yystate = *yystack.s_mark;
859    yystack.l_mark -= yym;
860    yym = yylhs[yyn];
861    if (yystate == 0 && yym == 0)
862    {
863#if YYDEBUG
864        if (yydebug)
865            printf("%sdebug: after reduction, shifting from state 0 to\
866 state %d\n", YYPREFIX, YYFINAL);
867#endif
868        yystate = YYFINAL;
869        *++yystack.s_mark = YYFINAL;
870        *++yystack.l_mark = yyval;
871        if (yychar < 0)
872        {
873            yychar = YYLEX;
874            if (yychar < 0) yychar = YYEOF;
875#if YYDEBUG
876            if (yydebug)
877            {
878                if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
879                printf("%sdebug: state %d, reading %d (%s)\n",
880                        YYPREFIX, YYFINAL, yychar, yys);
881            }
882#endif
883        }
884        if (yychar == YYEOF) goto yyaccept;
885        goto yyloop;
886    }
887    if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 &&
888            yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate)
889        yystate = yytable[yyn];
890    else
891        yystate = yydgoto[yym];
892#if YYDEBUG
893    if (yydebug)
894        printf("%sdebug: after reduction, shifting from state %d \
895to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
896#endif
897    if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
898    *++yystack.s_mark = (YYINT) yystate;
899    *++yystack.l_mark = yyval;
900    goto yyloop;
901
902yyoverflow:
903    YYERROR_CALL("yacc stack overflow");
904
905yyabort:
906    yyfreestack(&yystack);
907    return (1);
908
909yyaccept:
910    yyfreestack(&yystack);
911    return (0);
912}
913