1264790Sbapt/* original parser id follows */ 2264790Sbapt/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */ 3272955Srodrigc/* (use YYMAJOR/YYMINOR for ifdefs dependent of parser version) */ 4264790Sbapt 5264790Sbapt#define YYBYACC 1 6264790Sbapt#define YYMAJOR 1 7264790Sbapt#define YYMINOR 9 8264790Sbapt#define YYCHECK "yyyymmdd" 9264790Sbapt 10264790Sbapt#define YYEMPTY (-1) 11264790Sbapt#define yyclearin (yychar = YYEMPTY) 12264790Sbapt#define yyerrok (yyerrflag = 0) 13264790Sbapt#define YYRECOVERING() (yyerrflag != 0) 14264790Sbapt#define YYENOMEM (-2) 15264790Sbapt#define YYEOF 0 16264790Sbapt#ident "check variant syntax features" 17264790Sbapt#undef YYBTYACC 18264790Sbapt#define YYBTYACC 0 19264790Sbapt#define YYDEBUGSTR YYPREFIX "debug" 20264790Sbapt 21264790Sbapt#ifndef yyparse 22264790Sbapt#define yyparse varsyntax_calc1_parse 23264790Sbapt#endif /* yyparse */ 24264790Sbapt 25264790Sbapt#ifndef yylex 26264790Sbapt#define yylex varsyntax_calc1_lex 27264790Sbapt#endif /* yylex */ 28264790Sbapt 29264790Sbapt#ifndef yyerror 30264790Sbapt#define yyerror varsyntax_calc1_error 31264790Sbapt#endif /* yyerror */ 32264790Sbapt 33264790Sbapt#ifndef yychar 34264790Sbapt#define yychar varsyntax_calc1_char 35264790Sbapt#endif /* yychar */ 36264790Sbapt 37264790Sbapt#ifndef yyval 38264790Sbapt#define yyval varsyntax_calc1_val 39264790Sbapt#endif /* yyval */ 40264790Sbapt 41264790Sbapt#ifndef yylval 42264790Sbapt#define yylval varsyntax_calc1_lval 43264790Sbapt#endif /* yylval */ 44264790Sbapt 45264790Sbapt#ifndef yydebug 46264790Sbapt#define yydebug varsyntax_calc1_debug 47264790Sbapt#endif /* yydebug */ 48264790Sbapt 49264790Sbapt#ifndef yynerrs 50264790Sbapt#define yynerrs varsyntax_calc1_nerrs 51264790Sbapt#endif /* yynerrs */ 52264790Sbapt 53264790Sbapt#ifndef yyerrflag 54264790Sbapt#define yyerrflag varsyntax_calc1_errflag 55264790Sbapt#endif /* yyerrflag */ 56264790Sbapt 57264790Sbapt#ifndef yylhs 58264790Sbapt#define yylhs varsyntax_calc1_lhs 59264790Sbapt#endif /* yylhs */ 60264790Sbapt 61264790Sbapt#ifndef yylen 62264790Sbapt#define yylen varsyntax_calc1_len 63264790Sbapt#endif /* yylen */ 64264790Sbapt 65264790Sbapt#ifndef yydefred 66264790Sbapt#define yydefred varsyntax_calc1_defred 67264790Sbapt#endif /* yydefred */ 68264790Sbapt 69264790Sbapt#ifndef yystos 70264790Sbapt#define yystos varsyntax_calc1_stos 71264790Sbapt#endif /* yystos */ 72264790Sbapt 73264790Sbapt#ifndef yydgoto 74264790Sbapt#define yydgoto varsyntax_calc1_dgoto 75264790Sbapt#endif /* yydgoto */ 76264790Sbapt 77264790Sbapt#ifndef yysindex 78264790Sbapt#define yysindex varsyntax_calc1_sindex 79264790Sbapt#endif /* yysindex */ 80264790Sbapt 81264790Sbapt#ifndef yyrindex 82264790Sbapt#define yyrindex varsyntax_calc1_rindex 83264790Sbapt#endif /* yyrindex */ 84264790Sbapt 85264790Sbapt#ifndef yygindex 86264790Sbapt#define yygindex varsyntax_calc1_gindex 87264790Sbapt#endif /* yygindex */ 88264790Sbapt 89264790Sbapt#ifndef yytable 90264790Sbapt#define yytable varsyntax_calc1_table 91264790Sbapt#endif /* yytable */ 92264790Sbapt 93264790Sbapt#ifndef yycheck 94264790Sbapt#define yycheck varsyntax_calc1_check 95264790Sbapt#endif /* yycheck */ 96264790Sbapt 97264790Sbapt#ifndef yyname 98264790Sbapt#define yyname varsyntax_calc1_name 99264790Sbapt#endif /* yyname */ 100264790Sbapt 101264790Sbapt#ifndef yyrule 102264790Sbapt#define yyrule varsyntax_calc1_rule 103264790Sbapt#endif /* yyrule */ 104264790Sbapt 105264790Sbapt#if YYBTYACC 106264790Sbapt 107264790Sbapt#ifndef yycindex 108264790Sbapt#define yycindex varsyntax_calc1_cindex 109264790Sbapt#endif /* yycindex */ 110264790Sbapt 111264790Sbapt#ifndef yyctable 112264790Sbapt#define yyctable varsyntax_calc1_ctable 113264790Sbapt#endif /* yyctable */ 114264790Sbapt 115264790Sbapt#endif /* YYBTYACC */ 116264790Sbapt 117264790Sbapt#define YYPREFIX "varsyntax_calc1_" 118264790Sbapt 119264790Sbapt#define YYPURE 0 120264790Sbapt 121264790Sbapt#line 3 "varsyntax_calc1.y" 122264790Sbapt 123264790Sbapt/* http://dinosaur.compilertools.net/yacc/index.html * /*/ 124264790Sbapt 125264790Sbapt#include <stdlib.h> 126264790Sbapt#include <stdio.h> 127264790Sbapt#include <ctype.h> 128264790Sbapt#include <math.h> 129264790Sbapt 130264790Sbapttypedef struct interval 131264790Sbapt{ 132264790Sbapt double lo, hi; 133264790Sbapt} 134264790SbaptINTERVAL; 135264790Sbapt 136264790SbaptINTERVAL vmul(double, double, INTERVAL); 137264790SbaptINTERVAL vdiv(double, double, INTERVAL); 138264790Sbapt 139264790Sbaptextern int yylex(void); 140264790Sbaptstatic void yyerror(const char *s); 141264790Sbapt 142264790Sbaptint dcheck(INTERVAL); 143264790Sbapt 144264790Sbaptdouble dreg[26]; 145264790SbaptINTERVAL vreg[26]; 146264790Sbapt 147264790Sbapt#line 32 "varsyntax_calc1.y" 148264790Sbapt#ifdef YYSTYPE 149264790Sbapt#undef YYSTYPE_IS_DECLARED 150264790Sbapt#define YYSTYPE_IS_DECLARED 1 151264790Sbapt#endif 152264790Sbapt#ifndef YYSTYPE_IS_DECLARED 153264790Sbapt#define YYSTYPE_IS_DECLARED 1 154264790Sbapttypedef union 155264790Sbapt{ 156264790Sbapt int ival; /* dreg & vreg array index values*/ 157264790Sbapt double dval; /* floating point values*/ 158264790Sbapt INTERVAL vval; /* interval values*/ 159264790Sbapt} YYSTYPE; 160264790Sbapt#endif /* !YYSTYPE_IS_DECLARED */ 161264790Sbapt#line 162 "varsyntax_calc1.tab.c" 162264790Sbapt 163264790Sbapt/* compatibility with bison */ 164264790Sbapt#ifdef YYPARSE_PARAM 165264790Sbapt/* compatibility with FreeBSD */ 166264790Sbapt# ifdef YYPARSE_PARAM_TYPE 167264790Sbapt# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM) 168264790Sbapt# else 169264790Sbapt# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM) 170264790Sbapt# endif 171264790Sbapt#else 172264790Sbapt# define YYPARSE_DECL() yyparse(void) 173264790Sbapt#endif 174264790Sbapt 175264790Sbapt/* Parameters sent to lex. */ 176264790Sbapt#ifdef YYLEX_PARAM 177264790Sbapt# define YYLEX_DECL() yylex(void *YYLEX_PARAM) 178264790Sbapt# define YYLEX yylex(YYLEX_PARAM) 179264790Sbapt#else 180264790Sbapt# define YYLEX_DECL() yylex(void) 181264790Sbapt# define YYLEX yylex() 182264790Sbapt#endif 183264790Sbapt 184264790Sbapt/* Parameters sent to yyerror. */ 185264790Sbapt#ifndef YYERROR_DECL 186264790Sbapt#define YYERROR_DECL() yyerror(const char *s) 187264790Sbapt#endif 188264790Sbapt#ifndef YYERROR_CALL 189264790Sbapt#define YYERROR_CALL(msg) yyerror(msg) 190264790Sbapt#endif 191264790Sbapt 192264790Sbaptextern int YYPARSE_DECL(); 193264790Sbapt 194264790Sbapt#define DREG 257 195264790Sbapt#define VREG 258 196264790Sbapt#define CONST 259 197264790Sbapt#define UMINUS 260 198264790Sbapt#define YYERRCODE 256 199264790Sbapttypedef short YYINT; 200264790Sbaptstatic const YYINT varsyntax_calc1_lhs[] = { -1, 201264790Sbapt 3, 3, 0, 0, 0, 0, 0, 1, 1, 1, 202264790Sbapt 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 203264790Sbapt 2, 2, 2, 2, 2, 2, 2, 2, 204264790Sbapt}; 205264790Sbaptstatic const YYINT varsyntax_calc1_len[] = { 2, 206264790Sbapt 0, 2, 2, 2, 4, 4, 2, 1, 1, 3, 207264790Sbapt 3, 3, 3, 2, 3, 1, 5, 1, 3, 3, 208264790Sbapt 3, 3, 3, 3, 3, 3, 2, 3, 209264790Sbapt}; 210264790Sbaptstatic const YYINT varsyntax_calc1_defred[] = { 0, 211264790Sbapt 0, 0, 0, 8, 0, 0, 0, 0, 0, 7, 212264790Sbapt 0, 0, 9, 18, 14, 27, 0, 0, 0, 0, 213264790Sbapt 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 214264790Sbapt 0, 0, 0, 15, 0, 28, 0, 0, 0, 0, 215264790Sbapt 12, 24, 13, 26, 0, 0, 23, 25, 14, 0, 216264790Sbapt 0, 0, 0, 0, 5, 6, 0, 0, 0, 12, 217264790Sbapt 13, 17, 218264790Sbapt}; 219264790Sbaptstatic const YYINT varsyntax_calc1_stos[] = { 0, 220264790Sbapt 256, 257, 258, 259, 45, 40, 262, 263, 264, 10, 221264790Sbapt 61, 61, 257, 258, 263, 264, 263, 264, 43, 45, 222264790Sbapt 42, 47, 10, 43, 45, 42, 47, 10, 45, 40, 223264790Sbapt 263, 263, 264, 41, 44, 41, 263, 264, 263, 264, 224264790Sbapt 263, 264, 263, 264, 264, 264, 264, 264, 263, 263, 225264790Sbapt 43, 45, 42, 47, 10, 10, 263, 263, 263, 263, 226264790Sbapt 263, 41, 227264790Sbapt}; 228264790Sbaptstatic const YYINT varsyntax_calc1_dgoto[] = { 7, 229264790Sbapt 32, 9, 0, 230264790Sbapt}; 231264790Sbaptstatic const YYINT varsyntax_calc1_sindex[] = { -40, 232264790Sbapt -8, -48, -47, 0, -37, -37, 0, 2, 17, 0, 233264790Sbapt -34, -37, 0, 0, 0, 0, -25, 90, -37, -37, 234264790Sbapt -37, -37, 0, -37, -37, -37, -37, 0, -34, -34, 235264790Sbapt 25, 125, 31, 0, -34, 0, -11, 37, -11, 37, 236264790Sbapt 0, 0, 0, 0, 37, 37, 0, 0, 0, 111, 237264790Sbapt -34, -34, -34, -34, 0, 0, 118, 69, 69, 0, 238264790Sbapt 0, 0, 239264790Sbapt}; 240264790Sbaptstatic const YYINT varsyntax_calc1_rindex[] = { 0, 241264790Sbapt 0, 38, 44, 0, 0, 0, 0, 0, 0, 0, 242264790Sbapt 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 243264790Sbapt 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244264790Sbapt 0, -9, 0, 0, 0, 0, 51, -3, 56, 61, 245264790Sbapt 0, 0, 0, 0, 67, 72, 0, 0, 0, 0, 246264790Sbapt 0, 0, 0, 0, 0, 0, 0, 78, 83, 0, 247264790Sbapt 0, 0, 248264790Sbapt}; 249264790Sbapt#if YYBTYACC 250264790Sbaptstatic const YYINT varsyntax_calc1_cindex[] = { 0, 251264790Sbapt 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 252264790Sbapt 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 253264790Sbapt 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254264790Sbapt 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255264790Sbapt 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 256264790Sbapt 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 257264790Sbapt 0, 0, 258264790Sbapt}; 259264790Sbapt#endif 260264790Sbaptstatic const YYINT varsyntax_calc1_gindex[] = { 0, 261264790Sbapt 4, 124, 0, 262264790Sbapt}; 263264790Sbapt#define YYTABLESIZE 225 264264790Sbaptstatic const YYINT varsyntax_calc1_table[] = { 6, 265264790Sbapt 16, 10, 6, 8, 5, 30, 20, 5, 15, 17, 266264790Sbapt 29, 23, 11, 12, 31, 34, 21, 19, 35, 20, 267264790Sbapt 0, 22, 37, 39, 41, 43, 28, 0, 0, 0, 268264790Sbapt 21, 16, 49, 50, 55, 22, 0, 20, 57, 20, 269264790Sbapt 56, 20, 0, 21, 19, 0, 20, 9, 22, 0, 270264790Sbapt 0, 0, 0, 18, 58, 59, 60, 61, 26, 24, 271264790Sbapt 10, 25, 0, 27, 0, 11, 53, 51, 0, 52, 272264790Sbapt 22, 54, 26, 24, 0, 25, 19, 27, 26, 9, 273264790Sbapt 9, 21, 9, 27, 9, 18, 18, 10, 18, 0, 274264790Sbapt 18, 10, 11, 10, 10, 10, 11, 0, 11, 11, 275264790Sbapt 11, 22, 0, 22, 0, 22, 0, 19, 0, 19, 276264790Sbapt 53, 19, 21, 0, 21, 54, 21, 0, 10, 0, 277264790Sbapt 10, 0, 10, 11, 0, 11, 0, 11, 16, 18, 278264790Sbapt 36, 26, 24, 0, 25, 33, 27, 0, 0, 0, 279264790Sbapt 0, 0, 38, 40, 42, 44, 0, 45, 46, 47, 280264790Sbapt 48, 34, 53, 51, 0, 52, 0, 54, 62, 53, 281264790Sbapt 51, 0, 52, 0, 54, 0, 21, 19, 0, 20, 282264790Sbapt 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 283264790Sbapt 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 284264790Sbapt 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 285264790Sbapt 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 286264790Sbapt 0, 0, 0, 0, 0, 1, 2, 3, 4, 13, 287264790Sbapt 14, 4, 13, 0, 4, 288264790Sbapt}; 289264790Sbaptstatic const YYINT varsyntax_calc1_check[] = { 40, 290264790Sbapt 10, 10, 40, 0, 45, 40, 10, 45, 5, 6, 291264790Sbapt 45, 10, 61, 61, 11, 41, 42, 43, 44, 45, 292264790Sbapt -1, 47, 19, 20, 21, 22, 10, -1, -1, -1, 293264790Sbapt 42, 41, 29, 30, 10, 47, -1, 41, 35, 43, 294264790Sbapt 10, 45, -1, 42, 43, -1, 45, 10, 47, -1, 295264790Sbapt -1, -1, -1, 10, 51, 52, 53, 54, 42, 43, 296264790Sbapt 10, 45, -1, 47, -1, 10, 42, 43, -1, 45, 297264790Sbapt 10, 47, 42, 43, -1, 45, 10, 47, 42, 42, 298264790Sbapt 43, 10, 45, 47, 47, 42, 43, 10, 45, -1, 299264790Sbapt 47, 41, 10, 43, 44, 45, 41, -1, 43, 44, 300264790Sbapt 45, 41, -1, 43, -1, 45, -1, 41, -1, 43, 301264790Sbapt 42, 45, 41, -1, 43, 47, 45, -1, 41, -1, 302264790Sbapt 43, -1, 45, 41, -1, 43, -1, 45, 5, 6, 303264790Sbapt 41, 42, 43, -1, 45, 12, 47, -1, -1, -1, 304264790Sbapt -1, -1, 19, 20, 21, 22, -1, 24, 25, 26, 305264790Sbapt 27, 41, 42, 43, -1, 45, -1, 47, 41, 42, 306264790Sbapt 43, -1, 45, -1, 47, -1, 42, 43, -1, 45, 307264790Sbapt -1, 47, -1, -1, -1, -1, -1, -1, -1, -1, 308264790Sbapt -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 309264790Sbapt -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 310264790Sbapt -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 311264790Sbapt -1, -1, -1, -1, -1, 256, 257, 258, 259, 257, 312264790Sbapt 258, 259, 257, -1, 259, 313264790Sbapt}; 314272955Srodrigc#if YYBTYACC 315272955Srodrigcstatic const YYINT varsyntax_calc1_ctable[] = { -1, 316272955Srodrigc -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 317272955Srodrigc -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 318272955Srodrigc -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 319272955Srodrigc -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320272955Srodrigc -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 321272955Srodrigc -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 322272955Srodrigc -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 323272955Srodrigc -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 324272955Srodrigc -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 325272955Srodrigc -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 326272955Srodrigc -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 327272955Srodrigc -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 328272955Srodrigc -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 329272955Srodrigc -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 330272955Srodrigc -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 331272955Srodrigc -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 332272955Srodrigc -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 333272955Srodrigc -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 334272955Srodrigc -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 335272955Srodrigc -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 336272955Srodrigc -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 337272955Srodrigc -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 338272955Srodrigc -1, -1, -1, -1, 339272955Srodrigc}; 340272955Srodrigc#endif 341264790Sbapt#define YYFINAL 7 342264790Sbapt#ifndef YYDEBUG 343264790Sbapt#define YYDEBUG 0 344264790Sbapt#endif 345264790Sbapt#define YYMAXTOKEN 260 346264790Sbapt#define YYUNDFTOKEN 266 347264790Sbapt#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) 348264790Sbapt#if YYDEBUG 349264790Sbaptstatic const char *const varsyntax_calc1_name[] = { 350264790Sbapt 351264790Sbapt"$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, 352264790Sbapt0,0,0,0,0,0,"'('","')'","'*'","'+'","','","'-'",0,"'/'",0,0,0,0,0,0,0,0,0,0,0,0, 353264790Sbapt0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 354264790Sbapt0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 355264790Sbapt0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 356264790Sbapt0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 357264790Sbapt0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 358264790Sbapt"error","DREG","VREG","CONST","UMINUS","$accept","line","dexp","vexp","lines", 359264790Sbapt"illegal-symbol", 360264790Sbapt}; 361264790Sbaptstatic const char *const varsyntax_calc1_rule[] = { 362264790Sbapt"$accept : line", 363264790Sbapt"lines :", 364264790Sbapt"lines : lines line", 365264790Sbapt"line : dexp '\\n'", 366264790Sbapt"line : vexp '\\n'", 367264790Sbapt"line : DREG '=' dexp '\\n'", 368264790Sbapt"line : VREG '=' vexp '\\n'", 369264790Sbapt"line : error '\\n'", 370264790Sbapt"dexp : CONST", 371264790Sbapt"dexp : DREG", 372264790Sbapt"dexp : dexp '+' dexp", 373264790Sbapt"dexp : dexp '-' dexp", 374264790Sbapt"dexp : dexp '*' dexp", 375264790Sbapt"dexp : dexp '/' dexp", 376264790Sbapt"dexp : '-' dexp", 377264790Sbapt"dexp : '(' dexp ')'", 378264790Sbapt"vexp : dexp", 379264790Sbapt"vexp : '(' dexp ',' dexp ')'", 380264790Sbapt"vexp : VREG", 381264790Sbapt"vexp : vexp '+' vexp", 382264790Sbapt"vexp : dexp '+' vexp", 383264790Sbapt"vexp : vexp '-' vexp", 384264790Sbapt"vexp : dexp '-' vexp", 385264790Sbapt"vexp : vexp '*' vexp", 386264790Sbapt"vexp : dexp '*' vexp", 387264790Sbapt"vexp : vexp '/' vexp", 388264790Sbapt"vexp : dexp '/' vexp", 389264790Sbapt"vexp : '-' vexp", 390264790Sbapt"vexp : '(' vexp ')'", 391264790Sbapt 392264790Sbapt}; 393264790Sbapt#endif 394264790Sbapt 395264790Sbaptint yydebug; 396264790Sbaptint yynerrs; 397264790Sbapt 398264790Sbaptint yyerrflag; 399264790Sbaptint yychar; 400264790SbaptYYSTYPE yyval; 401264790SbaptYYSTYPE yylval; 402264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 403264790SbaptYYLTYPE yyloc; /* position returned by actions */ 404264790SbaptYYLTYPE yylloc; /* position from the lexer */ 405264790Sbapt#endif 406264790Sbapt 407264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 408264790Sbapt#ifndef YYLLOC_DEFAULT 409264790Sbapt#define YYLLOC_DEFAULT(loc, rhs, n) \ 410264790Sbaptdo \ 411264790Sbapt{ \ 412264790Sbapt if (n == 0) \ 413264790Sbapt { \ 414264790Sbapt (loc).first_line = ((rhs)[-1]).last_line; \ 415264790Sbapt (loc).first_column = ((rhs)[-1]).last_column; \ 416264790Sbapt (loc).last_line = ((rhs)[-1]).last_line; \ 417264790Sbapt (loc).last_column = ((rhs)[-1]).last_column; \ 418264790Sbapt } \ 419264790Sbapt else \ 420264790Sbapt { \ 421264790Sbapt (loc).first_line = ((rhs)[ 0 ]).first_line; \ 422264790Sbapt (loc).first_column = ((rhs)[ 0 ]).first_column; \ 423264790Sbapt (loc).last_line = ((rhs)[n-1]).last_line; \ 424264790Sbapt (loc).last_column = ((rhs)[n-1]).last_column; \ 425264790Sbapt } \ 426264790Sbapt} while (0) 427264790Sbapt#endif /* YYLLOC_DEFAULT */ 428264790Sbapt#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ 429264790Sbapt#if YYBTYACC 430264790Sbapt 431264790Sbapt#ifndef YYLVQUEUEGROWTH 432264790Sbapt#define YYLVQUEUEGROWTH 32 433264790Sbapt#endif 434264790Sbapt#endif /* YYBTYACC */ 435264790Sbapt 436264790Sbapt/* define the initial stack-sizes */ 437264790Sbapt#ifdef YYSTACKSIZE 438264790Sbapt#undef YYMAXDEPTH 439264790Sbapt#define YYMAXDEPTH YYSTACKSIZE 440264790Sbapt#else 441264790Sbapt#ifdef YYMAXDEPTH 442264790Sbapt#define YYSTACKSIZE YYMAXDEPTH 443264790Sbapt#else 444264790Sbapt#define YYSTACKSIZE 10000 445264790Sbapt#define YYMAXDEPTH 10000 446264790Sbapt#endif 447264790Sbapt#endif 448264790Sbapt 449264790Sbapt#ifndef YYINITSTACKSIZE 450264790Sbapt#define YYINITSTACKSIZE 200 451264790Sbapt#endif 452264790Sbapt 453264790Sbapttypedef struct { 454264790Sbapt unsigned stacksize; 455264790Sbapt short *s_base; 456264790Sbapt short *s_mark; 457264790Sbapt short *s_last; 458264790Sbapt YYSTYPE *l_base; 459264790Sbapt YYSTYPE *l_mark; 460264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 461264790Sbapt YYLTYPE *p_base; 462264790Sbapt YYLTYPE *p_mark; 463264790Sbapt#endif 464264790Sbapt} YYSTACKDATA; 465264790Sbapt#if YYBTYACC 466264790Sbapt 467264790Sbaptstruct YYParseState_s 468264790Sbapt{ 469264790Sbapt struct YYParseState_s *save; /* Previously saved parser state */ 470264790Sbapt YYSTACKDATA yystack; /* saved parser stack */ 471264790Sbapt int state; /* saved parser state */ 472264790Sbapt int errflag; /* saved error recovery status */ 473264790Sbapt int lexeme; /* saved index of the conflict lexeme in the lexical queue */ 474264790Sbapt YYINT ctry; /* saved index in yyctable[] for this conflict */ 475264790Sbapt}; 476264790Sbapttypedef struct YYParseState_s YYParseState; 477264790Sbapt#endif /* YYBTYACC */ 478264790Sbapt/* variables for the parser stack */ 479264790Sbaptstatic YYSTACKDATA yystack; 480264790Sbapt#if YYBTYACC 481264790Sbapt 482264790Sbapt/* Current parser state */ 483264790Sbaptstatic YYParseState *yyps = 0; 484264790Sbapt 485264790Sbapt/* yypath != NULL: do the full parse, starting at *yypath parser state. */ 486264790Sbaptstatic YYParseState *yypath = 0; 487264790Sbapt 488264790Sbapt/* Base of the lexical value queue */ 489264790Sbaptstatic YYSTYPE *yylvals = 0; 490264790Sbapt 491264790Sbapt/* Current position at lexical value queue */ 492264790Sbaptstatic YYSTYPE *yylvp = 0; 493264790Sbapt 494264790Sbapt/* End position of lexical value queue */ 495264790Sbaptstatic YYSTYPE *yylve = 0; 496264790Sbapt 497264790Sbapt/* The last allocated position at the lexical value queue */ 498264790Sbaptstatic YYSTYPE *yylvlim = 0; 499264790Sbapt 500264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 501264790Sbapt/* Base of the lexical position queue */ 502264790Sbaptstatic YYLTYPE *yylpsns = 0; 503264790Sbapt 504264790Sbapt/* Current position at lexical position queue */ 505264790Sbaptstatic YYLTYPE *yylpp = 0; 506264790Sbapt 507264790Sbapt/* End position of lexical position queue */ 508264790Sbaptstatic YYLTYPE *yylpe = 0; 509264790Sbapt 510264790Sbapt/* The last allocated position at the lexical position queue */ 511264790Sbaptstatic YYLTYPE *yylplim = 0; 512264790Sbapt#endif 513264790Sbapt 514264790Sbapt/* Current position at lexical token queue */ 515264790Sbaptstatic short *yylexp = 0; 516264790Sbapt 517264790Sbaptstatic short *yylexemes = 0; 518264790Sbapt#endif /* YYBTYACC */ 519264790Sbapt#line 178 "varsyntax_calc1.y" 520264790Sbapt /* beginning of subroutines section */ 521264790Sbapt 522264790Sbapt#define BSZ 50 /* buffer size for floating point numbers */ 523264790Sbapt 524264790Sbapt /* lexical analysis */ 525264790Sbapt 526264790Sbaptstatic void 527264790Sbaptyyerror(const char *s) 528264790Sbapt{ 529264790Sbapt fprintf(stderr, "%s\n", s); 530264790Sbapt} 531264790Sbapt 532264790Sbaptint 533264790Sbaptyylex(void) 534264790Sbapt{ 535264790Sbapt int c; 536264790Sbapt 537264790Sbapt while ((c = getchar()) == ' ') 538264790Sbapt { /* skip over blanks */ 539264790Sbapt } 540264790Sbapt 541264790Sbapt if (isupper(c)) 542264790Sbapt { 543264790Sbapt yylval.ival = c - 'A'; 544264790Sbapt return (VREG); 545264790Sbapt } 546264790Sbapt if (islower(c)) 547264790Sbapt { 548264790Sbapt yylval.ival = c - 'a'; 549264790Sbapt return (DREG); 550264790Sbapt } 551264790Sbapt 552264790Sbapt if (isdigit(c) || c == '.') 553264790Sbapt { 554264790Sbapt /* gobble up digits, points, exponents */ 555264790Sbapt char buf[BSZ + 1], *cp = buf; 556264790Sbapt int dot = 0, expr = 0; 557264790Sbapt 558264790Sbapt for (; (cp - buf) < BSZ; ++cp, c = getchar()) 559264790Sbapt { 560264790Sbapt 561264790Sbapt *cp = (char) c; 562264790Sbapt if (isdigit(c)) 563264790Sbapt continue; 564264790Sbapt if (c == '.') 565264790Sbapt { 566264790Sbapt if (dot++ || expr) 567264790Sbapt return ('.'); /* will cause syntax error */ 568264790Sbapt continue; 569264790Sbapt } 570264790Sbapt 571264790Sbapt if (c == 'e') 572264790Sbapt { 573264790Sbapt if (expr++) 574264790Sbapt return ('e'); /* will cause syntax error */ 575264790Sbapt continue; 576264790Sbapt } 577264790Sbapt 578264790Sbapt /* end of number */ 579264790Sbapt break; 580264790Sbapt } 581264790Sbapt *cp = '\0'; 582264790Sbapt 583264790Sbapt if ((cp - buf) >= BSZ) 584264790Sbapt printf("constant too long: truncated\n"); 585264790Sbapt else 586264790Sbapt ungetc(c, stdin); /* push back last char read */ 587264790Sbapt yylval.dval = atof(buf); 588264790Sbapt return (CONST); 589264790Sbapt } 590264790Sbapt return (c); 591264790Sbapt} 592264790Sbapt 593264790Sbaptstatic INTERVAL 594264790Sbapthilo(double a, double b, double c, double d) 595264790Sbapt{ 596264790Sbapt /* returns the smallest interval containing a, b, c, and d */ 597264790Sbapt /* used by *, / routines */ 598264790Sbapt INTERVAL v; 599264790Sbapt 600264790Sbapt if (a > b) 601264790Sbapt { 602264790Sbapt v.hi = a; 603264790Sbapt v.lo = b; 604264790Sbapt } 605264790Sbapt else 606264790Sbapt { 607264790Sbapt v.hi = b; 608264790Sbapt v.lo = a; 609264790Sbapt } 610264790Sbapt 611264790Sbapt if (c > d) 612264790Sbapt { 613264790Sbapt if (c > v.hi) 614264790Sbapt v.hi = c; 615264790Sbapt if (d < v.lo) 616264790Sbapt v.lo = d; 617264790Sbapt } 618264790Sbapt else 619264790Sbapt { 620264790Sbapt if (d > v.hi) 621264790Sbapt v.hi = d; 622264790Sbapt if (c < v.lo) 623264790Sbapt v.lo = c; 624264790Sbapt } 625264790Sbapt return (v); 626264790Sbapt} 627264790Sbapt 628264790SbaptINTERVAL 629264790Sbaptvmul(double a, double b, INTERVAL v) 630264790Sbapt{ 631264790Sbapt return (hilo(a * v.hi, a * v.lo, b * v.hi, b * v.lo)); 632264790Sbapt} 633264790Sbapt 634264790Sbaptint 635264790Sbaptdcheck(INTERVAL v) 636264790Sbapt{ 637264790Sbapt if (v.hi >= 0. && v.lo <= 0.) 638264790Sbapt { 639264790Sbapt printf("divisor interval contains 0.\n"); 640264790Sbapt return (1); 641264790Sbapt } 642264790Sbapt return (0); 643264790Sbapt} 644264790Sbapt 645264790SbaptINTERVAL 646264790Sbaptvdiv(double a, double b, INTERVAL v) 647264790Sbapt{ 648264790Sbapt return (hilo(a / v.hi, a / v.lo, b / v.hi, b / v.lo)); 649264790Sbapt} 650272955Srodrigc#line 651 "varsyntax_calc1.tab.c" 651264790Sbapt 652264790Sbapt/* For use in generated program */ 653264790Sbapt#define yydepth (int)(yystack.s_mark - yystack.s_base) 654264790Sbapt#if YYBTYACC 655264790Sbapt#define yytrial (yyps->save) 656264790Sbapt#endif /* YYBTYACC */ 657264790Sbapt 658264790Sbapt#if YYDEBUG 659272955Srodrigc#include <stdio.h> /* needed for printf */ 660264790Sbapt#endif 661264790Sbapt 662272955Srodrigc#include <stdlib.h> /* needed for malloc, etc */ 663272955Srodrigc#include <string.h> /* needed for memset */ 664264790Sbapt 665264790Sbapt/* allocate initial stack or double stack size, up to YYMAXDEPTH */ 666264790Sbaptstatic int yygrowstack(YYSTACKDATA *data) 667264790Sbapt{ 668264790Sbapt int i; 669264790Sbapt unsigned newsize; 670264790Sbapt short *newss; 671264790Sbapt YYSTYPE *newvs; 672264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 673264790Sbapt YYLTYPE *newps; 674264790Sbapt#endif 675264790Sbapt 676264790Sbapt if ((newsize = data->stacksize) == 0) 677264790Sbapt newsize = YYINITSTACKSIZE; 678264790Sbapt else if (newsize >= YYMAXDEPTH) 679264790Sbapt return YYENOMEM; 680264790Sbapt else if ((newsize *= 2) > YYMAXDEPTH) 681264790Sbapt newsize = YYMAXDEPTH; 682264790Sbapt 683264790Sbapt i = (int) (data->s_mark - data->s_base); 684264790Sbapt newss = (short *)realloc(data->s_base, newsize * sizeof(*newss)); 685264790Sbapt if (newss == 0) 686264790Sbapt return YYENOMEM; 687264790Sbapt 688264790Sbapt data->s_base = newss; 689264790Sbapt data->s_mark = newss + i; 690264790Sbapt 691264790Sbapt newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs)); 692264790Sbapt if (newvs == 0) 693264790Sbapt return YYENOMEM; 694264790Sbapt 695264790Sbapt data->l_base = newvs; 696264790Sbapt data->l_mark = newvs + i; 697264790Sbapt 698264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 699264790Sbapt newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps)); 700264790Sbapt if (newps == 0) 701264790Sbapt return YYENOMEM; 702264790Sbapt 703264790Sbapt data->p_base = newps; 704264790Sbapt data->p_mark = newps + i; 705264790Sbapt#endif 706264790Sbapt 707264790Sbapt data->stacksize = newsize; 708264790Sbapt data->s_last = data->s_base + newsize - 1; 709264790Sbapt 710264790Sbapt#if YYDEBUG 711264790Sbapt if (yydebug) 712264790Sbapt fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize); 713264790Sbapt#endif 714264790Sbapt return 0; 715264790Sbapt} 716264790Sbapt 717264790Sbapt#if YYPURE || defined(YY_NO_LEAKS) 718264790Sbaptstatic void yyfreestack(YYSTACKDATA *data) 719264790Sbapt{ 720264790Sbapt free(data->s_base); 721264790Sbapt free(data->l_base); 722264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 723264790Sbapt free(data->p_base); 724264790Sbapt#endif 725264790Sbapt memset(data, 0, sizeof(*data)); 726264790Sbapt} 727264790Sbapt#else 728264790Sbapt#define yyfreestack(data) /* nothing */ 729264790Sbapt#endif /* YYPURE || defined(YY_NO_LEAKS) */ 730264790Sbapt#if YYBTYACC 731264790Sbapt 732264790Sbaptstatic YYParseState * 733264790SbaptyyNewState(unsigned size) 734264790Sbapt{ 735264790Sbapt YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState)); 736264790Sbapt if (p == NULL) return NULL; 737264790Sbapt 738264790Sbapt p->yystack.stacksize = size; 739264790Sbapt if (size == 0) 740264790Sbapt { 741264790Sbapt p->yystack.s_base = NULL; 742264790Sbapt p->yystack.l_base = NULL; 743264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 744264790Sbapt p->yystack.p_base = NULL; 745264790Sbapt#endif 746264790Sbapt return p; 747264790Sbapt } 748264790Sbapt p->yystack.s_base = (short *) malloc(size * sizeof(short)); 749264790Sbapt if (p->yystack.s_base == NULL) return NULL; 750264790Sbapt p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE)); 751264790Sbapt if (p->yystack.l_base == NULL) return NULL; 752264790Sbapt memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE)); 753264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 754264790Sbapt p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE)); 755264790Sbapt if (p->yystack.p_base == NULL) return NULL; 756264790Sbapt memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE)); 757264790Sbapt#endif 758264790Sbapt 759264790Sbapt return p; 760264790Sbapt} 761264790Sbapt 762264790Sbaptstatic void 763264790SbaptyyFreeState(YYParseState *p) 764264790Sbapt{ 765264790Sbapt yyfreestack(&p->yystack); 766264790Sbapt free(p); 767264790Sbapt} 768264790Sbapt#endif /* YYBTYACC */ 769264790Sbapt 770264790Sbapt#define YYABORT goto yyabort 771264790Sbapt#define YYREJECT goto yyabort 772264790Sbapt#define YYACCEPT goto yyaccept 773264790Sbapt#define YYERROR goto yyerrlab 774264790Sbapt#if YYBTYACC 775264790Sbapt#define YYVALID do { if (yyps->save) goto yyvalid; } while(0) 776264790Sbapt#define YYVALID_NESTED do { if (yyps->save && \ 777264790Sbapt yyps->save->save == 0) goto yyvalid; } while(0) 778264790Sbapt#endif /* YYBTYACC */ 779264790Sbapt 780264790Sbaptint 781264790SbaptYYPARSE_DECL() 782264790Sbapt{ 783264790Sbapt int yym, yyn, yystate, yyresult; 784264790Sbapt#if YYBTYACC 785264790Sbapt int yynewerrflag; 786264790Sbapt YYParseState *yyerrctx = NULL; 787264790Sbapt#endif /* YYBTYACC */ 788264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 789264790Sbapt YYLTYPE yyerror_loc_range[2]; /* position of error start & end */ 790264790Sbapt#endif 791264790Sbapt#if YYDEBUG 792264790Sbapt const char *yys; 793264790Sbapt 794264790Sbapt if ((yys = getenv("YYDEBUG")) != 0) 795264790Sbapt { 796264790Sbapt yyn = *yys; 797264790Sbapt if (yyn >= '0' && yyn <= '9') 798264790Sbapt yydebug = yyn - '0'; 799264790Sbapt } 800264790Sbapt if (yydebug) 801264790Sbapt fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX); 802264790Sbapt#endif 803264790Sbapt 804264790Sbapt#if YYBTYACC 805264790Sbapt yyps = yyNewState(0); if (yyps == 0) goto yyenomem; 806264790Sbapt yyps->save = 0; 807264790Sbapt#endif /* YYBTYACC */ 808264790Sbapt yynerrs = 0; 809264790Sbapt yyerrflag = 0; 810264790Sbapt yychar = YYEMPTY; 811264790Sbapt yystate = 0; 812264790Sbapt 813264790Sbapt#if YYPURE 814264790Sbapt memset(&yystack, 0, sizeof(yystack)); 815264790Sbapt#endif 816264790Sbapt 817264790Sbapt if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; 818264790Sbapt yystack.s_mark = yystack.s_base; 819264790Sbapt yystack.l_mark = yystack.l_base; 820264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 821264790Sbapt yystack.p_mark = yystack.p_base; 822264790Sbapt#endif 823264790Sbapt yystate = 0; 824264790Sbapt *yystack.s_mark = 0; 825264790Sbapt 826264790Sbaptyyloop: 827264790Sbapt if ((yyn = yydefred[yystate]) != 0) goto yyreduce; 828264790Sbapt if (yychar < 0) 829264790Sbapt { 830264790Sbapt#if YYBTYACC 831264790Sbapt do { 832264790Sbapt if (yylvp < yylve) 833264790Sbapt { 834264790Sbapt /* we're currently re-reading tokens */ 835264790Sbapt yylval = *yylvp++; 836264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 837264790Sbapt yylloc = *yylpp++; 838264790Sbapt#endif 839264790Sbapt yychar = *yylexp++; 840264790Sbapt break; 841264790Sbapt } 842264790Sbapt if (yyps->save) 843264790Sbapt { 844264790Sbapt /* in trial mode; save scanner results for future parse attempts */ 845264790Sbapt if (yylvp == yylvlim) 846264790Sbapt { /* Enlarge lexical value queue */ 847272955Srodrigc size_t p = (size_t) (yylvp - yylvals); 848272955Srodrigc size_t s = (size_t) (yylvlim - yylvals); 849264790Sbapt 850264790Sbapt s += YYLVQUEUEGROWTH; 851264790Sbapt if ((yylexemes = (short *) realloc(yylexemes, s * sizeof(short))) == NULL) goto yyenomem; 852264790Sbapt if ((yylvals = (YYSTYPE *) realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; 853264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 854264790Sbapt if ((yylpsns = (YYLTYPE *) realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; 855264790Sbapt#endif 856264790Sbapt yylvp = yylve = yylvals + p; 857264790Sbapt yylvlim = yylvals + s; 858264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 859264790Sbapt yylpp = yylpe = yylpsns + p; 860264790Sbapt yylplim = yylpsns + s; 861264790Sbapt#endif 862264790Sbapt yylexp = yylexemes + p; 863264790Sbapt } 864264790Sbapt *yylexp = (short) YYLEX; 865264790Sbapt *yylvp++ = yylval; 866264790Sbapt yylve++; 867264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 868264790Sbapt *yylpp++ = yylloc; 869264790Sbapt yylpe++; 870264790Sbapt#endif 871264790Sbapt yychar = *yylexp++; 872264790Sbapt break; 873264790Sbapt } 874264790Sbapt /* normal operation, no conflict encountered */ 875264790Sbapt#endif /* YYBTYACC */ 876264790Sbapt yychar = YYLEX; 877264790Sbapt#if YYBTYACC 878264790Sbapt } while (0); 879264790Sbapt#endif /* YYBTYACC */ 880264790Sbapt if (yychar < 0) yychar = YYEOF; 881264790Sbapt /* if ((yychar = YYLEX) < 0) yychar = YYEOF; */ 882264790Sbapt#if YYDEBUG 883264790Sbapt if (yydebug) 884264790Sbapt { 885264790Sbapt yys = yyname[YYTRANSLATE(yychar)]; 886264790Sbapt fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)", 887264790Sbapt YYDEBUGSTR, yydepth, yystate, yychar, yys); 888264790Sbapt#ifdef YYSTYPE_TOSTRING 889264790Sbapt#if YYBTYACC 890264790Sbapt if (!yytrial) 891264790Sbapt#endif /* YYBTYACC */ 892264790Sbapt fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval)); 893264790Sbapt#endif 894264790Sbapt fputc('\n', stderr); 895264790Sbapt } 896264790Sbapt#endif 897264790Sbapt } 898264790Sbapt#if YYBTYACC 899264790Sbapt 900264790Sbapt /* Do we have a conflict? */ 901264790Sbapt if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 && 902264790Sbapt yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) 903264790Sbapt { 904264790Sbapt YYINT ctry; 905264790Sbapt 906264790Sbapt if (yypath) 907264790Sbapt { 908264790Sbapt YYParseState *save; 909264790Sbapt#if YYDEBUG 910264790Sbapt if (yydebug) 911264790Sbapt fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n", 912264790Sbapt YYDEBUGSTR, yydepth, yystate); 913264790Sbapt#endif 914264790Sbapt /* Switch to the next conflict context */ 915264790Sbapt save = yypath; 916264790Sbapt yypath = save->save; 917264790Sbapt save->save = NULL; 918264790Sbapt ctry = save->ctry; 919264790Sbapt if (save->state != yystate) YYABORT; 920264790Sbapt yyFreeState(save); 921264790Sbapt 922264790Sbapt } 923264790Sbapt else 924264790Sbapt { 925264790Sbapt 926264790Sbapt /* Unresolved conflict - start/continue trial parse */ 927264790Sbapt YYParseState *save; 928264790Sbapt#if YYDEBUG 929264790Sbapt if (yydebug) 930264790Sbapt { 931264790Sbapt fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate); 932264790Sbapt if (yyps->save) 933264790Sbapt fputs("ALREADY in conflict, continuing trial parse.\n", stderr); 934264790Sbapt else 935264790Sbapt fputs("Starting trial parse.\n", stderr); 936264790Sbapt } 937264790Sbapt#endif 938264790Sbapt save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); 939264790Sbapt if (save == NULL) goto yyenomem; 940264790Sbapt save->save = yyps->save; 941264790Sbapt save->state = yystate; 942264790Sbapt save->errflag = yyerrflag; 943264790Sbapt save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base); 944272955Srodrigc memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(short)); 945264790Sbapt save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base); 946272955Srodrigc memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); 947264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 948264790Sbapt save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base); 949272955Srodrigc memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); 950264790Sbapt#endif 951264790Sbapt ctry = yytable[yyn]; 952264790Sbapt if (yyctable[ctry] == -1) 953264790Sbapt { 954264790Sbapt#if YYDEBUG 955264790Sbapt if (yydebug && yychar >= YYEOF) 956264790Sbapt fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth); 957264790Sbapt#endif 958264790Sbapt ctry++; 959264790Sbapt } 960264790Sbapt save->ctry = ctry; 961264790Sbapt if (yyps->save == NULL) 962264790Sbapt { 963264790Sbapt /* If this is a first conflict in the stack, start saving lexemes */ 964264790Sbapt if (!yylexemes) 965264790Sbapt { 966264790Sbapt yylexemes = (short *) malloc((YYLVQUEUEGROWTH) * sizeof(short)); 967264790Sbapt if (yylexemes == NULL) goto yyenomem; 968264790Sbapt yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE)); 969264790Sbapt if (yylvals == NULL) goto yyenomem; 970264790Sbapt yylvlim = yylvals + YYLVQUEUEGROWTH; 971264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 972264790Sbapt yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE)); 973264790Sbapt if (yylpsns == NULL) goto yyenomem; 974264790Sbapt yylplim = yylpsns + YYLVQUEUEGROWTH; 975264790Sbapt#endif 976264790Sbapt } 977264790Sbapt if (yylvp == yylve) 978264790Sbapt { 979264790Sbapt yylvp = yylve = yylvals; 980264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 981264790Sbapt yylpp = yylpe = yylpsns; 982264790Sbapt#endif 983264790Sbapt yylexp = yylexemes; 984264790Sbapt if (yychar >= YYEOF) 985264790Sbapt { 986264790Sbapt *yylve++ = yylval; 987264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 988264790Sbapt *yylpe++ = yylloc; 989264790Sbapt#endif 990264790Sbapt *yylexp = (short) yychar; 991264790Sbapt yychar = YYEMPTY; 992264790Sbapt } 993264790Sbapt } 994264790Sbapt } 995264790Sbapt if (yychar >= YYEOF) 996264790Sbapt { 997264790Sbapt yylvp--; 998264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 999264790Sbapt yylpp--; 1000264790Sbapt#endif 1001264790Sbapt yylexp--; 1002264790Sbapt yychar = YYEMPTY; 1003264790Sbapt } 1004272955Srodrigc save->lexeme = (int) (yylvp - yylvals); 1005264790Sbapt yyps->save = save; 1006264790Sbapt } 1007264790Sbapt if (yytable[yyn] == ctry) 1008264790Sbapt { 1009264790Sbapt#if YYDEBUG 1010264790Sbapt if (yydebug) 1011264790Sbapt fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", 1012264790Sbapt YYDEBUGSTR, yydepth, yystate, yyctable[ctry]); 1013264790Sbapt#endif 1014264790Sbapt if (yychar < 0) 1015264790Sbapt { 1016264790Sbapt yylvp++; 1017264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1018264790Sbapt yylpp++; 1019264790Sbapt#endif 1020264790Sbapt yylexp++; 1021264790Sbapt } 1022264790Sbapt if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) 1023264790Sbapt goto yyoverflow; 1024264790Sbapt yystate = yyctable[ctry]; 1025264790Sbapt *++yystack.s_mark = (short) yystate; 1026264790Sbapt *++yystack.l_mark = yylval; 1027264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1028264790Sbapt *++yystack.p_mark = yylloc; 1029264790Sbapt#endif 1030264790Sbapt yychar = YYEMPTY; 1031264790Sbapt if (yyerrflag > 0) --yyerrflag; 1032264790Sbapt goto yyloop; 1033264790Sbapt } 1034264790Sbapt else 1035264790Sbapt { 1036264790Sbapt yyn = yyctable[ctry]; 1037264790Sbapt goto yyreduce; 1038264790Sbapt } 1039264790Sbapt } /* End of code dealing with conflicts */ 1040264790Sbapt#endif /* YYBTYACC */ 1041264790Sbapt if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && 1042264790Sbapt yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) 1043264790Sbapt { 1044264790Sbapt#if YYDEBUG 1045264790Sbapt if (yydebug) 1046264790Sbapt fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", 1047264790Sbapt YYDEBUGSTR, yydepth, yystate, yytable[yyn]); 1048264790Sbapt#endif 1049264790Sbapt if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; 1050264790Sbapt yystate = yytable[yyn]; 1051264790Sbapt *++yystack.s_mark = yytable[yyn]; 1052264790Sbapt *++yystack.l_mark = yylval; 1053264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1054264790Sbapt *++yystack.p_mark = yylloc; 1055264790Sbapt#endif 1056264790Sbapt yychar = YYEMPTY; 1057264790Sbapt if (yyerrflag > 0) --yyerrflag; 1058264790Sbapt goto yyloop; 1059264790Sbapt } 1060264790Sbapt if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 && 1061264790Sbapt yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) 1062264790Sbapt { 1063264790Sbapt yyn = yytable[yyn]; 1064264790Sbapt goto yyreduce; 1065264790Sbapt } 1066264790Sbapt if (yyerrflag != 0) goto yyinrecovery; 1067264790Sbapt#if YYBTYACC 1068264790Sbapt 1069264790Sbapt yynewerrflag = 1; 1070264790Sbapt goto yyerrhandler; 1071264790Sbapt goto yyerrlab; 1072264790Sbapt 1073264790Sbaptyyerrlab: 1074264790Sbapt yynewerrflag = 0; 1075264790Sbaptyyerrhandler: 1076264790Sbapt while (yyps->save) 1077264790Sbapt { 1078264790Sbapt int ctry; 1079264790Sbapt YYParseState *save = yyps->save; 1080264790Sbapt#if YYDEBUG 1081264790Sbapt if (yydebug) 1082264790Sbapt fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n", 1083264790Sbapt YYDEBUGSTR, yydepth, yystate, yyps->save->state, 1084264790Sbapt (int)(yylvp - yylvals - yyps->save->lexeme)); 1085264790Sbapt#endif 1086264790Sbapt /* Memorize most forward-looking error state in case it's really an error. */ 1087264790Sbapt if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals) 1088264790Sbapt { 1089264790Sbapt /* Free old saved error context state */ 1090264790Sbapt if (yyerrctx) yyFreeState(yyerrctx); 1091264790Sbapt /* Create and fill out new saved error context state */ 1092264790Sbapt yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); 1093264790Sbapt if (yyerrctx == NULL) goto yyenomem; 1094264790Sbapt yyerrctx->save = yyps->save; 1095264790Sbapt yyerrctx->state = yystate; 1096264790Sbapt yyerrctx->errflag = yyerrflag; 1097264790Sbapt yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base); 1098272955Srodrigc memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(short)); 1099264790Sbapt yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base); 1100272955Srodrigc memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); 1101264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1102264790Sbapt yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base); 1103272955Srodrigc memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); 1104264790Sbapt#endif 1105272955Srodrigc yyerrctx->lexeme = (int) (yylvp - yylvals); 1106264790Sbapt } 1107264790Sbapt yylvp = yylvals + save->lexeme; 1108264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1109264790Sbapt yylpp = yylpsns + save->lexeme; 1110264790Sbapt#endif 1111264790Sbapt yylexp = yylexemes + save->lexeme; 1112264790Sbapt yychar = YYEMPTY; 1113264790Sbapt yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base); 1114272955Srodrigc memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(short)); 1115264790Sbapt yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base); 1116272955Srodrigc memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); 1117264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1118264790Sbapt yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base); 1119272955Srodrigc memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); 1120264790Sbapt#endif 1121264790Sbapt ctry = ++save->ctry; 1122264790Sbapt yystate = save->state; 1123264790Sbapt /* We tried shift, try reduce now */ 1124264790Sbapt if ((yyn = yyctable[ctry]) >= 0) goto yyreduce; 1125264790Sbapt yyps->save = save->save; 1126264790Sbapt save->save = NULL; 1127264790Sbapt yyFreeState(save); 1128264790Sbapt 1129264790Sbapt /* Nothing left on the stack -- error */ 1130264790Sbapt if (!yyps->save) 1131264790Sbapt { 1132264790Sbapt#if YYDEBUG 1133264790Sbapt if (yydebug) 1134264790Sbapt fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n", 1135264790Sbapt YYPREFIX, yydepth); 1136264790Sbapt#endif 1137264790Sbapt /* Restore state as it was in the most forward-advanced error */ 1138264790Sbapt yylvp = yylvals + yyerrctx->lexeme; 1139264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1140264790Sbapt yylpp = yylpsns + yyerrctx->lexeme; 1141264790Sbapt#endif 1142264790Sbapt yylexp = yylexemes + yyerrctx->lexeme; 1143264790Sbapt yychar = yylexp[-1]; 1144264790Sbapt yylval = yylvp[-1]; 1145264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1146264790Sbapt yylloc = yylpp[-1]; 1147264790Sbapt#endif 1148264790Sbapt yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base); 1149272955Srodrigc memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(short)); 1150264790Sbapt yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base); 1151272955Srodrigc memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); 1152264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1153264790Sbapt yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base); 1154272955Srodrigc memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); 1155264790Sbapt#endif 1156264790Sbapt yystate = yyerrctx->state; 1157264790Sbapt yyFreeState(yyerrctx); 1158264790Sbapt yyerrctx = NULL; 1159264790Sbapt } 1160264790Sbapt yynewerrflag = 1; 1161264790Sbapt } 1162264790Sbapt if (yynewerrflag == 0) goto yyinrecovery; 1163264790Sbapt#endif /* YYBTYACC */ 1164264790Sbapt 1165264790Sbapt YYERROR_CALL("syntax error"); 1166264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1167264790Sbapt yyerror_loc_range[0] = yylloc; /* lookahead position is error start position */ 1168264790Sbapt#endif 1169264790Sbapt 1170264790Sbapt#if !YYBTYACC 1171264790Sbapt goto yyerrlab; 1172264790Sbaptyyerrlab: 1173264790Sbapt#endif 1174264790Sbapt ++yynerrs; 1175264790Sbapt 1176264790Sbaptyyinrecovery: 1177264790Sbapt if (yyerrflag < 3) 1178264790Sbapt { 1179264790Sbapt yyerrflag = 3; 1180264790Sbapt for (;;) 1181264790Sbapt { 1182264790Sbapt if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && 1183264790Sbapt yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE) 1184264790Sbapt { 1185264790Sbapt#if YYDEBUG 1186264790Sbapt if (yydebug) 1187264790Sbapt fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n", 1188264790Sbapt YYDEBUGSTR, yydepth, *yystack.s_mark, yytable[yyn]); 1189264790Sbapt#endif 1190264790Sbapt if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; 1191264790Sbapt yystate = yytable[yyn]; 1192264790Sbapt *++yystack.s_mark = yytable[yyn]; 1193264790Sbapt *++yystack.l_mark = yylval; 1194264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1195264790Sbapt /* lookahead position is error end position */ 1196264790Sbapt yyerror_loc_range[1] = yylloc; 1197264790Sbapt YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */ 1198264790Sbapt *++yystack.p_mark = yyloc; 1199264790Sbapt#endif 1200264790Sbapt goto yyloop; 1201264790Sbapt } 1202264790Sbapt else 1203264790Sbapt { 1204264790Sbapt#if YYDEBUG 1205264790Sbapt if (yydebug) 1206264790Sbapt fprintf(stderr, "%s[%d]: error recovery discarding state %d\n", 1207264790Sbapt YYDEBUGSTR, yydepth, *yystack.s_mark); 1208264790Sbapt#endif 1209264790Sbapt if (yystack.s_mark <= yystack.s_base) goto yyabort; 1210264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1211264790Sbapt /* the current TOS position is the error start position */ 1212264790Sbapt yyerror_loc_range[0] = *yystack.p_mark; 1213264790Sbapt#endif 1214264790Sbapt#if defined(YYDESTRUCT_CALL) 1215264790Sbapt#if YYBTYACC 1216264790Sbapt if (!yytrial) 1217264790Sbapt#endif /* YYBTYACC */ 1218264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1219264790Sbapt YYDESTRUCT_CALL("error: discarding state", 1220264790Sbapt yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark); 1221264790Sbapt#else 1222264790Sbapt YYDESTRUCT_CALL("error: discarding state", 1223264790Sbapt yystos[*yystack.s_mark], yystack.l_mark); 1224264790Sbapt#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ 1225264790Sbapt#endif /* defined(YYDESTRUCT_CALL) */ 1226264790Sbapt --yystack.s_mark; 1227264790Sbapt --yystack.l_mark; 1228264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1229264790Sbapt --yystack.p_mark; 1230264790Sbapt#endif 1231264790Sbapt } 1232264790Sbapt } 1233264790Sbapt } 1234264790Sbapt else 1235264790Sbapt { 1236264790Sbapt if (yychar == YYEOF) goto yyabort; 1237264790Sbapt#if YYDEBUG 1238264790Sbapt if (yydebug) 1239264790Sbapt { 1240264790Sbapt yys = yyname[YYTRANSLATE(yychar)]; 1241264790Sbapt fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n", 1242264790Sbapt YYDEBUGSTR, yydepth, yystate, yychar, yys); 1243264790Sbapt } 1244264790Sbapt#endif 1245264790Sbapt#if defined(YYDESTRUCT_CALL) 1246264790Sbapt#if YYBTYACC 1247264790Sbapt if (!yytrial) 1248264790Sbapt#endif /* YYBTYACC */ 1249264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1250264790Sbapt YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc); 1251264790Sbapt#else 1252264790Sbapt YYDESTRUCT_CALL("error: discarding token", yychar, &yylval); 1253264790Sbapt#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ 1254264790Sbapt#endif /* defined(YYDESTRUCT_CALL) */ 1255264790Sbapt yychar = YYEMPTY; 1256264790Sbapt goto yyloop; 1257264790Sbapt } 1258264790Sbapt 1259264790Sbaptyyreduce: 1260264790Sbapt yym = yylen[yyn]; 1261264790Sbapt#if YYDEBUG 1262264790Sbapt if (yydebug) 1263264790Sbapt { 1264264790Sbapt fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)", 1265264790Sbapt YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]); 1266264790Sbapt#ifdef YYSTYPE_TOSTRING 1267264790Sbapt#if YYBTYACC 1268264790Sbapt if (!yytrial) 1269264790Sbapt#endif /* YYBTYACC */ 1270264790Sbapt if (yym > 0) 1271264790Sbapt { 1272264790Sbapt int i; 1273264790Sbapt fputc('<', stderr); 1274264790Sbapt for (i = yym; i > 0; i--) 1275264790Sbapt { 1276264790Sbapt if (i != yym) fputs(", ", stderr); 1277264790Sbapt fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]], 1278264790Sbapt yystack.l_mark[1-i]), stderr); 1279264790Sbapt } 1280264790Sbapt fputc('>', stderr); 1281264790Sbapt } 1282264790Sbapt#endif 1283264790Sbapt fputc('\n', stderr); 1284264790Sbapt } 1285264790Sbapt#endif 1286264790Sbapt if (yym > 0) 1287264790Sbapt yyval = yystack.l_mark[1-yym]; 1288264790Sbapt else 1289264790Sbapt memset(&yyval, 0, sizeof yyval); 1290264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1291264790Sbapt 1292264790Sbapt /* Perform position reduction */ 1293264790Sbapt memset(&yyloc, 0, sizeof(yyloc)); 1294264790Sbapt#if YYBTYACC 1295264790Sbapt if (!yytrial) 1296264790Sbapt#endif /* YYBTYACC */ 1297264790Sbapt { 1298264790Sbapt YYLLOC_DEFAULT(yyloc, &yystack.p_mark[1-yym], yym); 1299264790Sbapt /* just in case YYERROR is invoked within the action, save 1300264790Sbapt the start of the rhs as the error start position */ 1301264790Sbapt yyerror_loc_range[0] = yystack.p_mark[1-yym]; 1302264790Sbapt } 1303264790Sbapt#endif 1304264790Sbapt 1305264790Sbapt switch (yyn) 1306264790Sbapt { 1307264790Sbaptcase 3: 1308264790Sbapt#line 59 "varsyntax_calc1.y" 1309264790Sbapt { 1310264790Sbapt (void) printf("%15.8f\n", yystack.l_mark[-1].dval); 1311264790Sbapt } 1312264790Sbaptbreak; 1313264790Sbaptcase 4: 1314264790Sbapt#line 63 "varsyntax_calc1.y" 1315264790Sbapt { 1316264790Sbapt (void) printf("(%15.8f, %15.8f)\n", yystack.l_mark[-1].vval.lo, yystack.l_mark[-1].vval.hi); 1317264790Sbapt } 1318264790Sbaptbreak; 1319264790Sbaptcase 5: 1320264790Sbapt#line 67 "varsyntax_calc1.y" 1321264790Sbapt { 1322264790Sbapt dreg[yystack.l_mark[-3].ival] = yystack.l_mark[-1].dval; 1323264790Sbapt } 1324264790Sbaptbreak; 1325264790Sbaptcase 6: 1326264790Sbapt#line 71 "varsyntax_calc1.y" 1327264790Sbapt { 1328264790Sbapt vreg[yystack.l_mark[-3].ival] = yystack.l_mark[-1].vval; 1329264790Sbapt } 1330264790Sbaptbreak; 1331264790Sbaptcase 7: 1332264790Sbapt#line 75 "varsyntax_calc1.y" 1333264790Sbapt { 1334264790Sbapt yyerrok; 1335264790Sbapt } 1336264790Sbaptbreak; 1337264790Sbaptcase 9: 1338264790Sbapt#line 82 "varsyntax_calc1.y" 1339264790Sbapt { 1340264790Sbapt yyval.dval = dreg[yystack.l_mark[0].ival]; /* $$ & $1 are sufficient here*/ 1341264790Sbapt } 1342264790Sbaptbreak; 1343264790Sbaptcase 10: 1344264790Sbapt#line 86 "varsyntax_calc1.y" 1345264790Sbapt { 1346264790Sbapt yyval.dval = yystack.l_mark[-2].dval + yystack.l_mark[0].dval; 1347264790Sbapt } 1348264790Sbaptbreak; 1349264790Sbaptcase 11: 1350264790Sbapt#line 90 "varsyntax_calc1.y" 1351264790Sbapt { 1352264790Sbapt yyval.dval = yystack.l_mark[-2].dval - yystack.l_mark[0].dval; 1353264790Sbapt } 1354264790Sbaptbreak; 1355264790Sbaptcase 12: 1356264790Sbapt#line 94 "varsyntax_calc1.y" 1357264790Sbapt { 1358264790Sbapt yyval.dval = yystack.l_mark[-2].dval * yystack.l_mark[0].dval; 1359264790Sbapt } 1360264790Sbaptbreak; 1361264790Sbaptcase 13: 1362264790Sbapt#line 98 "varsyntax_calc1.y" 1363264790Sbapt { 1364264790Sbapt yyval.dval = yystack.l_mark[-2].dval / yystack.l_mark[0].dval; 1365264790Sbapt } 1366264790Sbaptbreak; 1367264790Sbaptcase 14: 1368264790Sbapt#line 102 "varsyntax_calc1.y" 1369264790Sbapt { 1370264790Sbapt yyval.dval = -yystack.l_mark[0].dval; 1371264790Sbapt } 1372264790Sbaptbreak; 1373264790Sbaptcase 15: 1374264790Sbapt#line 106 "varsyntax_calc1.y" 1375264790Sbapt { 1376264790Sbapt yyval.dval = yystack.l_mark[-1].dval; 1377264790Sbapt } 1378264790Sbaptbreak; 1379264790Sbaptcase 16: 1380264790Sbapt#line 112 "varsyntax_calc1.y" 1381264790Sbapt { 1382264790Sbapt yyval.vval.hi = yyval.vval.lo = yystack.l_mark[0].dval; 1383264790Sbapt } 1384264790Sbaptbreak; 1385264790Sbaptcase 17: 1386264790Sbapt#line 116 "varsyntax_calc1.y" 1387264790Sbapt { 1388264790Sbapt yyval.vval.lo = yystack.l_mark[-3].dval; 1389264790Sbapt yyval.vval.hi = yystack.l_mark[-1].dval; 1390264790Sbapt if ( yyval.vval.lo > yyval.vval.hi ) 1391264790Sbapt { 1392264790Sbapt (void) printf("interval out of order\n"); 1393264790Sbapt YYERROR; 1394264790Sbapt } 1395264790Sbapt } 1396264790Sbaptbreak; 1397264790Sbaptcase 18: 1398264790Sbapt#line 126 "varsyntax_calc1.y" 1399264790Sbapt { 1400264790Sbapt yyval.vval = vreg[yystack.l_mark[0].ival]; 1401264790Sbapt } 1402264790Sbaptbreak; 1403264790Sbaptcase 19: 1404264790Sbapt#line 130 "varsyntax_calc1.y" 1405264790Sbapt { 1406264790Sbapt yyval.vval.hi = yystack.l_mark[-2].vval.hi + yystack.l_mark[0].vval.hi; 1407264790Sbapt yyval.vval.lo = yystack.l_mark[-2].vval.lo + yystack.l_mark[0].vval.lo; 1408264790Sbapt } 1409264790Sbaptbreak; 1410264790Sbaptcase 20: 1411264790Sbapt#line 135 "varsyntax_calc1.y" 1412264790Sbapt { 1413264790Sbapt yyval.vval.hi = yystack.l_mark[-2].dval + yystack.l_mark[0].vval.hi; 1414264790Sbapt yyval.vval.lo = yystack.l_mark[-2].dval + yystack.l_mark[0].vval.lo; 1415264790Sbapt } 1416264790Sbaptbreak; 1417264790Sbaptcase 21: 1418264790Sbapt#line 140 "varsyntax_calc1.y" 1419264790Sbapt { 1420264790Sbapt yyval.vval.hi = yystack.l_mark[-2].vval.hi - yystack.l_mark[0].vval.lo; 1421264790Sbapt yyval.vval.lo = yystack.l_mark[-2].vval.lo - yystack.l_mark[0].vval.hi; 1422264790Sbapt } 1423264790Sbaptbreak; 1424264790Sbaptcase 22: 1425264790Sbapt#line 145 "varsyntax_calc1.y" 1426264790Sbapt { 1427264790Sbapt yyval.vval.hi = yystack.l_mark[-2].dval - yystack.l_mark[0].vval.lo; 1428264790Sbapt yyval.vval.lo = yystack.l_mark[-2].dval - yystack.l_mark[0].vval.hi; 1429264790Sbapt } 1430264790Sbaptbreak; 1431264790Sbaptcase 23: 1432264790Sbapt#line 150 "varsyntax_calc1.y" 1433264790Sbapt { 1434264790Sbapt yyval.vval = vmul( yystack.l_mark[-2].vval.lo, yystack.l_mark[-2].vval.hi, yystack.l_mark[0].vval ); 1435264790Sbapt } 1436264790Sbaptbreak; 1437264790Sbaptcase 24: 1438264790Sbapt#line 154 "varsyntax_calc1.y" 1439264790Sbapt { 1440264790Sbapt yyval.vval = vmul (yystack.l_mark[-2].dval, yystack.l_mark[-2].dval, yystack.l_mark[0].vval ); 1441264790Sbapt } 1442264790Sbaptbreak; 1443264790Sbaptcase 25: 1444264790Sbapt#line 158 "varsyntax_calc1.y" 1445264790Sbapt { 1446264790Sbapt if (dcheck(yystack.l_mark[0].vval)) YYERROR; 1447264790Sbapt yyval.vval = vdiv ( yystack.l_mark[-2].vval.lo, yystack.l_mark[-2].vval.hi, yystack.l_mark[0].vval ); 1448264790Sbapt } 1449264790Sbaptbreak; 1450264790Sbaptcase 26: 1451264790Sbapt#line 163 "varsyntax_calc1.y" 1452264790Sbapt { 1453264790Sbapt if (dcheck ( yystack.l_mark[0].vval )) YYERROR; 1454264790Sbapt yyval.vval = vdiv (yystack.l_mark[-2].dval, yystack.l_mark[-2].dval, yystack.l_mark[0].vval ); 1455264790Sbapt } 1456264790Sbaptbreak; 1457264790Sbaptcase 27: 1458264790Sbapt#line 168 "varsyntax_calc1.y" 1459264790Sbapt { 1460264790Sbapt yyval.vval.hi = -yystack.l_mark[0].vval.lo; 1461264790Sbapt yyval.vval.lo = -yystack.l_mark[0].vval.hi; 1462264790Sbapt } 1463264790Sbaptbreak; 1464264790Sbaptcase 28: 1465264790Sbapt#line 173 "varsyntax_calc1.y" 1466264790Sbapt { 1467264790Sbapt yyval.vval = yystack.l_mark[-1].vval; 1468264790Sbapt } 1469264790Sbaptbreak; 1470272955Srodrigc#line 1471 "varsyntax_calc1.tab.c" 1471264790Sbapt default: 1472264790Sbapt break; 1473264790Sbapt } 1474264790Sbapt yystack.s_mark -= yym; 1475264790Sbapt yystate = *yystack.s_mark; 1476264790Sbapt yystack.l_mark -= yym; 1477264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1478264790Sbapt yystack.p_mark -= yym; 1479264790Sbapt#endif 1480264790Sbapt yym = yylhs[yyn]; 1481264790Sbapt if (yystate == 0 && yym == 0) 1482264790Sbapt { 1483264790Sbapt#if YYDEBUG 1484264790Sbapt if (yydebug) 1485264790Sbapt { 1486264790Sbapt fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); 1487264790Sbapt#ifdef YYSTYPE_TOSTRING 1488264790Sbapt#if YYBTYACC 1489264790Sbapt if (!yytrial) 1490264790Sbapt#endif /* YYBTYACC */ 1491264790Sbapt fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval)); 1492264790Sbapt#endif 1493264790Sbapt fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL); 1494264790Sbapt } 1495264790Sbapt#endif 1496264790Sbapt yystate = YYFINAL; 1497264790Sbapt *++yystack.s_mark = YYFINAL; 1498264790Sbapt *++yystack.l_mark = yyval; 1499264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1500264790Sbapt *++yystack.p_mark = yyloc; 1501264790Sbapt#endif 1502264790Sbapt if (yychar < 0) 1503264790Sbapt { 1504264790Sbapt#if YYBTYACC 1505264790Sbapt do { 1506264790Sbapt if (yylvp < yylve) 1507264790Sbapt { 1508264790Sbapt /* we're currently re-reading tokens */ 1509264790Sbapt yylval = *yylvp++; 1510264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1511264790Sbapt yylloc = *yylpp++; 1512264790Sbapt#endif 1513264790Sbapt yychar = *yylexp++; 1514264790Sbapt break; 1515264790Sbapt } 1516264790Sbapt if (yyps->save) 1517264790Sbapt { 1518264790Sbapt /* in trial mode; save scanner results for future parse attempts */ 1519264790Sbapt if (yylvp == yylvlim) 1520264790Sbapt { /* Enlarge lexical value queue */ 1521272955Srodrigc size_t p = (size_t) (yylvp - yylvals); 1522272955Srodrigc size_t s = (size_t) (yylvlim - yylvals); 1523264790Sbapt 1524264790Sbapt s += YYLVQUEUEGROWTH; 1525264790Sbapt if ((yylexemes = (short *) realloc(yylexemes, s * sizeof(short))) == NULL) 1526264790Sbapt goto yyenomem; 1527264790Sbapt if ((yylvals = (YYSTYPE *) realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) 1528264790Sbapt goto yyenomem; 1529264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1530264790Sbapt if ((yylpsns = (YYLTYPE *) realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) 1531264790Sbapt goto yyenomem; 1532264790Sbapt#endif 1533264790Sbapt yylvp = yylve = yylvals + p; 1534264790Sbapt yylvlim = yylvals + s; 1535264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1536264790Sbapt yylpp = yylpe = yylpsns + p; 1537264790Sbapt yylplim = yylpsns + s; 1538264790Sbapt#endif 1539264790Sbapt yylexp = yylexemes + p; 1540264790Sbapt } 1541264790Sbapt *yylexp = (short) YYLEX; 1542264790Sbapt *yylvp++ = yylval; 1543264790Sbapt yylve++; 1544264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1545264790Sbapt *yylpp++ = yylloc; 1546264790Sbapt yylpe++; 1547264790Sbapt#endif 1548264790Sbapt yychar = *yylexp++; 1549264790Sbapt break; 1550264790Sbapt } 1551264790Sbapt /* normal operation, no conflict encountered */ 1552264790Sbapt#endif /* YYBTYACC */ 1553264790Sbapt yychar = YYLEX; 1554264790Sbapt#if YYBTYACC 1555264790Sbapt } while (0); 1556264790Sbapt#endif /* YYBTYACC */ 1557264790Sbapt if (yychar < 0) yychar = YYEOF; 1558264790Sbapt /* if ((yychar = YYLEX) < 0) yychar = YYEOF; */ 1559264790Sbapt#if YYDEBUG 1560264790Sbapt if (yydebug) 1561264790Sbapt { 1562264790Sbapt yys = yyname[YYTRANSLATE(yychar)]; 1563264790Sbapt fprintf(stderr, "%s[%d]: state %d, reading %d (%s)\n", 1564264790Sbapt YYDEBUGSTR, yydepth, YYFINAL, yychar, yys); 1565264790Sbapt } 1566264790Sbapt#endif 1567264790Sbapt } 1568264790Sbapt if (yychar == YYEOF) goto yyaccept; 1569264790Sbapt goto yyloop; 1570264790Sbapt } 1571264790Sbapt if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && 1572264790Sbapt yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate) 1573264790Sbapt yystate = yytable[yyn]; 1574264790Sbapt else 1575264790Sbapt yystate = yydgoto[yym]; 1576264790Sbapt#if YYDEBUG 1577264790Sbapt if (yydebug) 1578264790Sbapt { 1579264790Sbapt fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); 1580264790Sbapt#ifdef YYSTYPE_TOSTRING 1581264790Sbapt#if YYBTYACC 1582264790Sbapt if (!yytrial) 1583264790Sbapt#endif /* YYBTYACC */ 1584264790Sbapt fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval)); 1585264790Sbapt#endif 1586264790Sbapt fprintf(stderr, "shifting from state %d to state %d\n", *yystack.s_mark, yystate); 1587264790Sbapt } 1588264790Sbapt#endif 1589264790Sbapt if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; 1590264790Sbapt *++yystack.s_mark = (short) yystate; 1591264790Sbapt *++yystack.l_mark = yyval; 1592264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1593264790Sbapt *++yystack.p_mark = yyloc; 1594264790Sbapt#endif 1595264790Sbapt goto yyloop; 1596264790Sbapt#if YYBTYACC 1597264790Sbapt 1598264790Sbapt /* Reduction declares that this path is valid. Set yypath and do a full parse */ 1599264790Sbaptyyvalid: 1600264790Sbapt if (yypath) YYABORT; 1601264790Sbapt while (yyps->save) 1602264790Sbapt { 1603264790Sbapt YYParseState *save = yyps->save; 1604264790Sbapt yyps->save = save->save; 1605264790Sbapt save->save = yypath; 1606264790Sbapt yypath = save; 1607264790Sbapt } 1608264790Sbapt#if YYDEBUG 1609264790Sbapt if (yydebug) 1610264790Sbapt fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n", 1611264790Sbapt YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme)); 1612264790Sbapt#endif 1613264790Sbapt if (yyerrctx) 1614264790Sbapt { 1615264790Sbapt yyFreeState(yyerrctx); 1616264790Sbapt yyerrctx = NULL; 1617264790Sbapt } 1618264790Sbapt yylvp = yylvals + yypath->lexeme; 1619264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1620264790Sbapt yylpp = yylpsns + yypath->lexeme; 1621264790Sbapt#endif 1622264790Sbapt yylexp = yylexemes + yypath->lexeme; 1623264790Sbapt yychar = YYEMPTY; 1624264790Sbapt yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base); 1625272955Srodrigc memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(short)); 1626264790Sbapt yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base); 1627272955Srodrigc memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); 1628264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1629264790Sbapt yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base); 1630272955Srodrigc memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); 1631264790Sbapt#endif 1632264790Sbapt yystate = yypath->state; 1633264790Sbapt goto yyloop; 1634264790Sbapt#endif /* YYBTYACC */ 1635264790Sbapt 1636264790Sbaptyyoverflow: 1637264790Sbapt YYERROR_CALL("yacc stack overflow"); 1638264790Sbapt#if YYBTYACC 1639264790Sbapt goto yyabort_nomem; 1640264790Sbaptyyenomem: 1641264790Sbapt YYERROR_CALL("memory exhausted"); 1642264790Sbaptyyabort_nomem: 1643264790Sbapt#endif /* YYBTYACC */ 1644264790Sbapt yyresult = 2; 1645264790Sbapt goto yyreturn; 1646264790Sbapt 1647264790Sbaptyyabort: 1648264790Sbapt yyresult = 1; 1649264790Sbapt goto yyreturn; 1650264790Sbapt 1651264790Sbaptyyaccept: 1652264790Sbapt#if YYBTYACC 1653264790Sbapt if (yyps->save) goto yyvalid; 1654264790Sbapt#endif /* YYBTYACC */ 1655264790Sbapt yyresult = 0; 1656264790Sbapt 1657264790Sbaptyyreturn: 1658264790Sbapt#if defined(YYDESTRUCT_CALL) 1659264790Sbapt if (yychar != YYEOF && yychar != YYEMPTY) 1660264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1661264790Sbapt YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc); 1662264790Sbapt#else 1663264790Sbapt YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval); 1664264790Sbapt#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ 1665264790Sbapt 1666264790Sbapt { 1667264790Sbapt YYSTYPE *pv; 1668264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1669264790Sbapt YYLTYPE *pp; 1670264790Sbapt 1671264790Sbapt for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp) 1672264790Sbapt YYDESTRUCT_CALL("cleanup: discarding state", 1673264790Sbapt yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp); 1674264790Sbapt#else 1675264790Sbapt for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv) 1676264790Sbapt YYDESTRUCT_CALL("cleanup: discarding state", 1677264790Sbapt yystos[*(yystack.s_base + (pv - yystack.l_base))], pv); 1678264790Sbapt#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ 1679264790Sbapt } 1680264790Sbapt#endif /* defined(YYDESTRUCT_CALL) */ 1681264790Sbapt 1682264790Sbapt#if YYBTYACC 1683264790Sbapt if (yyerrctx) 1684264790Sbapt { 1685264790Sbapt yyFreeState(yyerrctx); 1686264790Sbapt yyerrctx = NULL; 1687264790Sbapt } 1688264790Sbapt while (yyps) 1689264790Sbapt { 1690264790Sbapt YYParseState *save = yyps; 1691264790Sbapt yyps = save->save; 1692264790Sbapt save->save = NULL; 1693264790Sbapt yyFreeState(save); 1694264790Sbapt } 1695264790Sbapt while (yypath) 1696264790Sbapt { 1697264790Sbapt YYParseState *save = yypath; 1698264790Sbapt yypath = save->save; 1699264790Sbapt save->save = NULL; 1700264790Sbapt yyFreeState(save); 1701264790Sbapt } 1702264790Sbapt#endif /* YYBTYACC */ 1703264790Sbapt yyfreestack(&yystack); 1704264790Sbapt return (yyresult); 1705264790Sbapt} 1706