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