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