varsyntax_calc1.tab.c revision 272955
1/* original parser id follows */
2/* yysccsid[] = "@(#)yaccpar	1.9 (Berkeley) 02/21/93" */
3/* (use YYMAJOR/YYMINOR for ifdefs dependent of parser version) */
4
5#define YYBYACC 1
6#define YYMAJOR 1
7#define YYMINOR 9
8#define YYCHECK "yyyymmdd"
9
10#define YYEMPTY        (-1)
11#define yyclearin      (yychar = YYEMPTY)
12#define yyerrok        (yyerrflag = 0)
13#define YYRECOVERING() (yyerrflag != 0)
14#define YYENOMEM       (-2)
15#define YYEOF          0
16#ident "check variant syntax features"
17#undef YYBTYACC
18#define YYBTYACC 0
19#define YYDEBUGSTR YYPREFIX "debug"
20
21#ifndef yyparse
22#define yyparse    varsyntax_calc1_parse
23#endif /* yyparse */
24
25#ifndef yylex
26#define yylex      varsyntax_calc1_lex
27#endif /* yylex */
28
29#ifndef yyerror
30#define yyerror    varsyntax_calc1_error
31#endif /* yyerror */
32
33#ifndef yychar
34#define yychar     varsyntax_calc1_char
35#endif /* yychar */
36
37#ifndef yyval
38#define yyval      varsyntax_calc1_val
39#endif /* yyval */
40
41#ifndef yylval
42#define yylval     varsyntax_calc1_lval
43#endif /* yylval */
44
45#ifndef yydebug
46#define yydebug    varsyntax_calc1_debug
47#endif /* yydebug */
48
49#ifndef yynerrs
50#define yynerrs    varsyntax_calc1_nerrs
51#endif /* yynerrs */
52
53#ifndef yyerrflag
54#define yyerrflag  varsyntax_calc1_errflag
55#endif /* yyerrflag */
56
57#ifndef yylhs
58#define yylhs      varsyntax_calc1_lhs
59#endif /* yylhs */
60
61#ifndef yylen
62#define yylen      varsyntax_calc1_len
63#endif /* yylen */
64
65#ifndef yydefred
66#define yydefred   varsyntax_calc1_defred
67#endif /* yydefred */
68
69#ifndef yystos
70#define yystos     varsyntax_calc1_stos
71#endif /* yystos */
72
73#ifndef yydgoto
74#define yydgoto    varsyntax_calc1_dgoto
75#endif /* yydgoto */
76
77#ifndef yysindex
78#define yysindex   varsyntax_calc1_sindex
79#endif /* yysindex */
80
81#ifndef yyrindex
82#define yyrindex   varsyntax_calc1_rindex
83#endif /* yyrindex */
84
85#ifndef yygindex
86#define yygindex   varsyntax_calc1_gindex
87#endif /* yygindex */
88
89#ifndef yytable
90#define yytable    varsyntax_calc1_table
91#endif /* yytable */
92
93#ifndef yycheck
94#define yycheck    varsyntax_calc1_check
95#endif /* yycheck */
96
97#ifndef yyname
98#define yyname     varsyntax_calc1_name
99#endif /* yyname */
100
101#ifndef yyrule
102#define yyrule     varsyntax_calc1_rule
103#endif /* yyrule */
104
105#if YYBTYACC
106
107#ifndef yycindex
108#define yycindex   varsyntax_calc1_cindex
109#endif /* yycindex */
110
111#ifndef yyctable
112#define yyctable   varsyntax_calc1_ctable
113#endif /* yyctable */
114
115#endif /* YYBTYACC */
116
117#define YYPREFIX "varsyntax_calc1_"
118
119#define YYPURE 0
120
121#line 3 "varsyntax_calc1.y"
122
123/* http://dinosaur.compilertools.net/yacc/index.html * /*/
124
125#include <stdlib.h>
126#include <stdio.h>
127#include <ctype.h>
128#include <math.h>
129
130typedef struct interval
131{
132    double lo, hi;
133}
134INTERVAL;
135
136INTERVAL vmul(double, double, INTERVAL);
137INTERVAL vdiv(double, double, INTERVAL);
138
139extern int yylex(void);
140static void yyerror(const char *s);
141
142int dcheck(INTERVAL);
143
144double dreg[26];
145INTERVAL vreg[26];
146
147#line 32 "varsyntax_calc1.y"
148#ifdef YYSTYPE
149#undef  YYSTYPE_IS_DECLARED
150#define YYSTYPE_IS_DECLARED 1
151#endif
152#ifndef YYSTYPE_IS_DECLARED
153#define YYSTYPE_IS_DECLARED 1
154typedef union
155{
156	int ival;	/* dreg & vreg array index values*/
157	double dval;	/* floating point values*/
158	INTERVAL vval;	/* interval values*/
159} YYSTYPE;
160#endif /* !YYSTYPE_IS_DECLARED */
161#line 162 "varsyntax_calc1.tab.c"
162
163/* compatibility with bison */
164#ifdef YYPARSE_PARAM
165/* compatibility with FreeBSD */
166# ifdef YYPARSE_PARAM_TYPE
167#  define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
168# else
169#  define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
170# endif
171#else
172# define YYPARSE_DECL() yyparse(void)
173#endif
174
175/* Parameters sent to lex. */
176#ifdef YYLEX_PARAM
177# define YYLEX_DECL() yylex(void *YYLEX_PARAM)
178# define YYLEX yylex(YYLEX_PARAM)
179#else
180# define YYLEX_DECL() yylex(void)
181# define YYLEX yylex()
182#endif
183
184/* Parameters sent to yyerror. */
185#ifndef YYERROR_DECL
186#define YYERROR_DECL() yyerror(const char *s)
187#endif
188#ifndef YYERROR_CALL
189#define YYERROR_CALL(msg) yyerror(msg)
190#endif
191
192extern int YYPARSE_DECL();
193
194#define DREG 257
195#define VREG 258
196#define CONST 259
197#define UMINUS 260
198#define YYERRCODE 256
199typedef short YYINT;
200static const YYINT varsyntax_calc1_lhs[] = {             -1,
201    3,    3,    0,    0,    0,    0,    0,    1,    1,    1,
202    1,    1,    1,    1,    1,    2,    2,    2,    2,    2,
203    2,    2,    2,    2,    2,    2,    2,    2,
204};
205static const YYINT varsyntax_calc1_len[] = {              2,
206    0,    2,    2,    2,    4,    4,    2,    1,    1,    3,
207    3,    3,    3,    2,    3,    1,    5,    1,    3,    3,
208    3,    3,    3,    3,    3,    3,    2,    3,
209};
210static const YYINT varsyntax_calc1_defred[] = {           0,
211    0,    0,    0,    8,    0,    0,    0,    0,    0,    7,
212    0,    0,    9,   18,   14,   27,    0,    0,    0,    0,
213    0,    0,    3,    0,    0,    0,    0,    4,    0,    0,
214    0,    0,    0,   15,    0,   28,    0,    0,    0,    0,
215   12,   24,   13,   26,    0,    0,   23,   25,   14,    0,
216    0,    0,    0,    0,    5,    6,    0,    0,    0,   12,
217   13,   17,
218};
219static const YYINT varsyntax_calc1_stos[] = {             0,
220  256,  257,  258,  259,   45,   40,  262,  263,  264,   10,
221   61,   61,  257,  258,  263,  264,  263,  264,   43,   45,
222   42,   47,   10,   43,   45,   42,   47,   10,   45,   40,
223  263,  263,  264,   41,   44,   41,  263,  264,  263,  264,
224  263,  264,  263,  264,  264,  264,  264,  264,  263,  263,
225   43,   45,   42,   47,   10,   10,  263,  263,  263,  263,
226  263,   41,
227};
228static const YYINT varsyntax_calc1_dgoto[] = {            7,
229   32,    9,    0,
230};
231static const YYINT varsyntax_calc1_sindex[] = {         -40,
232   -8,  -48,  -47,    0,  -37,  -37,    0,    2,   17,    0,
233  -34,  -37,    0,    0,    0,    0,  -25,   90,  -37,  -37,
234  -37,  -37,    0,  -37,  -37,  -37,  -37,    0,  -34,  -34,
235   25,  125,   31,    0,  -34,    0,  -11,   37,  -11,   37,
236    0,    0,    0,    0,   37,   37,    0,    0,    0,  111,
237  -34,  -34,  -34,  -34,    0,    0,  118,   69,   69,    0,
238    0,    0,
239};
240static const YYINT varsyntax_calc1_rindex[] = {           0,
241    0,   38,   44,    0,    0,    0,    0,    0,    0,    0,
242    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
243    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
244    0,   -9,    0,    0,    0,    0,   51,   -3,   56,   61,
245    0,    0,    0,    0,   67,   72,    0,    0,    0,    0,
246    0,    0,    0,    0,    0,    0,    0,   78,   83,    0,
247    0,    0,
248};
249#if YYBTYACC
250static const YYINT varsyntax_calc1_cindex[] = {           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,
256    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
257    0,    0,
258};
259#endif
260static const YYINT varsyntax_calc1_gindex[] = {           0,
261    4,  124,    0,
262};
263#define YYTABLESIZE 225
264static const YYINT varsyntax_calc1_table[] = {            6,
265   16,   10,    6,    8,    5,   30,   20,    5,   15,   17,
266   29,   23,   11,   12,   31,   34,   21,   19,   35,   20,
267    0,   22,   37,   39,   41,   43,   28,    0,    0,    0,
268   21,   16,   49,   50,   55,   22,    0,   20,   57,   20,
269   56,   20,    0,   21,   19,    0,   20,    9,   22,    0,
270    0,    0,    0,   18,   58,   59,   60,   61,   26,   24,
271   10,   25,    0,   27,    0,   11,   53,   51,    0,   52,
272   22,   54,   26,   24,    0,   25,   19,   27,   26,    9,
273    9,   21,    9,   27,    9,   18,   18,   10,   18,    0,
274   18,   10,   11,   10,   10,   10,   11,    0,   11,   11,
275   11,   22,    0,   22,    0,   22,    0,   19,    0,   19,
276   53,   19,   21,    0,   21,   54,   21,    0,   10,    0,
277   10,    0,   10,   11,    0,   11,    0,   11,   16,   18,
278   36,   26,   24,    0,   25,   33,   27,    0,    0,    0,
279    0,    0,   38,   40,   42,   44,    0,   45,   46,   47,
280   48,   34,   53,   51,    0,   52,    0,   54,   62,   53,
281   51,    0,   52,    0,   54,    0,   21,   19,    0,   20,
282    0,   22,    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,    0,    0,    0,    0,    0,
286    0,    0,    0,    0,    0,    1,    2,    3,    4,   13,
287   14,    4,   13,    0,    4,
288};
289static const YYINT varsyntax_calc1_check[] = {           40,
290   10,   10,   40,    0,   45,   40,   10,   45,    5,    6,
291   45,   10,   61,   61,   11,   41,   42,   43,   44,   45,
292   -1,   47,   19,   20,   21,   22,   10,   -1,   -1,   -1,
293   42,   41,   29,   30,   10,   47,   -1,   41,   35,   43,
294   10,   45,   -1,   42,   43,   -1,   45,   10,   47,   -1,
295   -1,   -1,   -1,   10,   51,   52,   53,   54,   42,   43,
296   10,   45,   -1,   47,   -1,   10,   42,   43,   -1,   45,
297   10,   47,   42,   43,   -1,   45,   10,   47,   42,   42,
298   43,   10,   45,   47,   47,   42,   43,   10,   45,   -1,
299   47,   41,   10,   43,   44,   45,   41,   -1,   43,   44,
300   45,   41,   -1,   43,   -1,   45,   -1,   41,   -1,   43,
301   42,   45,   41,   -1,   43,   47,   45,   -1,   41,   -1,
302   43,   -1,   45,   41,   -1,   43,   -1,   45,    5,    6,
303   41,   42,   43,   -1,   45,   12,   47,   -1,   -1,   -1,
304   -1,   -1,   19,   20,   21,   22,   -1,   24,   25,   26,
305   27,   41,   42,   43,   -1,   45,   -1,   47,   41,   42,
306   43,   -1,   45,   -1,   47,   -1,   42,   43,   -1,   45,
307   -1,   47,   -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,   -1,   -1,   -1,   -1,   -1,
311   -1,   -1,   -1,   -1,   -1,  256,  257,  258,  259,  257,
312  258,  259,  257,   -1,  259,
313};
314#if YYBTYACC
315static const YYINT varsyntax_calc1_ctable[] = {          -1,
316   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
317   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
318   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
319   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
320   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
321   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
322   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
323   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
324   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
325   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
326   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
327   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
328   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
329   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
330   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
331   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
332   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
333   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
334   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
335   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
336   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
337   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
338   -1,   -1,   -1,   -1,
339};
340#endif
341#define YYFINAL 7
342#ifndef YYDEBUG
343#define YYDEBUG 0
344#endif
345#define YYMAXTOKEN 260
346#define YYUNDFTOKEN 266
347#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))
348#if YYDEBUG
349static const char *const varsyntax_calc1_name[] = {
350
351"$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,
3520,0,0,0,0,0,"'('","')'","'*'","'+'","','","'-'",0,"'/'",0,0,0,0,0,0,0,0,0,0,0,0,
3530,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
3540,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
3550,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
3560,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
3570,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
358"error","DREG","VREG","CONST","UMINUS","$accept","line","dexp","vexp","lines",
359"illegal-symbol",
360};
361static const char *const varsyntax_calc1_rule[] = {
362"$accept : line",
363"lines :",
364"lines : lines line",
365"line : dexp '\\n'",
366"line : vexp '\\n'",
367"line : DREG '=' dexp '\\n'",
368"line : VREG '=' vexp '\\n'",
369"line : error '\\n'",
370"dexp : CONST",
371"dexp : DREG",
372"dexp : dexp '+' dexp",
373"dexp : dexp '-' dexp",
374"dexp : dexp '*' dexp",
375"dexp : dexp '/' dexp",
376"dexp : '-' dexp",
377"dexp : '(' dexp ')'",
378"vexp : dexp",
379"vexp : '(' dexp ',' dexp ')'",
380"vexp : VREG",
381"vexp : vexp '+' vexp",
382"vexp : dexp '+' vexp",
383"vexp : vexp '-' vexp",
384"vexp : dexp '-' vexp",
385"vexp : vexp '*' vexp",
386"vexp : dexp '*' vexp",
387"vexp : vexp '/' vexp",
388"vexp : dexp '/' vexp",
389"vexp : '-' vexp",
390"vexp : '(' vexp ')'",
391
392};
393#endif
394
395int      yydebug;
396int      yynerrs;
397
398int      yyerrflag;
399int      yychar;
400YYSTYPE  yyval;
401YYSTYPE  yylval;
402#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
403YYLTYPE  yyloc; /* position returned by actions */
404YYLTYPE  yylloc; /* position from the lexer */
405#endif
406
407#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
408#ifndef YYLLOC_DEFAULT
409#define YYLLOC_DEFAULT(loc, rhs, n) \
410do \
411{ \
412    if (n == 0) \
413    { \
414        (loc).first_line   = ((rhs)[-1]).last_line; \
415        (loc).first_column = ((rhs)[-1]).last_column; \
416        (loc).last_line    = ((rhs)[-1]).last_line; \
417        (loc).last_column  = ((rhs)[-1]).last_column; \
418    } \
419    else \
420    { \
421        (loc).first_line   = ((rhs)[ 0 ]).first_line; \
422        (loc).first_column = ((rhs)[ 0 ]).first_column; \
423        (loc).last_line    = ((rhs)[n-1]).last_line; \
424        (loc).last_column  = ((rhs)[n-1]).last_column; \
425    } \
426} while (0)
427#endif /* YYLLOC_DEFAULT */
428#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
429#if YYBTYACC
430
431#ifndef YYLVQUEUEGROWTH
432#define YYLVQUEUEGROWTH 32
433#endif
434#endif /* YYBTYACC */
435
436/* define the initial stack-sizes */
437#ifdef YYSTACKSIZE
438#undef YYMAXDEPTH
439#define YYMAXDEPTH  YYSTACKSIZE
440#else
441#ifdef YYMAXDEPTH
442#define YYSTACKSIZE YYMAXDEPTH
443#else
444#define YYSTACKSIZE 10000
445#define YYMAXDEPTH  10000
446#endif
447#endif
448
449#ifndef YYINITSTACKSIZE
450#define YYINITSTACKSIZE 200
451#endif
452
453typedef struct {
454    unsigned stacksize;
455    short    *s_base;
456    short    *s_mark;
457    short    *s_last;
458    YYSTYPE  *l_base;
459    YYSTYPE  *l_mark;
460#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
461    YYLTYPE  *p_base;
462    YYLTYPE  *p_mark;
463#endif
464} YYSTACKDATA;
465#if YYBTYACC
466
467struct YYParseState_s
468{
469    struct YYParseState_s *save;    /* Previously saved parser state */
470    YYSTACKDATA            yystack; /* saved parser stack */
471    int                    state;   /* saved parser state */
472    int                    errflag; /* saved error recovery status */
473    int                    lexeme;  /* saved index of the conflict lexeme in the lexical queue */
474    YYINT                  ctry;    /* saved index in yyctable[] for this conflict */
475};
476typedef struct YYParseState_s YYParseState;
477#endif /* YYBTYACC */
478/* variables for the parser stack */
479static YYSTACKDATA yystack;
480#if YYBTYACC
481
482/* Current parser state */
483static YYParseState *yyps = 0;
484
485/* yypath != NULL: do the full parse, starting at *yypath parser state. */
486static YYParseState *yypath = 0;
487
488/* Base of the lexical value queue */
489static YYSTYPE *yylvals = 0;
490
491/* Current position at lexical value queue */
492static YYSTYPE *yylvp = 0;
493
494/* End position of lexical value queue */
495static YYSTYPE *yylve = 0;
496
497/* The last allocated position at the lexical value queue */
498static YYSTYPE *yylvlim = 0;
499
500#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
501/* Base of the lexical position queue */
502static YYLTYPE *yylpsns = 0;
503
504/* Current position at lexical position queue */
505static YYLTYPE *yylpp = 0;
506
507/* End position of lexical position queue */
508static YYLTYPE *yylpe = 0;
509
510/* The last allocated position at the lexical position queue */
511static YYLTYPE *yylplim = 0;
512#endif
513
514/* Current position at lexical token queue */
515static short  *yylexp = 0;
516
517static short  *yylexemes = 0;
518#endif /* YYBTYACC */
519#line 178 "varsyntax_calc1.y"
520	/* beginning of subroutines section */
521
522#define BSZ 50			/* buffer size for floating point numbers */
523
524	/* lexical analysis */
525
526static void
527yyerror(const char *s)
528{
529    fprintf(stderr, "%s\n", s);
530}
531
532int
533yylex(void)
534{
535    int c;
536
537    while ((c = getchar()) == ' ')
538    {				/* skip over blanks */
539    }
540
541    if (isupper(c))
542    {
543	yylval.ival = c - 'A';
544	return (VREG);
545    }
546    if (islower(c))
547    {
548	yylval.ival = c - 'a';
549	return (DREG);
550    }
551
552    if (isdigit(c) || c == '.')
553    {
554	/* gobble up digits, points, exponents */
555	char buf[BSZ + 1], *cp = buf;
556	int dot = 0, expr = 0;
557
558	for (; (cp - buf) < BSZ; ++cp, c = getchar())
559	{
560
561	    *cp = (char) c;
562	    if (isdigit(c))
563		continue;
564	    if (c == '.')
565	    {
566		if (dot++ || expr)
567		    return ('.');	/* will cause syntax error */
568		continue;
569	    }
570
571	    if (c == 'e')
572	    {
573		if (expr++)
574		    return ('e');	/*  will  cause  syntax  error  */
575		continue;
576	    }
577
578	    /*  end  of  number  */
579	    break;
580	}
581	*cp = '\0';
582
583	if ((cp - buf) >= BSZ)
584	    printf("constant  too  long:  truncated\n");
585	else
586	    ungetc(c, stdin);	/*  push  back  last  char  read  */
587	yylval.dval = atof(buf);
588	return (CONST);
589    }
590    return (c);
591}
592
593static INTERVAL
594hilo(double a, double b, double c, double d)
595{
596    /*  returns  the  smallest  interval  containing  a,  b,  c,  and  d  */
597    /*  used  by  *,  /  routines  */
598    INTERVAL v;
599
600    if (a > b)
601    {
602	v.hi = a;
603	v.lo = b;
604    }
605    else
606    {
607	v.hi = b;
608	v.lo = a;
609    }
610
611    if (c > d)
612    {
613	if (c > v.hi)
614	    v.hi = c;
615	if (d < v.lo)
616	    v.lo = d;
617    }
618    else
619    {
620	if (d > v.hi)
621	    v.hi = d;
622	if (c < v.lo)
623	    v.lo = c;
624    }
625    return (v);
626}
627
628INTERVAL
629vmul(double a, double b, INTERVAL v)
630{
631    return (hilo(a * v.hi, a * v.lo, b * v.hi, b * v.lo));
632}
633
634int
635dcheck(INTERVAL v)
636{
637    if (v.hi >= 0. && v.lo <= 0.)
638    {
639	printf("divisor  interval  contains  0.\n");
640	return (1);
641    }
642    return (0);
643}
644
645INTERVAL
646vdiv(double a, double b, INTERVAL v)
647{
648    return (hilo(a / v.hi, a / v.lo, b / v.hi, b / v.lo));
649}
650#line 651 "varsyntax_calc1.tab.c"
651
652/* For use in generated program */
653#define yydepth (int)(yystack.s_mark - yystack.s_base)
654#if YYBTYACC
655#define yytrial (yyps->save)
656#endif /* YYBTYACC */
657
658#if YYDEBUG
659#include <stdio.h>         /* needed for printf */
660#endif
661
662#include <stdlib.h>        /* needed for malloc, etc */
663#include <string.h>        /* needed for memset */
664
665/* allocate initial stack or double stack size, up to YYMAXDEPTH */
666static int yygrowstack(YYSTACKDATA *data)
667{
668    int i;
669    unsigned newsize;
670    short *newss;
671    YYSTYPE *newvs;
672#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
673    YYLTYPE *newps;
674#endif
675
676    if ((newsize = data->stacksize) == 0)
677        newsize = YYINITSTACKSIZE;
678    else if (newsize >= YYMAXDEPTH)
679        return YYENOMEM;
680    else if ((newsize *= 2) > YYMAXDEPTH)
681        newsize = YYMAXDEPTH;
682
683    i = (int) (data->s_mark - data->s_base);
684    newss = (short *)realloc(data->s_base, newsize * sizeof(*newss));
685    if (newss == 0)
686        return YYENOMEM;
687
688    data->s_base = newss;
689    data->s_mark = newss + i;
690
691    newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
692    if (newvs == 0)
693        return YYENOMEM;
694
695    data->l_base = newvs;
696    data->l_mark = newvs + i;
697
698#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
699    newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps));
700    if (newps == 0)
701        return YYENOMEM;
702
703    data->p_base = newps;
704    data->p_mark = newps + i;
705#endif
706
707    data->stacksize = newsize;
708    data->s_last = data->s_base + newsize - 1;
709
710#if YYDEBUG
711    if (yydebug)
712        fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize);
713#endif
714    return 0;
715}
716
717#if YYPURE || defined(YY_NO_LEAKS)
718static void yyfreestack(YYSTACKDATA *data)
719{
720    free(data->s_base);
721    free(data->l_base);
722#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
723    free(data->p_base);
724#endif
725    memset(data, 0, sizeof(*data));
726}
727#else
728#define yyfreestack(data) /* nothing */
729#endif /* YYPURE || defined(YY_NO_LEAKS) */
730#if YYBTYACC
731
732static YYParseState *
733yyNewState(unsigned size)
734{
735    YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState));
736    if (p == NULL) return NULL;
737
738    p->yystack.stacksize = size;
739    if (size == 0)
740    {
741        p->yystack.s_base = NULL;
742        p->yystack.l_base = NULL;
743#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
744        p->yystack.p_base = NULL;
745#endif
746        return p;
747    }
748    p->yystack.s_base    = (short *) malloc(size * sizeof(short));
749    if (p->yystack.s_base == NULL) return NULL;
750    p->yystack.l_base    = (YYSTYPE *) malloc(size * sizeof(YYSTYPE));
751    if (p->yystack.l_base == NULL) return NULL;
752    memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE));
753#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
754    p->yystack.p_base    = (YYLTYPE *) malloc(size * sizeof(YYLTYPE));
755    if (p->yystack.p_base == NULL) return NULL;
756    memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE));
757#endif
758
759    return p;
760}
761
762static void
763yyFreeState(YYParseState *p)
764{
765    yyfreestack(&p->yystack);
766    free(p);
767}
768#endif /* YYBTYACC */
769
770#define YYABORT  goto yyabort
771#define YYREJECT goto yyabort
772#define YYACCEPT goto yyaccept
773#define YYERROR  goto yyerrlab
774#if YYBTYACC
775#define YYVALID        do { if (yyps->save)            goto yyvalid; } while(0)
776#define YYVALID_NESTED do { if (yyps->save && \
777                                yyps->save->save == 0) goto yyvalid; } while(0)
778#endif /* YYBTYACC */
779
780int
781YYPARSE_DECL()
782{
783    int yym, yyn, yystate, yyresult;
784#if YYBTYACC
785    int yynewerrflag;
786    YYParseState *yyerrctx = NULL;
787#endif /* YYBTYACC */
788#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
789    YYLTYPE  yyerror_loc_range[2]; /* position of error start & end */
790#endif
791#if YYDEBUG
792    const char *yys;
793
794    if ((yys = getenv("YYDEBUG")) != 0)
795    {
796        yyn = *yys;
797        if (yyn >= '0' && yyn <= '9')
798            yydebug = yyn - '0';
799    }
800    if (yydebug)
801        fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX);
802#endif
803
804#if YYBTYACC
805    yyps = yyNewState(0); if (yyps == 0) goto yyenomem;
806    yyps->save = 0;
807#endif /* YYBTYACC */
808    yynerrs = 0;
809    yyerrflag = 0;
810    yychar = YYEMPTY;
811    yystate = 0;
812
813#if YYPURE
814    memset(&yystack, 0, sizeof(yystack));
815#endif
816
817    if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
818    yystack.s_mark = yystack.s_base;
819    yystack.l_mark = yystack.l_base;
820#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
821    yystack.p_mark = yystack.p_base;
822#endif
823    yystate = 0;
824    *yystack.s_mark = 0;
825
826yyloop:
827    if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
828    if (yychar < 0)
829    {
830#if YYBTYACC
831        do {
832        if (yylvp < yylve)
833        {
834            /* we're currently re-reading tokens */
835            yylval = *yylvp++;
836#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
837            yylloc = *yylpp++;
838#endif
839            yychar = *yylexp++;
840            break;
841        }
842        if (yyps->save)
843        {
844            /* in trial mode; save scanner results for future parse attempts */
845            if (yylvp == yylvlim)
846            {   /* Enlarge lexical value queue */
847                size_t p = (size_t) (yylvp - yylvals);
848                size_t s = (size_t) (yylvlim - yylvals);
849
850                s += YYLVQUEUEGROWTH;
851                if ((yylexemes = (short *)   realloc(yylexemes, s * sizeof(short))) == NULL) goto yyenomem;
852                if ((yylvals   = (YYSTYPE *) realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem;
853#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
854                if ((yylpsns   = (YYLTYPE *) realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem;
855#endif
856                yylvp   = yylve = yylvals + p;
857                yylvlim = yylvals + s;
858#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
859                yylpp   = yylpe = yylpsns + p;
860                yylplim = yylpsns + s;
861#endif
862                yylexp  = yylexemes + p;
863            }
864            *yylexp = (short) YYLEX;
865            *yylvp++ = yylval;
866            yylve++;
867#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
868            *yylpp++ = yylloc;
869            yylpe++;
870#endif
871            yychar = *yylexp++;
872            break;
873        }
874        /* normal operation, no conflict encountered */
875#endif /* YYBTYACC */
876        yychar = YYLEX;
877#if YYBTYACC
878        } while (0);
879#endif /* YYBTYACC */
880        if (yychar < 0) yychar = YYEOF;
881        /* if ((yychar = YYLEX) < 0) yychar = YYEOF; */
882#if YYDEBUG
883        if (yydebug)
884        {
885            yys = yyname[YYTRANSLATE(yychar)];
886            fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)",
887                            YYDEBUGSTR, yydepth, yystate, yychar, yys);
888#ifdef YYSTYPE_TOSTRING
889#if YYBTYACC
890            if (!yytrial)
891#endif /* YYBTYACC */
892                fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval));
893#endif
894            fputc('\n', stderr);
895        }
896#endif
897    }
898#if YYBTYACC
899
900    /* Do we have a conflict? */
901    if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
902        yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
903    {
904        YYINT ctry;
905
906        if (yypath)
907        {
908            YYParseState *save;
909#if YYDEBUG
910            if (yydebug)
911                fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n",
912                                YYDEBUGSTR, yydepth, yystate);
913#endif
914            /* Switch to the next conflict context */
915            save = yypath;
916            yypath = save->save;
917            save->save = NULL;
918            ctry = save->ctry;
919            if (save->state != yystate) YYABORT;
920            yyFreeState(save);
921
922        }
923        else
924        {
925
926            /* Unresolved conflict - start/continue trial parse */
927            YYParseState *save;
928#if YYDEBUG
929            if (yydebug)
930            {
931                fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate);
932                if (yyps->save)
933                    fputs("ALREADY in conflict, continuing trial parse.\n", stderr);
934                else
935                    fputs("Starting trial parse.\n", stderr);
936            }
937#endif
938            save                  = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1));
939            if (save == NULL) goto yyenomem;
940            save->save            = yyps->save;
941            save->state           = yystate;
942            save->errflag         = yyerrflag;
943            save->yystack.s_mark  = save->yystack.s_base + (yystack.s_mark - yystack.s_base);
944            memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(short));
945            save->yystack.l_mark  = save->yystack.l_base + (yystack.l_mark - yystack.l_base);
946            memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
947#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
948            save->yystack.p_mark  = save->yystack.p_base + (yystack.p_mark - yystack.p_base);
949            memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
950#endif
951            ctry                  = yytable[yyn];
952            if (yyctable[ctry] == -1)
953            {
954#if YYDEBUG
955                if (yydebug && yychar >= YYEOF)
956                    fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth);
957#endif
958                ctry++;
959            }
960            save->ctry = ctry;
961            if (yyps->save == NULL)
962            {
963                /* If this is a first conflict in the stack, start saving lexemes */
964                if (!yylexemes)
965                {
966                    yylexemes = (short *) malloc((YYLVQUEUEGROWTH) * sizeof(short));
967                    if (yylexemes == NULL) goto yyenomem;
968                    yylvals   = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE));
969                    if (yylvals == NULL) goto yyenomem;
970                    yylvlim   = yylvals + YYLVQUEUEGROWTH;
971#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
972                    yylpsns   = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE));
973                    if (yylpsns == NULL) goto yyenomem;
974                    yylplim   = yylpsns + YYLVQUEUEGROWTH;
975#endif
976                }
977                if (yylvp == yylve)
978                {
979                    yylvp  = yylve = yylvals;
980#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
981                    yylpp  = yylpe = yylpsns;
982#endif
983                    yylexp = yylexemes;
984                    if (yychar >= YYEOF)
985                    {
986                        *yylve++ = yylval;
987#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
988                        *yylpe++ = yylloc;
989#endif
990                        *yylexp  = (short) yychar;
991                        yychar   = YYEMPTY;
992                    }
993                }
994            }
995            if (yychar >= YYEOF)
996            {
997                yylvp--;
998#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
999                yylpp--;
1000#endif
1001                yylexp--;
1002                yychar = YYEMPTY;
1003            }
1004            save->lexeme = (int) (yylvp - yylvals);
1005            yyps->save   = save;
1006        }
1007        if (yytable[yyn] == ctry)
1008        {
1009#if YYDEBUG
1010            if (yydebug)
1011                fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n",
1012                                YYDEBUGSTR, yydepth, yystate, yyctable[ctry]);
1013#endif
1014            if (yychar < 0)
1015            {
1016                yylvp++;
1017#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1018                yylpp++;
1019#endif
1020                yylexp++;
1021            }
1022            if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
1023                goto yyoverflow;
1024            yystate = yyctable[ctry];
1025            *++yystack.s_mark = (short) yystate;
1026            *++yystack.l_mark = yylval;
1027#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1028            *++yystack.p_mark = yylloc;
1029#endif
1030            yychar  = YYEMPTY;
1031            if (yyerrflag > 0) --yyerrflag;
1032            goto yyloop;
1033        }
1034        else
1035        {
1036            yyn = yyctable[ctry];
1037            goto yyreduce;
1038        }
1039    } /* End of code dealing with conflicts */
1040#endif /* YYBTYACC */
1041    if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
1042            yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
1043    {
1044#if YYDEBUG
1045        if (yydebug)
1046            fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n",
1047                            YYDEBUGSTR, yydepth, yystate, yytable[yyn]);
1048#endif
1049        if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
1050        yystate = yytable[yyn];
1051        *++yystack.s_mark = yytable[yyn];
1052        *++yystack.l_mark = yylval;
1053#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1054        *++yystack.p_mark = yylloc;
1055#endif
1056        yychar = YYEMPTY;
1057        if (yyerrflag > 0)  --yyerrflag;
1058        goto yyloop;
1059    }
1060    if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
1061            yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
1062    {
1063        yyn = yytable[yyn];
1064        goto yyreduce;
1065    }
1066    if (yyerrflag != 0) goto yyinrecovery;
1067#if YYBTYACC
1068
1069    yynewerrflag = 1;
1070    goto yyerrhandler;
1071    goto yyerrlab;
1072
1073yyerrlab:
1074    yynewerrflag = 0;
1075yyerrhandler:
1076    while (yyps->save)
1077    {
1078        int ctry;
1079        YYParseState *save = yyps->save;
1080#if YYDEBUG
1081        if (yydebug)
1082            fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n",
1083                            YYDEBUGSTR, yydepth, yystate, yyps->save->state,
1084                    (int)(yylvp - yylvals - yyps->save->lexeme));
1085#endif
1086        /* Memorize most forward-looking error state in case it's really an error. */
1087        if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals)
1088        {
1089            /* Free old saved error context state */
1090            if (yyerrctx) yyFreeState(yyerrctx);
1091            /* Create and fill out new saved error context state */
1092            yyerrctx                 = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1));
1093            if (yyerrctx == NULL) goto yyenomem;
1094            yyerrctx->save           = yyps->save;
1095            yyerrctx->state          = yystate;
1096            yyerrctx->errflag        = yyerrflag;
1097            yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base);
1098            memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(short));
1099            yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base);
1100            memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
1101#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1102            yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base);
1103            memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
1104#endif
1105            yyerrctx->lexeme         = (int) (yylvp - yylvals);
1106        }
1107        yylvp          = yylvals   + save->lexeme;
1108#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1109        yylpp          = yylpsns   + save->lexeme;
1110#endif
1111        yylexp         = yylexemes + save->lexeme;
1112        yychar         = YYEMPTY;
1113        yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base);
1114        memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(short));
1115        yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base);
1116        memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
1117#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1118        yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base);
1119        memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
1120#endif
1121        ctry           = ++save->ctry;
1122        yystate        = save->state;
1123        /* We tried shift, try reduce now */
1124        if ((yyn = yyctable[ctry]) >= 0) goto yyreduce;
1125        yyps->save     = save->save;
1126        save->save     = NULL;
1127        yyFreeState(save);
1128
1129        /* Nothing left on the stack -- error */
1130        if (!yyps->save)
1131        {
1132#if YYDEBUG
1133            if (yydebug)
1134                fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n",
1135                                YYPREFIX, yydepth);
1136#endif
1137            /* Restore state as it was in the most forward-advanced error */
1138            yylvp          = yylvals   + yyerrctx->lexeme;
1139#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1140            yylpp          = yylpsns   + yyerrctx->lexeme;
1141#endif
1142            yylexp         = yylexemes + yyerrctx->lexeme;
1143            yychar         = yylexp[-1];
1144            yylval         = yylvp[-1];
1145#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1146            yylloc         = yylpp[-1];
1147#endif
1148            yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base);
1149            memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(short));
1150            yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base);
1151            memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
1152#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1153            yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base);
1154            memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
1155#endif
1156            yystate        = yyerrctx->state;
1157            yyFreeState(yyerrctx);
1158            yyerrctx       = NULL;
1159        }
1160        yynewerrflag = 1;
1161    }
1162    if (yynewerrflag == 0) goto yyinrecovery;
1163#endif /* YYBTYACC */
1164
1165    YYERROR_CALL("syntax error");
1166#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1167    yyerror_loc_range[0] = yylloc; /* lookahead position is error start position */
1168#endif
1169
1170#if !YYBTYACC
1171    goto yyerrlab;
1172yyerrlab:
1173#endif
1174    ++yynerrs;
1175
1176yyinrecovery:
1177    if (yyerrflag < 3)
1178    {
1179        yyerrflag = 3;
1180        for (;;)
1181        {
1182            if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 &&
1183                    yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE)
1184            {
1185#if YYDEBUG
1186                if (yydebug)
1187                    fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n",
1188                                    YYDEBUGSTR, yydepth, *yystack.s_mark, yytable[yyn]);
1189#endif
1190                if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
1191                yystate = yytable[yyn];
1192                *++yystack.s_mark = yytable[yyn];
1193                *++yystack.l_mark = yylval;
1194#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1195                /* lookahead position is error end position */
1196                yyerror_loc_range[1] = yylloc;
1197                YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */
1198                *++yystack.p_mark = yyloc;
1199#endif
1200                goto yyloop;
1201            }
1202            else
1203            {
1204#if YYDEBUG
1205                if (yydebug)
1206                    fprintf(stderr, "%s[%d]: error recovery discarding state %d\n",
1207                                    YYDEBUGSTR, yydepth, *yystack.s_mark);
1208#endif
1209                if (yystack.s_mark <= yystack.s_base) goto yyabort;
1210#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1211                /* the current TOS position is the error start position */
1212                yyerror_loc_range[0] = *yystack.p_mark;
1213#endif
1214#if defined(YYDESTRUCT_CALL)
1215#if YYBTYACC
1216                if (!yytrial)
1217#endif /* YYBTYACC */
1218#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1219                    YYDESTRUCT_CALL("error: discarding state",
1220                                    yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark);
1221#else
1222                    YYDESTRUCT_CALL("error: discarding state",
1223                                    yystos[*yystack.s_mark], yystack.l_mark);
1224#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
1225#endif /* defined(YYDESTRUCT_CALL) */
1226                --yystack.s_mark;
1227                --yystack.l_mark;
1228#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1229                --yystack.p_mark;
1230#endif
1231            }
1232        }
1233    }
1234    else
1235    {
1236        if (yychar == YYEOF) goto yyabort;
1237#if YYDEBUG
1238        if (yydebug)
1239        {
1240            yys = yyname[YYTRANSLATE(yychar)];
1241            fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n",
1242                            YYDEBUGSTR, yydepth, yystate, yychar, yys);
1243        }
1244#endif
1245#if defined(YYDESTRUCT_CALL)
1246#if YYBTYACC
1247        if (!yytrial)
1248#endif /* YYBTYACC */
1249#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1250            YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc);
1251#else
1252            YYDESTRUCT_CALL("error: discarding token", yychar, &yylval);
1253#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
1254#endif /* defined(YYDESTRUCT_CALL) */
1255        yychar = YYEMPTY;
1256        goto yyloop;
1257    }
1258
1259yyreduce:
1260    yym = yylen[yyn];
1261#if YYDEBUG
1262    if (yydebug)
1263    {
1264        fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)",
1265                        YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]);
1266#ifdef YYSTYPE_TOSTRING
1267#if YYBTYACC
1268        if (!yytrial)
1269#endif /* YYBTYACC */
1270            if (yym > 0)
1271            {
1272                int i;
1273                fputc('<', stderr);
1274                for (i = yym; i > 0; i--)
1275                {
1276                    if (i != yym) fputs(", ", stderr);
1277                    fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]],
1278                                           yystack.l_mark[1-i]), stderr);
1279                }
1280                fputc('>', stderr);
1281            }
1282#endif
1283        fputc('\n', stderr);
1284    }
1285#endif
1286    if (yym > 0)
1287        yyval = yystack.l_mark[1-yym];
1288    else
1289        memset(&yyval, 0, sizeof yyval);
1290#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1291
1292    /* Perform position reduction */
1293    memset(&yyloc, 0, sizeof(yyloc));
1294#if YYBTYACC
1295    if (!yytrial)
1296#endif /* YYBTYACC */
1297    {
1298        YYLLOC_DEFAULT(yyloc, &yystack.p_mark[1-yym], yym);
1299        /* just in case YYERROR is invoked within the action, save
1300           the start of the rhs as the error start position */
1301        yyerror_loc_range[0] = yystack.p_mark[1-yym];
1302    }
1303#endif
1304
1305    switch (yyn)
1306    {
1307case 3:
1308#line 59 "varsyntax_calc1.y"
1309	{
1310		(void) printf("%15.8f\n", yystack.l_mark[-1].dval);
1311	}
1312break;
1313case 4:
1314#line 63 "varsyntax_calc1.y"
1315	{
1316		(void) printf("(%15.8f, %15.8f)\n", yystack.l_mark[-1].vval.lo, yystack.l_mark[-1].vval.hi);
1317	}
1318break;
1319case 5:
1320#line 67 "varsyntax_calc1.y"
1321	{
1322		dreg[yystack.l_mark[-3].ival] = yystack.l_mark[-1].dval;
1323	}
1324break;
1325case 6:
1326#line 71 "varsyntax_calc1.y"
1327	{
1328		vreg[yystack.l_mark[-3].ival] = yystack.l_mark[-1].vval;
1329	}
1330break;
1331case 7:
1332#line 75 "varsyntax_calc1.y"
1333	{
1334		yyerrok;
1335	}
1336break;
1337case 9:
1338#line 82 "varsyntax_calc1.y"
1339	{
1340		yyval.dval = dreg[yystack.l_mark[0].ival]; /* $$ & $1 are sufficient here*/
1341	}
1342break;
1343case 10:
1344#line 86 "varsyntax_calc1.y"
1345	{
1346		yyval.dval = yystack.l_mark[-2].dval + yystack.l_mark[0].dval;
1347	}
1348break;
1349case 11:
1350#line 90 "varsyntax_calc1.y"
1351	{
1352		yyval.dval = yystack.l_mark[-2].dval - yystack.l_mark[0].dval;
1353	}
1354break;
1355case 12:
1356#line 94 "varsyntax_calc1.y"
1357	{
1358		yyval.dval = yystack.l_mark[-2].dval * yystack.l_mark[0].dval;
1359	}
1360break;
1361case 13:
1362#line 98 "varsyntax_calc1.y"
1363	{
1364		yyval.dval = yystack.l_mark[-2].dval / yystack.l_mark[0].dval;
1365	}
1366break;
1367case 14:
1368#line 102 "varsyntax_calc1.y"
1369	{
1370		yyval.dval = -yystack.l_mark[0].dval;
1371	}
1372break;
1373case 15:
1374#line 106 "varsyntax_calc1.y"
1375	{
1376		yyval.dval = yystack.l_mark[-1].dval;
1377	}
1378break;
1379case 16:
1380#line 112 "varsyntax_calc1.y"
1381	{
1382		yyval.vval.hi = yyval.vval.lo = yystack.l_mark[0].dval;
1383	}
1384break;
1385case 17:
1386#line 116 "varsyntax_calc1.y"
1387	{
1388		yyval.vval.lo = yystack.l_mark[-3].dval;
1389		yyval.vval.hi = yystack.l_mark[-1].dval;
1390		if ( yyval.vval.lo > yyval.vval.hi )
1391		{
1392			(void) printf("interval out of order\n");
1393			YYERROR;
1394		}
1395	}
1396break;
1397case 18:
1398#line 126 "varsyntax_calc1.y"
1399	{
1400		yyval.vval = vreg[yystack.l_mark[0].ival];
1401	}
1402break;
1403case 19:
1404#line 130 "varsyntax_calc1.y"
1405	{
1406		yyval.vval.hi = yystack.l_mark[-2].vval.hi + yystack.l_mark[0].vval.hi;
1407		yyval.vval.lo = yystack.l_mark[-2].vval.lo + yystack.l_mark[0].vval.lo;
1408	}
1409break;
1410case 20:
1411#line 135 "varsyntax_calc1.y"
1412	{
1413		yyval.vval.hi = yystack.l_mark[-2].dval + yystack.l_mark[0].vval.hi;
1414		yyval.vval.lo = yystack.l_mark[-2].dval + yystack.l_mark[0].vval.lo;
1415	}
1416break;
1417case 21:
1418#line 140 "varsyntax_calc1.y"
1419	{
1420		yyval.vval.hi = yystack.l_mark[-2].vval.hi - yystack.l_mark[0].vval.lo;
1421		yyval.vval.lo = yystack.l_mark[-2].vval.lo - yystack.l_mark[0].vval.hi;
1422	}
1423break;
1424case 22:
1425#line 145 "varsyntax_calc1.y"
1426	{
1427		yyval.vval.hi = yystack.l_mark[-2].dval - yystack.l_mark[0].vval.lo;
1428		yyval.vval.lo = yystack.l_mark[-2].dval - yystack.l_mark[0].vval.hi;
1429	}
1430break;
1431case 23:
1432#line 150 "varsyntax_calc1.y"
1433	{
1434		yyval.vval = vmul( yystack.l_mark[-2].vval.lo, yystack.l_mark[-2].vval.hi, yystack.l_mark[0].vval );
1435	}
1436break;
1437case 24:
1438#line 154 "varsyntax_calc1.y"
1439	{
1440		yyval.vval = vmul (yystack.l_mark[-2].dval, yystack.l_mark[-2].dval, yystack.l_mark[0].vval );
1441	}
1442break;
1443case 25:
1444#line 158 "varsyntax_calc1.y"
1445	{
1446		if (dcheck(yystack.l_mark[0].vval)) YYERROR;
1447		yyval.vval = vdiv ( yystack.l_mark[-2].vval.lo, yystack.l_mark[-2].vval.hi, yystack.l_mark[0].vval );
1448	}
1449break;
1450case 26:
1451#line 163 "varsyntax_calc1.y"
1452	{
1453		if (dcheck ( yystack.l_mark[0].vval )) YYERROR;
1454		yyval.vval = vdiv (yystack.l_mark[-2].dval, yystack.l_mark[-2].dval, yystack.l_mark[0].vval );
1455	}
1456break;
1457case 27:
1458#line 168 "varsyntax_calc1.y"
1459	{
1460		yyval.vval.hi = -yystack.l_mark[0].vval.lo;
1461		yyval.vval.lo = -yystack.l_mark[0].vval.hi;
1462	}
1463break;
1464case 28:
1465#line 173 "varsyntax_calc1.y"
1466	{
1467		yyval.vval = yystack.l_mark[-1].vval;
1468	}
1469break;
1470#line 1471 "varsyntax_calc1.tab.c"
1471    default:
1472        break;
1473    }
1474    yystack.s_mark -= yym;
1475    yystate = *yystack.s_mark;
1476    yystack.l_mark -= yym;
1477#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1478    yystack.p_mark -= yym;
1479#endif
1480    yym = yylhs[yyn];
1481    if (yystate == 0 && yym == 0)
1482    {
1483#if YYDEBUG
1484        if (yydebug)
1485        {
1486            fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth);
1487#ifdef YYSTYPE_TOSTRING
1488#if YYBTYACC
1489            if (!yytrial)
1490#endif /* YYBTYACC */
1491                fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval));
1492#endif
1493            fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL);
1494        }
1495#endif
1496        yystate = YYFINAL;
1497        *++yystack.s_mark = YYFINAL;
1498        *++yystack.l_mark = yyval;
1499#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1500        *++yystack.p_mark = yyloc;
1501#endif
1502        if (yychar < 0)
1503        {
1504#if YYBTYACC
1505            do {
1506            if (yylvp < yylve)
1507            {
1508                /* we're currently re-reading tokens */
1509                yylval = *yylvp++;
1510#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1511                yylloc = *yylpp++;
1512#endif
1513                yychar = *yylexp++;
1514                break;
1515            }
1516            if (yyps->save)
1517            {
1518                /* in trial mode; save scanner results for future parse attempts */
1519                if (yylvp == yylvlim)
1520                {   /* Enlarge lexical value queue */
1521                    size_t p = (size_t) (yylvp - yylvals);
1522                    size_t s = (size_t) (yylvlim - yylvals);
1523
1524                    s += YYLVQUEUEGROWTH;
1525                    if ((yylexemes = (short *)   realloc(yylexemes, s * sizeof(short))) == NULL)
1526                        goto yyenomem;
1527                    if ((yylvals   = (YYSTYPE *) realloc(yylvals, s * sizeof(YYSTYPE))) == NULL)
1528                        goto yyenomem;
1529#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1530                    if ((yylpsns   = (YYLTYPE *) realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL)
1531                        goto yyenomem;
1532#endif
1533                    yylvp   = yylve = yylvals + p;
1534                    yylvlim = yylvals + s;
1535#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1536                    yylpp   = yylpe = yylpsns + p;
1537                    yylplim = yylpsns + s;
1538#endif
1539                    yylexp  = yylexemes + p;
1540                }
1541                *yylexp = (short) YYLEX;
1542                *yylvp++ = yylval;
1543                yylve++;
1544#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1545                *yylpp++ = yylloc;
1546                yylpe++;
1547#endif
1548                yychar = *yylexp++;
1549                break;
1550            }
1551            /* normal operation, no conflict encountered */
1552#endif /* YYBTYACC */
1553            yychar = YYLEX;
1554#if YYBTYACC
1555            } while (0);
1556#endif /* YYBTYACC */
1557            if (yychar < 0) yychar = YYEOF;
1558            /* if ((yychar = YYLEX) < 0) yychar = YYEOF; */
1559#if YYDEBUG
1560            if (yydebug)
1561            {
1562                yys = yyname[YYTRANSLATE(yychar)];
1563                fprintf(stderr, "%s[%d]: state %d, reading %d (%s)\n",
1564                                YYDEBUGSTR, yydepth, YYFINAL, yychar, yys);
1565            }
1566#endif
1567        }
1568        if (yychar == YYEOF) goto yyaccept;
1569        goto yyloop;
1570    }
1571    if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 &&
1572            yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate)
1573        yystate = yytable[yyn];
1574    else
1575        yystate = yydgoto[yym];
1576#if YYDEBUG
1577    if (yydebug)
1578    {
1579        fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth);
1580#ifdef YYSTYPE_TOSTRING
1581#if YYBTYACC
1582        if (!yytrial)
1583#endif /* YYBTYACC */
1584            fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval));
1585#endif
1586        fprintf(stderr, "shifting from state %d to state %d\n", *yystack.s_mark, yystate);
1587    }
1588#endif
1589    if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
1590    *++yystack.s_mark = (short) yystate;
1591    *++yystack.l_mark = yyval;
1592#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1593    *++yystack.p_mark = yyloc;
1594#endif
1595    goto yyloop;
1596#if YYBTYACC
1597
1598    /* Reduction declares that this path is valid. Set yypath and do a full parse */
1599yyvalid:
1600    if (yypath) YYABORT;
1601    while (yyps->save)
1602    {
1603        YYParseState *save = yyps->save;
1604        yyps->save = save->save;
1605        save->save = yypath;
1606        yypath = save;
1607    }
1608#if YYDEBUG
1609    if (yydebug)
1610        fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n",
1611                        YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme));
1612#endif
1613    if (yyerrctx)
1614    {
1615        yyFreeState(yyerrctx);
1616        yyerrctx = NULL;
1617    }
1618    yylvp          = yylvals + yypath->lexeme;
1619#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1620    yylpp          = yylpsns + yypath->lexeme;
1621#endif
1622    yylexp         = yylexemes + yypath->lexeme;
1623    yychar         = YYEMPTY;
1624    yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base);
1625    memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(short));
1626    yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base);
1627    memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
1628#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1629    yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base);
1630    memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
1631#endif
1632    yystate        = yypath->state;
1633    goto yyloop;
1634#endif /* YYBTYACC */
1635
1636yyoverflow:
1637    YYERROR_CALL("yacc stack overflow");
1638#if YYBTYACC
1639    goto yyabort_nomem;
1640yyenomem:
1641    YYERROR_CALL("memory exhausted");
1642yyabort_nomem:
1643#endif /* YYBTYACC */
1644    yyresult = 2;
1645    goto yyreturn;
1646
1647yyabort:
1648    yyresult = 1;
1649    goto yyreturn;
1650
1651yyaccept:
1652#if YYBTYACC
1653    if (yyps->save) goto yyvalid;
1654#endif /* YYBTYACC */
1655    yyresult = 0;
1656
1657yyreturn:
1658#if defined(YYDESTRUCT_CALL)
1659    if (yychar != YYEOF && yychar != YYEMPTY)
1660#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1661        YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc);
1662#else
1663        YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval);
1664#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
1665
1666    {
1667        YYSTYPE *pv;
1668#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1669        YYLTYPE *pp;
1670
1671        for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp)
1672             YYDESTRUCT_CALL("cleanup: discarding state",
1673                             yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp);
1674#else
1675        for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv)
1676             YYDESTRUCT_CALL("cleanup: discarding state",
1677                             yystos[*(yystack.s_base + (pv - yystack.l_base))], pv);
1678#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
1679    }
1680#endif /* defined(YYDESTRUCT_CALL) */
1681
1682#if YYBTYACC
1683    if (yyerrctx)
1684    {
1685        yyFreeState(yyerrctx);
1686        yyerrctx = NULL;
1687    }
1688    while (yyps)
1689    {
1690        YYParseState *save = yyps;
1691        yyps = save->save;
1692        save->save = NULL;
1693        yyFreeState(save);
1694    }
1695    while (yypath)
1696    {
1697        YYParseState *save = yypath;
1698        yypath = save->save;
1699        save->save = NULL;
1700        yyFreeState(save);
1701    }
1702#endif /* YYBTYACC */
1703    yyfreestack(&yystack);
1704    return (yyresult);
1705}
1706