varsyntax_calc1.tab.c revision 264790
1260684Skaiw/* original parser id follows */ 2260684Skaiw/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */ 3260684Skaiw/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */ 4260684Skaiw 5260684Skaiw#define YYBYACC 1 6260684Skaiw#define YYMAJOR 1 7260684Skaiw#define YYMINOR 9 8260684Skaiw#define YYCHECK "yyyymmdd" 9260684Skaiw 10260684Skaiw#define YYEMPTY (-1) 11260684Skaiw#define yyclearin (yychar = YYEMPTY) 12260684Skaiw#define yyerrok (yyerrflag = 0) 13260684Skaiw#define YYRECOVERING() (yyerrflag != 0) 14260684Skaiw#define YYENOMEM (-2) 15260684Skaiw#define YYEOF 0 16260684Skaiw#ident "check variant syntax features" 17260684Skaiw#undef YYBTYACC 18260684Skaiw#define YYBTYACC 0 19260684Skaiw#define YYDEBUGSTR YYPREFIX "debug" 20260684Skaiw 21260684Skaiw#ifndef yyparse 22260684Skaiw#define yyparse varsyntax_calc1_parse 23260684Skaiw#endif /* yyparse */ 24260684Skaiw 25260684Skaiw#ifndef yylex 26260684Skaiw#define yylex varsyntax_calc1_lex 27260684Skaiw#endif /* yylex */ 28260684Skaiw 29276371Semaste#ifndef yyerror 30260684Skaiw#define yyerror varsyntax_calc1_error 31260684Skaiw#endif /* yyerror */ 32260684Skaiw 33260684Skaiw#ifndef yychar 34260684Skaiw#define yychar varsyntax_calc1_char 35260684Skaiw#endif /* yychar */ 36260684Skaiw 37260684Skaiw#ifndef yyval 38260684Skaiw#define yyval varsyntax_calc1_val 39260684Skaiw#endif /* yyval */ 40260684Skaiw 41260684Skaiw#ifndef yylval 42260684Skaiw#define yylval varsyntax_calc1_lval 43260684Skaiw#endif /* yylval */ 44260684Skaiw 45260684Skaiw#ifndef yydebug 46260684Skaiw#define yydebug varsyntax_calc1_debug 47260684Skaiw#endif /* yydebug */ 48260684Skaiw 49260684Skaiw#ifndef yynerrs 50260684Skaiw#define yynerrs varsyntax_calc1_nerrs 51260684Skaiw#endif /* yynerrs */ 52260684Skaiw 53260684Skaiw#ifndef yyerrflag 54260684Skaiw#define yyerrflag varsyntax_calc1_errflag 55260684Skaiw#endif /* yyerrflag */ 56260684Skaiw 57260684Skaiw#ifndef yylhs 58260684Skaiw#define yylhs varsyntax_calc1_lhs 59260684Skaiw#endif /* yylhs */ 60260684Skaiw 61260684Skaiw#ifndef yylen 62260684Skaiw#define yylen varsyntax_calc1_len 63260684Skaiw#endif /* yylen */ 64260684Skaiw 65260684Skaiw#ifndef yydefred 66260684Skaiw#define yydefred varsyntax_calc1_defred 67260684Skaiw#endif /* yydefred */ 68260684Skaiw 69260684Skaiw#ifndef yystos 70260684Skaiw#define yystos varsyntax_calc1_stos 71260684Skaiw#endif /* yystos */ 72260684Skaiw 73260684Skaiw#ifndef yydgoto 74260684Skaiw#define yydgoto varsyntax_calc1_dgoto 75260684Skaiw#endif /* yydgoto */ 76260684Skaiw 77260684Skaiw#ifndef yysindex 78260684Skaiw#define yysindex varsyntax_calc1_sindex 79260684Skaiw#endif /* yysindex */ 80260684Skaiw 81260684Skaiw#ifndef yyrindex 82260684Skaiw#define yyrindex varsyntax_calc1_rindex 83260684Skaiw#endif /* yyrindex */ 84260684Skaiw 85260684Skaiw#ifndef yygindex 86260684Skaiw#define yygindex varsyntax_calc1_gindex 87260684Skaiw#endif /* yygindex */ 88260684Skaiw 89260684Skaiw#ifndef yytable 90276371Semaste#define yytable varsyntax_calc1_table 91260684Skaiw#endif /* yytable */ 92260684Skaiw 93260684Skaiw#ifndef yycheck 94260684Skaiw#define yycheck varsyntax_calc1_check 95260684Skaiw#endif /* yycheck */ 96260684Skaiw 97260684Skaiw#ifndef yyname 98260684Skaiw#define yyname varsyntax_calc1_name 99260684Skaiw#endif /* yyname */ 100260684Skaiw 101260684Skaiw#ifndef yyrule 102260684Skaiw#define yyrule varsyntax_calc1_rule 103260684Skaiw#endif /* yyrule */ 104260684Skaiw 105260684Skaiw#if YYBTYACC 106260684Skaiw 107260684Skaiw#ifndef yycindex 108260684Skaiw#define yycindex varsyntax_calc1_cindex 109260684Skaiw#endif /* yycindex */ 110260684Skaiw 111260684Skaiw#ifndef yyctable 112260684Skaiw#define yyctable varsyntax_calc1_ctable 113260684Skaiw#endif /* yyctable */ 114260684Skaiw 115260684Skaiw#endif /* YYBTYACC */ 116260684Skaiw 117260684Skaiw#define YYPREFIX "varsyntax_calc1_" 118260684Skaiw 119260684Skaiw#define YYPURE 0 120260684Skaiw 121260684Skaiw#line 3 "varsyntax_calc1.y" 122260684Skaiw 123260684Skaiw/* http://dinosaur.compilertools.net/yacc/index.html * /*/ 124260684Skaiw 125260684Skaiw#include <stdlib.h> 126260684Skaiw#include <stdio.h> 127260684Skaiw#include <ctype.h> 128260684Skaiw#include <math.h> 129260684Skaiw 130260684Skaiwtypedef struct interval 131260684Skaiw{ 132260684Skaiw double lo, hi; 133260684Skaiw} 134260684SkaiwINTERVAL; 135260684Skaiw 136260684SkaiwINTERVAL vmul(double, double, INTERVAL); 137260684SkaiwINTERVAL vdiv(double, double, INTERVAL); 138260684Skaiw 139260684Skaiwextern int yylex(void); 140260684Skaiwstatic void yyerror(const char *s); 141260684Skaiw 142260684Skaiwint dcheck(INTERVAL); 143260684Skaiw 144260684Skaiwdouble dreg[26]; 145260684SkaiwINTERVAL vreg[26]; 146260684Skaiw 147260684Skaiw#line 32 "varsyntax_calc1.y" 148260684Skaiw#ifdef YYSTYPE 149260684Skaiw#undef YYSTYPE_IS_DECLARED 150260684Skaiw#define YYSTYPE_IS_DECLARED 1 151260684Skaiw#endif 152260684Skaiw#ifndef YYSTYPE_IS_DECLARED 153260684Skaiw#define YYSTYPE_IS_DECLARED 1 154260684Skaiwtypedef union 155260684Skaiw{ 156260684Skaiw int ival; /* dreg & vreg array index values*/ 157260684Skaiw double dval; /* floating point values*/ 158260684Skaiw INTERVAL vval; /* interval values*/ 159260684Skaiw} YYSTYPE; 160260684Skaiw#endif /* !YYSTYPE_IS_DECLARED */ 161260684Skaiw#line 162 "varsyntax_calc1.tab.c" 162260684Skaiw 163260684Skaiw/* compatibility with bison */ 164260684Skaiw#ifdef YYPARSE_PARAM 165260684Skaiw/* compatibility with FreeBSD */ 166260684Skaiw# ifdef YYPARSE_PARAM_TYPE 167260684Skaiw# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM) 168260684Skaiw# else 169260684Skaiw# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM) 170260684Skaiw# endif 171260684Skaiw#else 172260684Skaiw# define YYPARSE_DECL() yyparse(void) 173260684Skaiw#endif 174260684Skaiw 175260684Skaiw/* Parameters sent to lex. */ 176260684Skaiw#ifdef YYLEX_PARAM 177260684Skaiw# define YYLEX_DECL() yylex(void *YYLEX_PARAM) 178260684Skaiw# define YYLEX yylex(YYLEX_PARAM) 179260684Skaiw#else 180260684Skaiw# define YYLEX_DECL() yylex(void) 181260684Skaiw# define YYLEX yylex() 182260684Skaiw#endif 183260684Skaiw 184260684Skaiw/* Parameters sent to yyerror. */ 185260684Skaiw#ifndef YYERROR_DECL 186260684Skaiw#define YYERROR_DECL() yyerror(const char *s) 187260684Skaiw#endif 188260684Skaiw#ifndef YYERROR_CALL 189260684Skaiw#define YYERROR_CALL(msg) yyerror(msg) 190260684Skaiw#endif 191260684Skaiw 192260684Skaiwextern int YYPARSE_DECL(); 193260684Skaiw 194260684Skaiw#define DREG 257 195260684Skaiw#define VREG 258 196260684Skaiw#define CONST 259 197260684Skaiw#define UMINUS 260 198260684Skaiw#define YYERRCODE 256 199260684Skaiwtypedef short YYINT; 200260684Skaiwstatic const YYINT varsyntax_calc1_lhs[] = { -1, 201260684Skaiw 3, 3, 0, 0, 0, 0, 0, 1, 1, 1, 202260684Skaiw 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 203260684Skaiw 2, 2, 2, 2, 2, 2, 2, 2, 204260684Skaiw}; 205260684Skaiwstatic const YYINT varsyntax_calc1_len[] = { 2, 206260684Skaiw 0, 2, 2, 2, 4, 4, 2, 1, 1, 3, 207260684Skaiw 3, 3, 3, 2, 3, 1, 5, 1, 3, 3, 208260684Skaiw 3, 3, 3, 3, 3, 3, 2, 3, 209260684Skaiw}; 210260684Skaiwstatic const YYINT varsyntax_calc1_defred[] = { 0, 211260684Skaiw 0, 0, 0, 8, 0, 0, 0, 0, 0, 7, 212276371Semaste 0, 0, 9, 18, 14, 27, 0, 0, 0, 0, 213260684Skaiw 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 214260684Skaiw 0, 0, 0, 15, 0, 28, 0, 0, 0, 0, 215260684Skaiw 12, 24, 13, 26, 0, 0, 23, 25, 14, 0, 216260684Skaiw 0, 0, 0, 0, 5, 6, 0, 0, 0, 12, 217260684Skaiw 13, 17, 218260684Skaiw}; 219260684Skaiwstatic const YYINT varsyntax_calc1_stos[] = { 0, 220260684Skaiw 256, 257, 258, 259, 45, 40, 262, 263, 264, 10, 221260684Skaiw 61, 61, 257, 258, 263, 264, 263, 264, 43, 45, 222260684Skaiw 42, 47, 10, 43, 45, 42, 47, 10, 45, 40, 223260684Skaiw 263, 263, 264, 41, 44, 41, 263, 264, 263, 264, 224260684Skaiw 263, 264, 263, 264, 264, 264, 264, 264, 263, 263, 225260684Skaiw 43, 45, 42, 47, 10, 10, 263, 263, 263, 263, 226260684Skaiw 263, 41, 227260684Skaiw}; 228260684Skaiwstatic const YYINT varsyntax_calc1_dgoto[] = { 7, 229260684Skaiw 32, 9, 0, 230260684Skaiw}; 231260684Skaiwstatic const YYINT varsyntax_calc1_sindex[] = { -40, 232260684Skaiw -8, -48, -47, 0, -37, -37, 0, 2, 17, 0, 233260684Skaiw -34, -37, 0, 0, 0, 0, -25, 90, -37, -37, 234260684Skaiw -37, -37, 0, -37, -37, -37, -37, 0, -34, -34, 235260684Skaiw 25, 125, 31, 0, -34, 0, -11, 37, -11, 37, 236260684Skaiw 0, 0, 0, 0, 37, 37, 0, 0, 0, 111, 237260684Skaiw -34, -34, -34, -34, 0, 0, 118, 69, 69, 0, 238260684Skaiw 0, 0, 239260684Skaiw}; 240260684Skaiwstatic const YYINT varsyntax_calc1_rindex[] = { 0, 241260684Skaiw 0, 38, 44, 0, 0, 0, 0, 0, 0, 0, 242260684Skaiw 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 243260684Skaiw 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244260684Skaiw 0, -9, 0, 0, 0, 0, 51, -3, 56, 61, 245260684Skaiw 0, 0, 0, 0, 67, 72, 0, 0, 0, 0, 246260684Skaiw 0, 0, 0, 0, 0, 0, 0, 78, 83, 0, 247260684Skaiw 0, 0, 248260684Skaiw}; 249260684Skaiw#if YYBTYACC 250260684Skaiwstatic const YYINT varsyntax_calc1_cindex[] = { 0, 251260684Skaiw 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 252260684Skaiw 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 253260684Skaiw 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254260684Skaiw 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255260684Skaiw 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 256260684Skaiw 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 257260684Skaiw 0, 0, 258260684Skaiw}; 259260684Skaiw#endif 260260684Skaiwstatic const YYINT varsyntax_calc1_gindex[] = { 0, 261260684Skaiw 4, 124, 0, 262260684Skaiw}; 263260684Skaiw#define YYTABLESIZE 225 264260684Skaiwstatic const YYINT varsyntax_calc1_table[] = { 6, 265260684Skaiw 16, 10, 6, 8, 5, 30, 20, 5, 15, 17, 266260684Skaiw 29, 23, 11, 12, 31, 34, 21, 19, 35, 20, 267260684Skaiw 0, 22, 37, 39, 41, 43, 28, 0, 0, 0, 268260684Skaiw 21, 16, 49, 50, 55, 22, 0, 20, 57, 20, 269260684Skaiw 56, 20, 0, 21, 19, 0, 20, 9, 22, 0, 270260684Skaiw 0, 0, 0, 18, 58, 59, 60, 61, 26, 24, 271260684Skaiw 10, 25, 0, 27, 0, 11, 53, 51, 0, 52, 272260684Skaiw 22, 54, 26, 24, 0, 25, 19, 27, 26, 9, 273260684Skaiw 9, 21, 9, 27, 9, 18, 18, 10, 18, 0, 274260684Skaiw 18, 10, 11, 10, 10, 10, 11, 0, 11, 11, 275260684Skaiw 11, 22, 0, 22, 0, 22, 0, 19, 0, 19, 276260684Skaiw 53, 19, 21, 0, 21, 54, 21, 0, 10, 0, 277260684Skaiw 10, 0, 10, 11, 0, 11, 0, 11, 16, 18, 278260684Skaiw 36, 26, 24, 0, 25, 33, 27, 0, 0, 0, 279260684Skaiw 0, 0, 38, 40, 42, 44, 0, 45, 46, 47, 280260684Skaiw 48, 34, 53, 51, 0, 52, 0, 54, 62, 53, 281260684Skaiw 51, 0, 52, 0, 54, 0, 21, 19, 0, 20, 282260684Skaiw 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 283260684Skaiw 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 284260684Skaiw 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 285260684Skaiw 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 286260684Skaiw 0, 0, 0, 0, 0, 1, 2, 3, 4, 13, 287260684Skaiw 14, 4, 13, 0, 4, 288260684Skaiw}; 289260684Skaiwstatic const YYINT varsyntax_calc1_check[] = { 40, 290260684Skaiw 10, 10, 40, 0, 45, 40, 10, 45, 5, 6, 291260684Skaiw 45, 10, 61, 61, 11, 41, 42, 43, 44, 45, 292260684Skaiw -1, 47, 19, 20, 21, 22, 10, -1, -1, -1, 293260684Skaiw 42, 41, 29, 30, 10, 47, -1, 41, 35, 43, 294260684Skaiw 10, 45, -1, 42, 43, -1, 45, 10, 47, -1, 295260684Skaiw -1, -1, -1, 10, 51, 52, 53, 54, 42, 43, 296260684Skaiw 10, 45, -1, 47, -1, 10, 42, 43, -1, 45, 297260684Skaiw 10, 47, 42, 43, -1, 45, 10, 47, 42, 42, 298260684Skaiw 43, 10, 45, 47, 47, 42, 43, 10, 45, -1, 299260684Skaiw 47, 41, 10, 43, 44, 45, 41, -1, 43, 44, 300260684Skaiw 45, 41, -1, 43, -1, 45, -1, 41, -1, 43, 301260684Skaiw 42, 45, 41, -1, 43, 47, 45, -1, 41, -1, 302260684Skaiw 43, -1, 45, 41, -1, 43, -1, 45, 5, 6, 303260684Skaiw 41, 42, 43, -1, 45, 12, 47, -1, -1, -1, 304260684Skaiw -1, -1, 19, 20, 21, 22, -1, 24, 25, 26, 305260684Skaiw 27, 41, 42, 43, -1, 45, -1, 47, 41, 42, 306260684Skaiw 43, -1, 45, -1, 47, -1, 42, 43, -1, 45, 307260684Skaiw -1, 47, -1, -1, -1, -1, -1, -1, -1, -1, 308260684Skaiw -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 309260684Skaiw -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 310260684Skaiw -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 311260684Skaiw -1, -1, -1, -1, -1, 256, 257, 258, 259, 257, 312260684Skaiw 258, 259, 257, -1, 259, 313260684Skaiw}; 314260684Skaiw#define YYFINAL 7 315260684Skaiw#ifndef YYDEBUG 316260684Skaiw#define YYDEBUG 0 317260684Skaiw#endif 318260684Skaiw#define YYMAXTOKEN 260 319260684Skaiw#define YYUNDFTOKEN 266 320260684Skaiw#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) 321260684Skaiw#if YYDEBUG 322260684Skaiwstatic const char *const varsyntax_calc1_name[] = { 323260684Skaiw 324260684Skaiw"$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, 325260684Skaiw0,0,0,0,0,0,"'('","')'","'*'","'+'","','","'-'",0,"'/'",0,0,0,0,0,0,0,0,0,0,0,0, 326260684Skaiw0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 327260684Skaiw0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 328260684Skaiw0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 329260684Skaiw0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 330260684Skaiw0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 331260684Skaiw"error","DREG","VREG","CONST","UMINUS","$accept","line","dexp","vexp","lines", 332260684Skaiw"illegal-symbol", 333260684Skaiw}; 334260684Skaiwstatic const char *const varsyntax_calc1_rule[] = { 335260684Skaiw"$accept : line", 336260684Skaiw"lines :", 337260684Skaiw"lines : lines line", 338260684Skaiw"line : dexp '\\n'", 339260684Skaiw"line : vexp '\\n'", 340260684Skaiw"line : DREG '=' dexp '\\n'", 341260684Skaiw"line : VREG '=' vexp '\\n'", 342260684Skaiw"line : error '\\n'", 343260684Skaiw"dexp : CONST", 344260684Skaiw"dexp : DREG", 345260684Skaiw"dexp : dexp '+' dexp", 346260684Skaiw"dexp : dexp '-' dexp", 347260684Skaiw"dexp : dexp '*' dexp", 348260684Skaiw"dexp : dexp '/' dexp", 349260684Skaiw"dexp : '-' dexp", 350260684Skaiw"dexp : '(' dexp ')'", 351260684Skaiw"vexp : dexp", 352260684Skaiw"vexp : '(' dexp ',' dexp ')'", 353260684Skaiw"vexp : VREG", 354260684Skaiw"vexp : vexp '+' vexp", 355260684Skaiw"vexp : dexp '+' vexp", 356260684Skaiw"vexp : vexp '-' vexp", 357260684Skaiw"vexp : dexp '-' vexp", 358260684Skaiw"vexp : vexp '*' vexp", 359260684Skaiw"vexp : dexp '*' vexp", 360260684Skaiw"vexp : vexp '/' vexp", 361260684Skaiw"vexp : dexp '/' vexp", 362260684Skaiw"vexp : '-' vexp", 363260684Skaiw"vexp : '(' vexp ')'", 364260684Skaiw 365260684Skaiw}; 366260684Skaiw#endif 367260684Skaiw 368260684Skaiwint yydebug; 369260684Skaiwint yynerrs; 370260684Skaiw 371260684Skaiwint yyerrflag; 372260684Skaiwint yychar; 373260684SkaiwYYSTYPE yyval; 374260684SkaiwYYSTYPE yylval; 375260684Skaiw#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 376260684SkaiwYYLTYPE yyloc; /* position returned by actions */ 377260684SkaiwYYLTYPE yylloc; /* position from the lexer */ 378260684Skaiw#endif 379260684Skaiw 380260684Skaiw#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 381260684Skaiw#ifndef YYLLOC_DEFAULT 382260684Skaiw#define YYLLOC_DEFAULT(loc, rhs, n) \ 383260684Skaiwdo \ 384260684Skaiw{ \ 385260684Skaiw if (n == 0) \ 386260684Skaiw { \ 387260684Skaiw (loc).first_line = ((rhs)[-1]).last_line; \ 388260684Skaiw (loc).first_column = ((rhs)[-1]).last_column; \ 389260684Skaiw (loc).last_line = ((rhs)[-1]).last_line; \ 390260684Skaiw (loc).last_column = ((rhs)[-1]).last_column; \ 391260684Skaiw } \ 392260684Skaiw else \ 393260684Skaiw { \ 394260684Skaiw (loc).first_line = ((rhs)[ 0 ]).first_line; \ 395260684Skaiw (loc).first_column = ((rhs)[ 0 ]).first_column; \ 396260684Skaiw (loc).last_line = ((rhs)[n-1]).last_line; \ 397260684Skaiw (loc).last_column = ((rhs)[n-1]).last_column; \ 398260684Skaiw } \ 399260684Skaiw} while (0) 400260684Skaiw#endif /* YYLLOC_DEFAULT */ 401260684Skaiw#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ 402260684Skaiw#if YYBTYACC 403260684Skaiw 404260684Skaiw#ifndef YYLVQUEUEGROWTH 405260684Skaiw#define YYLVQUEUEGROWTH 32 406260684Skaiw#endif 407260684Skaiw#endif /* YYBTYACC */ 408260684Skaiw 409260684Skaiw/* define the initial stack-sizes */ 410260684Skaiw#ifdef YYSTACKSIZE 411260684Skaiw#undef YYMAXDEPTH 412260684Skaiw#define YYMAXDEPTH YYSTACKSIZE 413260684Skaiw#else 414260684Skaiw#ifdef YYMAXDEPTH 415260684Skaiw#define YYSTACKSIZE YYMAXDEPTH 416260684Skaiw#else 417260684Skaiw#define YYSTACKSIZE 10000 418260684Skaiw#define YYMAXDEPTH 10000 419260684Skaiw#endif 420260684Skaiw#endif 421260684Skaiw 422260684Skaiw#ifndef YYINITSTACKSIZE 423260684Skaiw#define YYINITSTACKSIZE 200 424260684Skaiw#endif 425260684Skaiw 426260684Skaiwtypedef struct { 427260684Skaiw unsigned stacksize; 428260684Skaiw short *s_base; 429260684Skaiw short *s_mark; 430260684Skaiw short *s_last; 431260684Skaiw YYSTYPE *l_base; 432260684Skaiw YYSTYPE *l_mark; 433260684Skaiw#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 434260684Skaiw YYLTYPE *p_base; 435260684Skaiw YYLTYPE *p_mark; 436260684Skaiw#endif 437260684Skaiw} YYSTACKDATA; 438260684Skaiw#if YYBTYACC 439260684Skaiw 440260684Skaiwstruct YYParseState_s 441260684Skaiw{ 442260684Skaiw struct YYParseState_s *save; /* Previously saved parser state */ 443260684Skaiw YYSTACKDATA yystack; /* saved parser stack */ 444260684Skaiw int state; /* saved parser state */ 445260684Skaiw int errflag; /* saved error recovery status */ 446260684Skaiw int lexeme; /* saved index of the conflict lexeme in the lexical queue */ 447260684Skaiw YYINT ctry; /* saved index in yyctable[] for this conflict */ 448260684Skaiw}; 449260684Skaiwtypedef struct YYParseState_s YYParseState; 450260684Skaiw#endif /* YYBTYACC */ 451260684Skaiw/* variables for the parser stack */ 452260684Skaiwstatic YYSTACKDATA yystack; 453260684Skaiw#if YYBTYACC 454260684Skaiw 455260684Skaiw/* Current parser state */ 456260684Skaiwstatic YYParseState *yyps = 0; 457260684Skaiw 458260684Skaiw/* yypath != NULL: do the full parse, starting at *yypath parser state. */ 459260684Skaiwstatic YYParseState *yypath = 0; 460260684Skaiw 461260684Skaiw/* Base of the lexical value queue */ 462260684Skaiwstatic YYSTYPE *yylvals = 0; 463260684Skaiw 464260684Skaiw/* Current position at lexical value queue */ 465260684Skaiwstatic YYSTYPE *yylvp = 0; 466260684Skaiw 467260684Skaiw/* End position of lexical value queue */ 468260684Skaiwstatic YYSTYPE *yylve = 0; 469260684Skaiw 470260684Skaiw/* The last allocated position at the lexical value queue */ 471260684Skaiwstatic YYSTYPE *yylvlim = 0; 472260684Skaiw 473260684Skaiw#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 474260684Skaiw/* Base of the lexical position queue */ 475260684Skaiwstatic YYLTYPE *yylpsns = 0; 476276371Semaste 477260684Skaiw/* Current position at lexical position queue */ 478260684Skaiwstatic YYLTYPE *yylpp = 0; 479260684Skaiw 480260684Skaiw/* End position of lexical position queue */ 481260684Skaiwstatic YYLTYPE *yylpe = 0; 482260684Skaiw 483260684Skaiw/* The last allocated position at the lexical position queue */ 484260684Skaiwstatic YYLTYPE *yylplim = 0; 485260684Skaiw#endif 486260684Skaiw 487260684Skaiw/* Current position at lexical token queue */ 488260684Skaiwstatic short *yylexp = 0; 489260684Skaiw 490260684Skaiwstatic short *yylexemes = 0; 491260684Skaiw#endif /* YYBTYACC */ 492260684Skaiw#line 178 "varsyntax_calc1.y" 493260684Skaiw /* beginning of subroutines section */ 494260684Skaiw 495260684Skaiw#define BSZ 50 /* buffer size for floating point numbers */ 496260684Skaiw 497260684Skaiw /* lexical analysis */ 498260684Skaiw 499260684Skaiwstatic void 500260684Skaiwyyerror(const char *s) 501260684Skaiw{ 502260684Skaiw fprintf(stderr, "%s\n", s); 503260684Skaiw} 504260684Skaiw 505260684Skaiwint 506260684Skaiwyylex(void) 507260684Skaiw{ 508260684Skaiw int c; 509260684Skaiw 510260684Skaiw while ((c = getchar()) == ' ') 511260684Skaiw { /* skip over blanks */ 512260684Skaiw } 513260684Skaiw 514260684Skaiw if (isupper(c)) 515260684Skaiw { 516260684Skaiw yylval.ival = c - 'A'; 517260684Skaiw return (VREG); 518260684Skaiw } 519260684Skaiw if (islower(c)) 520260684Skaiw { 521260684Skaiw yylval.ival = c - 'a'; 522260684Skaiw return (DREG); 523260684Skaiw } 524260684Skaiw 525260684Skaiw if (isdigit(c) || c == '.') 526260684Skaiw { 527260684Skaiw /* gobble up digits, points, exponents */ 528260684Skaiw char buf[BSZ + 1], *cp = buf; 529260684Skaiw int dot = 0, expr = 0; 530260684Skaiw 531260684Skaiw for (; (cp - buf) < BSZ; ++cp, c = getchar()) 532260684Skaiw { 533260684Skaiw 534260684Skaiw *cp = (char) c; 535260684Skaiw if (isdigit(c)) 536260684Skaiw continue; 537260684Skaiw if (c == '.') 538260684Skaiw { 539260684Skaiw if (dot++ || expr) 540260684Skaiw return ('.'); /* will cause syntax error */ 541260684Skaiw continue; 542260684Skaiw } 543260684Skaiw 544260684Skaiw if (c == 'e') 545260684Skaiw { 546260684Skaiw if (expr++) 547260684Skaiw return ('e'); /* will cause syntax error */ 548260684Skaiw continue; 549260684Skaiw } 550260684Skaiw 551260684Skaiw /* end of number */ 552260684Skaiw break; 553260684Skaiw } 554260684Skaiw *cp = '\0'; 555260684Skaiw 556260684Skaiw if ((cp - buf) >= BSZ) 557260684Skaiw printf("constant too long: truncated\n"); 558260684Skaiw else 559260684Skaiw ungetc(c, stdin); /* push back last char read */ 560260684Skaiw yylval.dval = atof(buf); 561260684Skaiw return (CONST); 562260684Skaiw } 563260684Skaiw return (c); 564260684Skaiw} 565260684Skaiw 566260684Skaiwstatic INTERVAL 567260684Skaiwhilo(double a, double b, double c, double d) 568260684Skaiw{ 569260684Skaiw /* returns the smallest interval containing a, b, c, and d */ 570260684Skaiw /* used by *, / routines */ 571260684Skaiw INTERVAL v; 572260684Skaiw 573260684Skaiw if (a > b) 574260684Skaiw { 575260684Skaiw v.hi = a; 576260684Skaiw v.lo = b; 577260684Skaiw } 578260684Skaiw else 579260684Skaiw { 580260684Skaiw v.hi = b; 581260684Skaiw v.lo = a; 582260684Skaiw } 583260684Skaiw 584260684Skaiw if (c > d) 585260684Skaiw { 586260684Skaiw if (c > v.hi) 587260684Skaiw v.hi = c; 588260684Skaiw if (d < v.lo) 589260684Skaiw v.lo = d; 590260684Skaiw } 591260684Skaiw else 592260684Skaiw { 593260684Skaiw if (d > v.hi) 594260684Skaiw v.hi = d; 595260684Skaiw if (c < v.lo) 596260684Skaiw v.lo = c; 597260684Skaiw } 598260684Skaiw return (v); 599260684Skaiw} 600260684Skaiw 601260684SkaiwINTERVAL 602260684Skaiwvmul(double a, double b, INTERVAL v) 603260684Skaiw{ 604260684Skaiw return (hilo(a * v.hi, a * v.lo, b * v.hi, b * v.lo)); 605260684Skaiw} 606260684Skaiw 607260684Skaiwint 608260684Skaiwdcheck(INTERVAL v) 609260684Skaiw{ 610260684Skaiw if (v.hi >= 0. && v.lo <= 0.) 611260684Skaiw { 612260684Skaiw printf("divisor interval contains 0.\n"); 613260684Skaiw return (1); 614260684Skaiw } 615260684Skaiw return (0); 616260684Skaiw} 617260684Skaiw 618260684SkaiwINTERVAL 619260684Skaiwvdiv(double a, double b, INTERVAL v) 620260684Skaiw{ 621260684Skaiw return (hilo(a / v.hi, a / v.lo, b / v.hi, b / v.lo)); 622260684Skaiw} 623260684Skaiw#line 624 "varsyntax_calc1.tab.c" 624260684Skaiw 625260684Skaiw/* For use in generated program */ 626260684Skaiw#define yydepth (int)(yystack.s_mark - yystack.s_base) 627260684Skaiw#if YYBTYACC 628260684Skaiw#define yytrial (yyps->save) 629260684Skaiw#endif /* YYBTYACC */ 630260684Skaiw 631260684Skaiw#if YYDEBUG 632260684Skaiw#include <stdio.h> /* needed for printf */ 633260684Skaiw#endif 634260684Skaiw 635260684Skaiw#include <stdlib.h> /* needed for malloc, etc */ 636260684Skaiw#include <string.h> /* needed for memset */ 637260684Skaiw 638260684Skaiw/* allocate initial stack or double stack size, up to YYMAXDEPTH */ 639260684Skaiwstatic int yygrowstack(YYSTACKDATA *data) 640260684Skaiw{ 641260684Skaiw int i; 642260684Skaiw unsigned newsize; 643260684Skaiw short *newss; 644260684Skaiw YYSTYPE *newvs; 645260684Skaiw#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 646260684Skaiw YYLTYPE *newps; 647260684Skaiw#endif 648260684Skaiw 649260684Skaiw if ((newsize = data->stacksize) == 0) 650260684Skaiw newsize = YYINITSTACKSIZE; 651260684Skaiw else if (newsize >= YYMAXDEPTH) 652260684Skaiw return YYENOMEM; 653260684Skaiw else if ((newsize *= 2) > YYMAXDEPTH) 654260684Skaiw newsize = YYMAXDEPTH; 655260684Skaiw 656260684Skaiw i = (int) (data->s_mark - data->s_base); 657260684Skaiw newss = (short *)realloc(data->s_base, newsize * sizeof(*newss)); 658260684Skaiw if (newss == 0) 659260684Skaiw return YYENOMEM; 660260684Skaiw 661260684Skaiw data->s_base = newss; 662260684Skaiw data->s_mark = newss + i; 663260684Skaiw 664260684Skaiw newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs)); 665260684Skaiw if (newvs == 0) 666260684Skaiw return YYENOMEM; 667260684Skaiw 668260684Skaiw data->l_base = newvs; 669260684Skaiw data->l_mark = newvs + i; 670260684Skaiw 671260684Skaiw#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 672260684Skaiw newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps)); 673260684Skaiw if (newps == 0) 674260684Skaiw return YYENOMEM; 675260684Skaiw 676260684Skaiw data->p_base = newps; 677260684Skaiw data->p_mark = newps + i; 678260684Skaiw#endif 679260684Skaiw 680260684Skaiw data->stacksize = newsize; 681260684Skaiw data->s_last = data->s_base + newsize - 1; 682260684Skaiw 683260684Skaiw#if YYDEBUG 684260684Skaiw if (yydebug) 685260684Skaiw fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize); 686260684Skaiw#endif 687260684Skaiw return 0; 688260684Skaiw} 689260684Skaiw 690260684Skaiw#if YYPURE || defined(YY_NO_LEAKS) 691260684Skaiwstatic void yyfreestack(YYSTACKDATA *data) 692260684Skaiw{ 693260684Skaiw free(data->s_base); 694260684Skaiw free(data->l_base); 695260684Skaiw#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 696260684Skaiw free(data->p_base); 697260684Skaiw#endif 698260684Skaiw memset(data, 0, sizeof(*data)); 699260684Skaiw} 700260684Skaiw#else 701260684Skaiw#define yyfreestack(data) /* nothing */ 702260684Skaiw#endif /* YYPURE || defined(YY_NO_LEAKS) */ 703260684Skaiw#if YYBTYACC 704260684Skaiw 705260684Skaiwstatic YYParseState * 706260684SkaiwyyNewState(unsigned size) 707260684Skaiw{ 708260684Skaiw YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState)); 709260684Skaiw if (p == NULL) return NULL; 710260684Skaiw 711260684Skaiw p->yystack.stacksize = size; 712260684Skaiw if (size == 0) 713260684Skaiw { 714260684Skaiw p->yystack.s_base = NULL; 715260684Skaiw p->yystack.l_base = NULL; 716260684Skaiw#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 717260684Skaiw p->yystack.p_base = NULL; 718260684Skaiw#endif 719260684Skaiw return p; 720260684Skaiw } 721260684Skaiw p->yystack.s_base = (short *) malloc(size * sizeof(short)); 722260684Skaiw if (p->yystack.s_base == NULL) return NULL; 723260684Skaiw p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE)); 724260684Skaiw if (p->yystack.l_base == NULL) return NULL; 725260684Skaiw memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE)); 726260684Skaiw#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 727260684Skaiw p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE)); 728260684Skaiw if (p->yystack.p_base == NULL) return NULL; 729260684Skaiw memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE)); 730260684Skaiw#endif 731260684Skaiw 732260684Skaiw return p; 733260684Skaiw} 734260684Skaiw 735260684Skaiwstatic void 736260684SkaiwyyFreeState(YYParseState *p) 737260684Skaiw{ 738260684Skaiw yyfreestack(&p->yystack); 739260684Skaiw free(p); 740260684Skaiw} 741260684Skaiw#endif /* YYBTYACC */ 742260684Skaiw 743260684Skaiw#define YYABORT goto yyabort 744260684Skaiw#define YYREJECT goto yyabort 745260684Skaiw#define YYACCEPT goto yyaccept 746260684Skaiw#define YYERROR goto yyerrlab 747260684Skaiw#if YYBTYACC 748260684Skaiw#define YYVALID do { if (yyps->save) goto yyvalid; } while(0) 749260684Skaiw#define YYVALID_NESTED do { if (yyps->save && \ 750260684Skaiw yyps->save->save == 0) goto yyvalid; } while(0) 751260684Skaiw#endif /* YYBTYACC */ 752260684Skaiw 753260684Skaiwint 754260684SkaiwYYPARSE_DECL() 755260684Skaiw{ 756260684Skaiw int yym, yyn, yystate, yyresult; 757260684Skaiw#if YYBTYACC 758260684Skaiw int yynewerrflag; 759260684Skaiw YYParseState *yyerrctx = NULL; 760260684Skaiw#endif /* YYBTYACC */ 761260684Skaiw#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 762260684Skaiw YYLTYPE yyerror_loc_range[2]; /* position of error start & end */ 763260684Skaiw#endif 764260684Skaiw#if YYDEBUG 765260684Skaiw const char *yys; 766260684Skaiw 767260684Skaiw if ((yys = getenv("YYDEBUG")) != 0) 768260684Skaiw { 769260684Skaiw yyn = *yys; 770260684Skaiw if (yyn >= '0' && yyn <= '9') 771260684Skaiw yydebug = yyn - '0'; 772260684Skaiw } 773260684Skaiw if (yydebug) 774260684Skaiw fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX); 775260684Skaiw#endif 776 777#if YYBTYACC 778 yyps = yyNewState(0); if (yyps == 0) goto yyenomem; 779 yyps->save = 0; 780#endif /* YYBTYACC */ 781 yynerrs = 0; 782 yyerrflag = 0; 783 yychar = YYEMPTY; 784 yystate = 0; 785 786#if YYPURE 787 memset(&yystack, 0, sizeof(yystack)); 788#endif 789 790 if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; 791 yystack.s_mark = yystack.s_base; 792 yystack.l_mark = yystack.l_base; 793#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 794 yystack.p_mark = yystack.p_base; 795#endif 796 yystate = 0; 797 *yystack.s_mark = 0; 798 799yyloop: 800 if ((yyn = yydefred[yystate]) != 0) goto yyreduce; 801 if (yychar < 0) 802 { 803#if YYBTYACC 804 do { 805 if (yylvp < yylve) 806 { 807 /* we're currently re-reading tokens */ 808 yylval = *yylvp++; 809#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 810 yylloc = *yylpp++; 811#endif 812 yychar = *yylexp++; 813 break; 814 } 815 if (yyps->save) 816 { 817 /* in trial mode; save scanner results for future parse attempts */ 818 if (yylvp == yylvlim) 819 { /* Enlarge lexical value queue */ 820 int p = yylvp - yylvals; 821 int s = yylvlim - yylvals; 822 823 s += YYLVQUEUEGROWTH; 824 if ((yylexemes = (short *) realloc(yylexemes, s * sizeof(short))) == NULL) goto yyenomem; 825 if ((yylvals = (YYSTYPE *) realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; 826#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 827 if ((yylpsns = (YYLTYPE *) realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; 828#endif 829 yylvp = yylve = yylvals + p; 830 yylvlim = yylvals + s; 831#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 832 yylpp = yylpe = yylpsns + p; 833 yylplim = yylpsns + s; 834#endif 835 yylexp = yylexemes + p; 836 } 837 *yylexp = (short) YYLEX; 838 *yylvp++ = yylval; 839 yylve++; 840#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 841 *yylpp++ = yylloc; 842 yylpe++; 843#endif 844 yychar = *yylexp++; 845 break; 846 } 847 /* normal operation, no conflict encountered */ 848#endif /* YYBTYACC */ 849 yychar = YYLEX; 850#if YYBTYACC 851 } while (0); 852#endif /* YYBTYACC */ 853 if (yychar < 0) yychar = YYEOF; 854 /* if ((yychar = YYLEX) < 0) yychar = YYEOF; */ 855#if YYDEBUG 856 if (yydebug) 857 { 858 yys = yyname[YYTRANSLATE(yychar)]; 859 fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)", 860 YYDEBUGSTR, yydepth, yystate, yychar, yys); 861#ifdef YYSTYPE_TOSTRING 862#if YYBTYACC 863 if (!yytrial) 864#endif /* YYBTYACC */ 865 fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval)); 866#endif 867 fputc('\n', stderr); 868 } 869#endif 870 } 871#if YYBTYACC 872 873 /* Do we have a conflict? */ 874 if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 && 875 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) 876 { 877 YYINT ctry; 878 879 if (yypath) 880 { 881 YYParseState *save; 882#if YYDEBUG 883 if (yydebug) 884 fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n", 885 YYDEBUGSTR, yydepth, yystate); 886#endif 887 /* Switch to the next conflict context */ 888 save = yypath; 889 yypath = save->save; 890 save->save = NULL; 891 ctry = save->ctry; 892 if (save->state != yystate) YYABORT; 893 yyFreeState(save); 894 895 } 896 else 897 { 898 899 /* Unresolved conflict - start/continue trial parse */ 900 YYParseState *save; 901#if YYDEBUG 902 if (yydebug) 903 { 904 fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate); 905 if (yyps->save) 906 fputs("ALREADY in conflict, continuing trial parse.\n", stderr); 907 else 908 fputs("Starting trial parse.\n", stderr); 909 } 910#endif 911 save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); 912 if (save == NULL) goto yyenomem; 913 save->save = yyps->save; 914 save->state = yystate; 915 save->errflag = yyerrflag; 916 save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base); 917 memcpy (save->yystack.s_base, yystack.s_base, (yystack.s_mark - yystack.s_base + 1) * sizeof(short)); 918 save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base); 919 memcpy (save->yystack.l_base, yystack.l_base, (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); 920#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 921 save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base); 922 memcpy (save->yystack.p_base, yystack.p_base, (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); 923#endif 924 ctry = yytable[yyn]; 925 if (yyctable[ctry] == -1) 926 { 927#if YYDEBUG 928 if (yydebug && yychar >= YYEOF) 929 fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth); 930#endif 931 ctry++; 932 } 933 save->ctry = ctry; 934 if (yyps->save == NULL) 935 { 936 /* If this is a first conflict in the stack, start saving lexemes */ 937 if (!yylexemes) 938 { 939 yylexemes = (short *) malloc((YYLVQUEUEGROWTH) * sizeof(short)); 940 if (yylexemes == NULL) goto yyenomem; 941 yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE)); 942 if (yylvals == NULL) goto yyenomem; 943 yylvlim = yylvals + YYLVQUEUEGROWTH; 944#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 945 yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE)); 946 if (yylpsns == NULL) goto yyenomem; 947 yylplim = yylpsns + YYLVQUEUEGROWTH; 948#endif 949 } 950 if (yylvp == yylve) 951 { 952 yylvp = yylve = yylvals; 953#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 954 yylpp = yylpe = yylpsns; 955#endif 956 yylexp = yylexemes; 957 if (yychar >= YYEOF) 958 { 959 *yylve++ = yylval; 960#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 961 *yylpe++ = yylloc; 962#endif 963 *yylexp = (short) yychar; 964 yychar = YYEMPTY; 965 } 966 } 967 } 968 if (yychar >= YYEOF) 969 { 970 yylvp--; 971#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 972 yylpp--; 973#endif 974 yylexp--; 975 yychar = YYEMPTY; 976 } 977 save->lexeme = yylvp - yylvals; 978 yyps->save = save; 979 } 980 if (yytable[yyn] == ctry) 981 { 982#if YYDEBUG 983 if (yydebug) 984 fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", 985 YYDEBUGSTR, yydepth, yystate, yyctable[ctry]); 986#endif 987 if (yychar < 0) 988 { 989 yylvp++; 990#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 991 yylpp++; 992#endif 993 yylexp++; 994 } 995 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) 996 goto yyoverflow; 997 yystate = yyctable[ctry]; 998 *++yystack.s_mark = (short) yystate; 999 *++yystack.l_mark = yylval; 1000#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1001 *++yystack.p_mark = yylloc; 1002#endif 1003 yychar = YYEMPTY; 1004 if (yyerrflag > 0) --yyerrflag; 1005 goto yyloop; 1006 } 1007 else 1008 { 1009 yyn = yyctable[ctry]; 1010 goto yyreduce; 1011 } 1012 } /* End of code dealing with conflicts */ 1013#endif /* YYBTYACC */ 1014 if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && 1015 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) 1016 { 1017#if YYDEBUG 1018 if (yydebug) 1019 fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", 1020 YYDEBUGSTR, yydepth, yystate, yytable[yyn]); 1021#endif 1022 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; 1023 yystate = yytable[yyn]; 1024 *++yystack.s_mark = yytable[yyn]; 1025 *++yystack.l_mark = yylval; 1026#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1027 *++yystack.p_mark = yylloc; 1028#endif 1029 yychar = YYEMPTY; 1030 if (yyerrflag > 0) --yyerrflag; 1031 goto yyloop; 1032 } 1033 if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 && 1034 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) 1035 { 1036 yyn = yytable[yyn]; 1037 goto yyreduce; 1038 } 1039 if (yyerrflag != 0) goto yyinrecovery; 1040#if YYBTYACC 1041 1042 yynewerrflag = 1; 1043 goto yyerrhandler; 1044 goto yyerrlab; 1045 1046yyerrlab: 1047 yynewerrflag = 0; 1048yyerrhandler: 1049 while (yyps->save) 1050 { 1051 int ctry; 1052 YYParseState *save = yyps->save; 1053#if YYDEBUG 1054 if (yydebug) 1055 fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n", 1056 YYDEBUGSTR, yydepth, yystate, yyps->save->state, 1057 (int)(yylvp - yylvals - yyps->save->lexeme)); 1058#endif 1059 /* Memorize most forward-looking error state in case it's really an error. */ 1060 if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals) 1061 { 1062 /* Free old saved error context state */ 1063 if (yyerrctx) yyFreeState(yyerrctx); 1064 /* Create and fill out new saved error context state */ 1065 yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); 1066 if (yyerrctx == NULL) goto yyenomem; 1067 yyerrctx->save = yyps->save; 1068 yyerrctx->state = yystate; 1069 yyerrctx->errflag = yyerrflag; 1070 yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base); 1071 memcpy (yyerrctx->yystack.s_base, yystack.s_base, (yystack.s_mark - yystack.s_base + 1) * sizeof(short)); 1072 yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base); 1073 memcpy (yyerrctx->yystack.l_base, yystack.l_base, (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); 1074#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1075 yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base); 1076 memcpy (yyerrctx->yystack.p_base, yystack.p_base, (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); 1077#endif 1078 yyerrctx->lexeme = yylvp - yylvals; 1079 } 1080 yylvp = yylvals + save->lexeme; 1081#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1082 yylpp = yylpsns + save->lexeme; 1083#endif 1084 yylexp = yylexemes + save->lexeme; 1085 yychar = YYEMPTY; 1086 yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base); 1087 memcpy (yystack.s_base, save->yystack.s_base, (yystack.s_mark - yystack.s_base + 1) * sizeof(short)); 1088 yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base); 1089 memcpy (yystack.l_base, save->yystack.l_base, (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); 1090#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1091 yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base); 1092 memcpy (yystack.p_base, save->yystack.p_base, (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); 1093#endif 1094 ctry = ++save->ctry; 1095 yystate = save->state; 1096 /* We tried shift, try reduce now */ 1097 if ((yyn = yyctable[ctry]) >= 0) goto yyreduce; 1098 yyps->save = save->save; 1099 save->save = NULL; 1100 yyFreeState(save); 1101 1102 /* Nothing left on the stack -- error */ 1103 if (!yyps->save) 1104 { 1105#if YYDEBUG 1106 if (yydebug) 1107 fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n", 1108 YYPREFIX, yydepth); 1109#endif 1110 /* Restore state as it was in the most forward-advanced error */ 1111 yylvp = yylvals + yyerrctx->lexeme; 1112#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1113 yylpp = yylpsns + yyerrctx->lexeme; 1114#endif 1115 yylexp = yylexemes + yyerrctx->lexeme; 1116 yychar = yylexp[-1]; 1117 yylval = yylvp[-1]; 1118#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1119 yylloc = yylpp[-1]; 1120#endif 1121 yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base); 1122 memcpy (yystack.s_base, yyerrctx->yystack.s_base, (yystack.s_mark - yystack.s_base + 1) * sizeof(short)); 1123 yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base); 1124 memcpy (yystack.l_base, yyerrctx->yystack.l_base, (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); 1125#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1126 yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base); 1127 memcpy (yystack.p_base, yyerrctx->yystack.p_base, (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); 1128#endif 1129 yystate = yyerrctx->state; 1130 yyFreeState(yyerrctx); 1131 yyerrctx = NULL; 1132 } 1133 yynewerrflag = 1; 1134 } 1135 if (yynewerrflag == 0) goto yyinrecovery; 1136#endif /* YYBTYACC */ 1137 1138 YYERROR_CALL("syntax error"); 1139#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1140 yyerror_loc_range[0] = yylloc; /* lookahead position is error start position */ 1141#endif 1142 1143#if !YYBTYACC 1144 goto yyerrlab; 1145yyerrlab: 1146#endif 1147 ++yynerrs; 1148 1149yyinrecovery: 1150 if (yyerrflag < 3) 1151 { 1152 yyerrflag = 3; 1153 for (;;) 1154 { 1155 if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && 1156 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE) 1157 { 1158#if YYDEBUG 1159 if (yydebug) 1160 fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n", 1161 YYDEBUGSTR, yydepth, *yystack.s_mark, yytable[yyn]); 1162#endif 1163 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; 1164 yystate = yytable[yyn]; 1165 *++yystack.s_mark = yytable[yyn]; 1166 *++yystack.l_mark = yylval; 1167#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1168 /* lookahead position is error end position */ 1169 yyerror_loc_range[1] = yylloc; 1170 YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */ 1171 *++yystack.p_mark = yyloc; 1172#endif 1173 goto yyloop; 1174 } 1175 else 1176 { 1177#if YYDEBUG 1178 if (yydebug) 1179 fprintf(stderr, "%s[%d]: error recovery discarding state %d\n", 1180 YYDEBUGSTR, yydepth, *yystack.s_mark); 1181#endif 1182 if (yystack.s_mark <= yystack.s_base) goto yyabort; 1183#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1184 /* the current TOS position is the error start position */ 1185 yyerror_loc_range[0] = *yystack.p_mark; 1186#endif 1187#if defined(YYDESTRUCT_CALL) 1188#if YYBTYACC 1189 if (!yytrial) 1190#endif /* YYBTYACC */ 1191#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1192 YYDESTRUCT_CALL("error: discarding state", 1193 yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark); 1194#else 1195 YYDESTRUCT_CALL("error: discarding state", 1196 yystos[*yystack.s_mark], yystack.l_mark); 1197#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ 1198#endif /* defined(YYDESTRUCT_CALL) */ 1199 --yystack.s_mark; 1200 --yystack.l_mark; 1201#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1202 --yystack.p_mark; 1203#endif 1204 } 1205 } 1206 } 1207 else 1208 { 1209 if (yychar == YYEOF) goto yyabort; 1210#if YYDEBUG 1211 if (yydebug) 1212 { 1213 yys = yyname[YYTRANSLATE(yychar)]; 1214 fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n", 1215 YYDEBUGSTR, yydepth, yystate, yychar, yys); 1216 } 1217#endif 1218#if defined(YYDESTRUCT_CALL) 1219#if YYBTYACC 1220 if (!yytrial) 1221#endif /* YYBTYACC */ 1222#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1223 YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc); 1224#else 1225 YYDESTRUCT_CALL("error: discarding token", yychar, &yylval); 1226#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ 1227#endif /* defined(YYDESTRUCT_CALL) */ 1228 yychar = YYEMPTY; 1229 goto yyloop; 1230 } 1231 1232yyreduce: 1233 yym = yylen[yyn]; 1234#if YYDEBUG 1235 if (yydebug) 1236 { 1237 fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)", 1238 YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]); 1239#ifdef YYSTYPE_TOSTRING 1240#if YYBTYACC 1241 if (!yytrial) 1242#endif /* YYBTYACC */ 1243 if (yym > 0) 1244 { 1245 int i; 1246 fputc('<', stderr); 1247 for (i = yym; i > 0; i--) 1248 { 1249 if (i != yym) fputs(", ", stderr); 1250 fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]], 1251 yystack.l_mark[1-i]), stderr); 1252 } 1253 fputc('>', stderr); 1254 } 1255#endif 1256 fputc('\n', stderr); 1257 } 1258#endif 1259 if (yym > 0) 1260 yyval = yystack.l_mark[1-yym]; 1261 else 1262 memset(&yyval, 0, sizeof yyval); 1263#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1264 1265 /* Perform position reduction */ 1266 memset(&yyloc, 0, sizeof(yyloc)); 1267#if YYBTYACC 1268 if (!yytrial) 1269#endif /* YYBTYACC */ 1270 { 1271 YYLLOC_DEFAULT(yyloc, &yystack.p_mark[1-yym], yym); 1272 /* just in case YYERROR is invoked within the action, save 1273 the start of the rhs as the error start position */ 1274 yyerror_loc_range[0] = yystack.p_mark[1-yym]; 1275 } 1276#endif 1277 1278 switch (yyn) 1279 { 1280case 3: 1281#line 59 "varsyntax_calc1.y" 1282 { 1283 (void) printf("%15.8f\n", yystack.l_mark[-1].dval); 1284 } 1285break; 1286case 4: 1287#line 63 "varsyntax_calc1.y" 1288 { 1289 (void) printf("(%15.8f, %15.8f)\n", yystack.l_mark[-1].vval.lo, yystack.l_mark[-1].vval.hi); 1290 } 1291break; 1292case 5: 1293#line 67 "varsyntax_calc1.y" 1294 { 1295 dreg[yystack.l_mark[-3].ival] = yystack.l_mark[-1].dval; 1296 } 1297break; 1298case 6: 1299#line 71 "varsyntax_calc1.y" 1300 { 1301 vreg[yystack.l_mark[-3].ival] = yystack.l_mark[-1].vval; 1302 } 1303break; 1304case 7: 1305#line 75 "varsyntax_calc1.y" 1306 { 1307 yyerrok; 1308 } 1309break; 1310case 9: 1311#line 82 "varsyntax_calc1.y" 1312 { 1313 yyval.dval = dreg[yystack.l_mark[0].ival]; /* $$ & $1 are sufficient here*/ 1314 } 1315break; 1316case 10: 1317#line 86 "varsyntax_calc1.y" 1318 { 1319 yyval.dval = yystack.l_mark[-2].dval + yystack.l_mark[0].dval; 1320 } 1321break; 1322case 11: 1323#line 90 "varsyntax_calc1.y" 1324 { 1325 yyval.dval = yystack.l_mark[-2].dval - yystack.l_mark[0].dval; 1326 } 1327break; 1328case 12: 1329#line 94 "varsyntax_calc1.y" 1330 { 1331 yyval.dval = yystack.l_mark[-2].dval * yystack.l_mark[0].dval; 1332 } 1333break; 1334case 13: 1335#line 98 "varsyntax_calc1.y" 1336 { 1337 yyval.dval = yystack.l_mark[-2].dval / yystack.l_mark[0].dval; 1338 } 1339break; 1340case 14: 1341#line 102 "varsyntax_calc1.y" 1342 { 1343 yyval.dval = -yystack.l_mark[0].dval; 1344 } 1345break; 1346case 15: 1347#line 106 "varsyntax_calc1.y" 1348 { 1349 yyval.dval = yystack.l_mark[-1].dval; 1350 } 1351break; 1352case 16: 1353#line 112 "varsyntax_calc1.y" 1354 { 1355 yyval.vval.hi = yyval.vval.lo = yystack.l_mark[0].dval; 1356 } 1357break; 1358case 17: 1359#line 116 "varsyntax_calc1.y" 1360 { 1361 yyval.vval.lo = yystack.l_mark[-3].dval; 1362 yyval.vval.hi = yystack.l_mark[-1].dval; 1363 if ( yyval.vval.lo > yyval.vval.hi ) 1364 { 1365 (void) printf("interval out of order\n"); 1366 YYERROR; 1367 } 1368 } 1369break; 1370case 18: 1371#line 126 "varsyntax_calc1.y" 1372 { 1373 yyval.vval = vreg[yystack.l_mark[0].ival]; 1374 } 1375break; 1376case 19: 1377#line 130 "varsyntax_calc1.y" 1378 { 1379 yyval.vval.hi = yystack.l_mark[-2].vval.hi + yystack.l_mark[0].vval.hi; 1380 yyval.vval.lo = yystack.l_mark[-2].vval.lo + yystack.l_mark[0].vval.lo; 1381 } 1382break; 1383case 20: 1384#line 135 "varsyntax_calc1.y" 1385 { 1386 yyval.vval.hi = yystack.l_mark[-2].dval + yystack.l_mark[0].vval.hi; 1387 yyval.vval.lo = yystack.l_mark[-2].dval + yystack.l_mark[0].vval.lo; 1388 } 1389break; 1390case 21: 1391#line 140 "varsyntax_calc1.y" 1392 { 1393 yyval.vval.hi = yystack.l_mark[-2].vval.hi - yystack.l_mark[0].vval.lo; 1394 yyval.vval.lo = yystack.l_mark[-2].vval.lo - yystack.l_mark[0].vval.hi; 1395 } 1396break; 1397case 22: 1398#line 145 "varsyntax_calc1.y" 1399 { 1400 yyval.vval.hi = yystack.l_mark[-2].dval - yystack.l_mark[0].vval.lo; 1401 yyval.vval.lo = yystack.l_mark[-2].dval - yystack.l_mark[0].vval.hi; 1402 } 1403break; 1404case 23: 1405#line 150 "varsyntax_calc1.y" 1406 { 1407 yyval.vval = vmul( yystack.l_mark[-2].vval.lo, yystack.l_mark[-2].vval.hi, yystack.l_mark[0].vval ); 1408 } 1409break; 1410case 24: 1411#line 154 "varsyntax_calc1.y" 1412 { 1413 yyval.vval = vmul (yystack.l_mark[-2].dval, yystack.l_mark[-2].dval, yystack.l_mark[0].vval ); 1414 } 1415break; 1416case 25: 1417#line 158 "varsyntax_calc1.y" 1418 { 1419 if (dcheck(yystack.l_mark[0].vval)) YYERROR; 1420 yyval.vval = vdiv ( yystack.l_mark[-2].vval.lo, yystack.l_mark[-2].vval.hi, yystack.l_mark[0].vval ); 1421 } 1422break; 1423case 26: 1424#line 163 "varsyntax_calc1.y" 1425 { 1426 if (dcheck ( yystack.l_mark[0].vval )) YYERROR; 1427 yyval.vval = vdiv (yystack.l_mark[-2].dval, yystack.l_mark[-2].dval, yystack.l_mark[0].vval ); 1428 } 1429break; 1430case 27: 1431#line 168 "varsyntax_calc1.y" 1432 { 1433 yyval.vval.hi = -yystack.l_mark[0].vval.lo; 1434 yyval.vval.lo = -yystack.l_mark[0].vval.hi; 1435 } 1436break; 1437case 28: 1438#line 173 "varsyntax_calc1.y" 1439 { 1440 yyval.vval = yystack.l_mark[-1].vval; 1441 } 1442break; 1443#line 1444 "varsyntax_calc1.tab.c" 1444 default: 1445 break; 1446 } 1447 yystack.s_mark -= yym; 1448 yystate = *yystack.s_mark; 1449 yystack.l_mark -= yym; 1450#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1451 yystack.p_mark -= yym; 1452#endif 1453 yym = yylhs[yyn]; 1454 if (yystate == 0 && yym == 0) 1455 { 1456#if YYDEBUG 1457 if (yydebug) 1458 { 1459 fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); 1460#ifdef YYSTYPE_TOSTRING 1461#if YYBTYACC 1462 if (!yytrial) 1463#endif /* YYBTYACC */ 1464 fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval)); 1465#endif 1466 fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL); 1467 } 1468#endif 1469 yystate = YYFINAL; 1470 *++yystack.s_mark = YYFINAL; 1471 *++yystack.l_mark = yyval; 1472#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1473 *++yystack.p_mark = yyloc; 1474#endif 1475 if (yychar < 0) 1476 { 1477#if YYBTYACC 1478 do { 1479 if (yylvp < yylve) 1480 { 1481 /* we're currently re-reading tokens */ 1482 yylval = *yylvp++; 1483#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1484 yylloc = *yylpp++; 1485#endif 1486 yychar = *yylexp++; 1487 break; 1488 } 1489 if (yyps->save) 1490 { 1491 /* in trial mode; save scanner results for future parse attempts */ 1492 if (yylvp == yylvlim) 1493 { /* Enlarge lexical value queue */ 1494 int p = yylvp - yylvals; 1495 int s = yylvlim - yylvals; 1496 1497 s += YYLVQUEUEGROWTH; 1498 if ((yylexemes = (short *) realloc(yylexemes, s * sizeof(short))) == NULL) 1499 goto yyenomem; 1500 if ((yylvals = (YYSTYPE *) realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) 1501 goto yyenomem; 1502#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1503 if ((yylpsns = (YYLTYPE *) realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) 1504 goto yyenomem; 1505#endif 1506 yylvp = yylve = yylvals + p; 1507 yylvlim = yylvals + s; 1508#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1509 yylpp = yylpe = yylpsns + p; 1510 yylplim = yylpsns + s; 1511#endif 1512 yylexp = yylexemes + p; 1513 } 1514 *yylexp = (short) YYLEX; 1515 *yylvp++ = yylval; 1516 yylve++; 1517#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1518 *yylpp++ = yylloc; 1519 yylpe++; 1520#endif 1521 yychar = *yylexp++; 1522 break; 1523 } 1524 /* normal operation, no conflict encountered */ 1525#endif /* YYBTYACC */ 1526 yychar = YYLEX; 1527#if YYBTYACC 1528 } while (0); 1529#endif /* YYBTYACC */ 1530 if (yychar < 0) yychar = YYEOF; 1531 /* if ((yychar = YYLEX) < 0) yychar = YYEOF; */ 1532#if YYDEBUG 1533 if (yydebug) 1534 { 1535 yys = yyname[YYTRANSLATE(yychar)]; 1536 fprintf(stderr, "%s[%d]: state %d, reading %d (%s)\n", 1537 YYDEBUGSTR, yydepth, YYFINAL, yychar, yys); 1538 } 1539#endif 1540 } 1541 if (yychar == YYEOF) goto yyaccept; 1542 goto yyloop; 1543 } 1544 if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && 1545 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate) 1546 yystate = yytable[yyn]; 1547 else 1548 yystate = yydgoto[yym]; 1549#if YYDEBUG 1550 if (yydebug) 1551 { 1552 fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); 1553#ifdef YYSTYPE_TOSTRING 1554#if YYBTYACC 1555 if (!yytrial) 1556#endif /* YYBTYACC */ 1557 fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval)); 1558#endif 1559 fprintf(stderr, "shifting from state %d to state %d\n", *yystack.s_mark, yystate); 1560 } 1561#endif 1562 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; 1563 *++yystack.s_mark = (short) yystate; 1564 *++yystack.l_mark = yyval; 1565#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1566 *++yystack.p_mark = yyloc; 1567#endif 1568 goto yyloop; 1569#if YYBTYACC 1570 1571 /* Reduction declares that this path is valid. Set yypath and do a full parse */ 1572yyvalid: 1573 if (yypath) YYABORT; 1574 while (yyps->save) 1575 { 1576 YYParseState *save = yyps->save; 1577 yyps->save = save->save; 1578 save->save = yypath; 1579 yypath = save; 1580 } 1581#if YYDEBUG 1582 if (yydebug) 1583 fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n", 1584 YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme)); 1585#endif 1586 if (yyerrctx) 1587 { 1588 yyFreeState(yyerrctx); 1589 yyerrctx = NULL; 1590 } 1591 yylvp = yylvals + yypath->lexeme; 1592#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1593 yylpp = yylpsns + yypath->lexeme; 1594#endif 1595 yylexp = yylexemes + yypath->lexeme; 1596 yychar = YYEMPTY; 1597 yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base); 1598 memcpy (yystack.s_base, yypath->yystack.s_base, (yystack.s_mark - yystack.s_base + 1) * sizeof(short)); 1599 yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base); 1600 memcpy (yystack.l_base, yypath->yystack.l_base, (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); 1601#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1602 yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base); 1603 memcpy (yystack.p_base, yypath->yystack.p_base, (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); 1604#endif 1605 yystate = yypath->state; 1606 goto yyloop; 1607#endif /* YYBTYACC */ 1608 1609yyoverflow: 1610 YYERROR_CALL("yacc stack overflow"); 1611#if YYBTYACC 1612 goto yyabort_nomem; 1613yyenomem: 1614 YYERROR_CALL("memory exhausted"); 1615yyabort_nomem: 1616#endif /* YYBTYACC */ 1617 yyresult = 2; 1618 goto yyreturn; 1619 1620yyabort: 1621 yyresult = 1; 1622 goto yyreturn; 1623 1624yyaccept: 1625#if YYBTYACC 1626 if (yyps->save) goto yyvalid; 1627#endif /* YYBTYACC */ 1628 yyresult = 0; 1629 1630yyreturn: 1631#if defined(YYDESTRUCT_CALL) 1632 if (yychar != YYEOF && yychar != YYEMPTY) 1633#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1634 YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc); 1635#else 1636 YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval); 1637#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ 1638 1639 { 1640 YYSTYPE *pv; 1641#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1642 YYLTYPE *pp; 1643 1644 for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp) 1645 YYDESTRUCT_CALL("cleanup: discarding state", 1646 yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp); 1647#else 1648 for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv) 1649 YYDESTRUCT_CALL("cleanup: discarding state", 1650 yystos[*(yystack.s_base + (pv - yystack.l_base))], pv); 1651#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ 1652 } 1653#endif /* defined(YYDESTRUCT_CALL) */ 1654 1655#if YYBTYACC 1656 if (yyerrctx) 1657 { 1658 yyFreeState(yyerrctx); 1659 yyerrctx = NULL; 1660 } 1661 while (yyps) 1662 { 1663 YYParseState *save = yyps; 1664 yyps = save->save; 1665 save->save = NULL; 1666 yyFreeState(save); 1667 } 1668 while (yypath) 1669 { 1670 YYParseState *save = yypath; 1671 yypath = save->save; 1672 save->save = NULL; 1673 yyFreeState(save); 1674 } 1675#endif /* YYBTYACC */ 1676 yyfreestack(&yystack); 1677 return (yyresult); 1678} 1679