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