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