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