1*0c8de5b0SBaptiste Daroussin /* original parser id follows */ 2*0c8de5b0SBaptiste Daroussin /* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */ 3*0c8de5b0SBaptiste Daroussin /* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */ 4*0c8de5b0SBaptiste Daroussin 5*0c8de5b0SBaptiste Daroussin #define YYBYACC 1 6*0c8de5b0SBaptiste Daroussin #define YYMAJOR 1 7*0c8de5b0SBaptiste Daroussin #define YYMINOR 9 8*0c8de5b0SBaptiste Daroussin #define YYCHECK "yyyymmdd" 9*0c8de5b0SBaptiste Daroussin 10*0c8de5b0SBaptiste Daroussin #define YYEMPTY (-1) 11*0c8de5b0SBaptiste Daroussin #define yyclearin (yychar = YYEMPTY) 12*0c8de5b0SBaptiste Daroussin #define yyerrok (yyerrflag = 0) 13*0c8de5b0SBaptiste Daroussin #define YYRECOVERING() (yyerrflag != 0) 14*0c8de5b0SBaptiste Daroussin #define YYENOMEM (-2) 15*0c8de5b0SBaptiste Daroussin #define YYEOF 0 16*0c8de5b0SBaptiste Daroussin 17*0c8de5b0SBaptiste Daroussin #ifndef yyparse 18*0c8de5b0SBaptiste Daroussin #define yyparse calc1_parse 19*0c8de5b0SBaptiste Daroussin #endif /* yyparse */ 20*0c8de5b0SBaptiste Daroussin 21*0c8de5b0SBaptiste Daroussin #ifndef yylex 22*0c8de5b0SBaptiste Daroussin #define yylex calc1_lex 23*0c8de5b0SBaptiste Daroussin #endif /* yylex */ 24*0c8de5b0SBaptiste Daroussin 25*0c8de5b0SBaptiste Daroussin #ifndef yyerror 26*0c8de5b0SBaptiste Daroussin #define yyerror calc1_error 27*0c8de5b0SBaptiste Daroussin #endif /* yyerror */ 28*0c8de5b0SBaptiste Daroussin 29*0c8de5b0SBaptiste Daroussin #ifndef yychar 30*0c8de5b0SBaptiste Daroussin #define yychar calc1_char 31*0c8de5b0SBaptiste Daroussin #endif /* yychar */ 32*0c8de5b0SBaptiste Daroussin 33*0c8de5b0SBaptiste Daroussin #ifndef yyval 34*0c8de5b0SBaptiste Daroussin #define yyval calc1_val 35*0c8de5b0SBaptiste Daroussin #endif /* yyval */ 36*0c8de5b0SBaptiste Daroussin 37*0c8de5b0SBaptiste Daroussin #ifndef yylval 38*0c8de5b0SBaptiste Daroussin #define yylval calc1_lval 39*0c8de5b0SBaptiste Daroussin #endif /* yylval */ 40*0c8de5b0SBaptiste Daroussin 41*0c8de5b0SBaptiste Daroussin #ifndef yydebug 42*0c8de5b0SBaptiste Daroussin #define yydebug calc1_debug 43*0c8de5b0SBaptiste Daroussin #endif /* yydebug */ 44*0c8de5b0SBaptiste Daroussin 45*0c8de5b0SBaptiste Daroussin #ifndef yynerrs 46*0c8de5b0SBaptiste Daroussin #define yynerrs calc1_nerrs 47*0c8de5b0SBaptiste Daroussin #endif /* yynerrs */ 48*0c8de5b0SBaptiste Daroussin 49*0c8de5b0SBaptiste Daroussin #ifndef yyerrflag 50*0c8de5b0SBaptiste Daroussin #define yyerrflag calc1_errflag 51*0c8de5b0SBaptiste Daroussin #endif /* yyerrflag */ 52*0c8de5b0SBaptiste Daroussin 53*0c8de5b0SBaptiste Daroussin #ifndef yylhs 54*0c8de5b0SBaptiste Daroussin #define yylhs calc1_lhs 55*0c8de5b0SBaptiste Daroussin #endif /* yylhs */ 56*0c8de5b0SBaptiste Daroussin 57*0c8de5b0SBaptiste Daroussin #ifndef yylen 58*0c8de5b0SBaptiste Daroussin #define yylen calc1_len 59*0c8de5b0SBaptiste Daroussin #endif /* yylen */ 60*0c8de5b0SBaptiste Daroussin 61*0c8de5b0SBaptiste Daroussin #ifndef yydefred 62*0c8de5b0SBaptiste Daroussin #define yydefred calc1_defred 63*0c8de5b0SBaptiste Daroussin #endif /* yydefred */ 64*0c8de5b0SBaptiste Daroussin 65*0c8de5b0SBaptiste Daroussin #ifndef yydgoto 66*0c8de5b0SBaptiste Daroussin #define yydgoto calc1_dgoto 67*0c8de5b0SBaptiste Daroussin #endif /* yydgoto */ 68*0c8de5b0SBaptiste Daroussin 69*0c8de5b0SBaptiste Daroussin #ifndef yysindex 70*0c8de5b0SBaptiste Daroussin #define yysindex calc1_sindex 71*0c8de5b0SBaptiste Daroussin #endif /* yysindex */ 72*0c8de5b0SBaptiste Daroussin 73*0c8de5b0SBaptiste Daroussin #ifndef yyrindex 74*0c8de5b0SBaptiste Daroussin #define yyrindex calc1_rindex 75*0c8de5b0SBaptiste Daroussin #endif /* yyrindex */ 76*0c8de5b0SBaptiste Daroussin 77*0c8de5b0SBaptiste Daroussin #ifndef yygindex 78*0c8de5b0SBaptiste Daroussin #define yygindex calc1_gindex 79*0c8de5b0SBaptiste Daroussin #endif /* yygindex */ 80*0c8de5b0SBaptiste Daroussin 81*0c8de5b0SBaptiste Daroussin #ifndef yytable 82*0c8de5b0SBaptiste Daroussin #define yytable calc1_table 83*0c8de5b0SBaptiste Daroussin #endif /* yytable */ 84*0c8de5b0SBaptiste Daroussin 85*0c8de5b0SBaptiste Daroussin #ifndef yycheck 86*0c8de5b0SBaptiste Daroussin #define yycheck calc1_check 87*0c8de5b0SBaptiste Daroussin #endif /* yycheck */ 88*0c8de5b0SBaptiste Daroussin 89*0c8de5b0SBaptiste Daroussin #ifndef yyname 90*0c8de5b0SBaptiste Daroussin #define yyname calc1_name 91*0c8de5b0SBaptiste Daroussin #endif /* yyname */ 92*0c8de5b0SBaptiste Daroussin 93*0c8de5b0SBaptiste Daroussin #ifndef yyrule 94*0c8de5b0SBaptiste Daroussin #define yyrule calc1_rule 95*0c8de5b0SBaptiste Daroussin #endif /* yyrule */ 96*0c8de5b0SBaptiste Daroussin #define YYPREFIX "calc1_" 97*0c8de5b0SBaptiste Daroussin 98*0c8de5b0SBaptiste Daroussin #define YYPURE 0 99*0c8de5b0SBaptiste Daroussin 100*0c8de5b0SBaptiste Daroussin #line 2 "calc1.y" 101*0c8de5b0SBaptiste Daroussin 102*0c8de5b0SBaptiste Daroussin /* http://dinosaur.compilertools.net/yacc/index.html */ 103*0c8de5b0SBaptiste Daroussin 104*0c8de5b0SBaptiste Daroussin #include <stdlib.h> 105*0c8de5b0SBaptiste Daroussin #include <stdio.h> 106*0c8de5b0SBaptiste Daroussin #include <ctype.h> 107*0c8de5b0SBaptiste Daroussin #include <math.h> 108*0c8de5b0SBaptiste Daroussin 109*0c8de5b0SBaptiste Daroussin typedef struct interval 110*0c8de5b0SBaptiste Daroussin { 111*0c8de5b0SBaptiste Daroussin double lo, hi; 112*0c8de5b0SBaptiste Daroussin } 113*0c8de5b0SBaptiste Daroussin INTERVAL; 114*0c8de5b0SBaptiste Daroussin 115*0c8de5b0SBaptiste Daroussin INTERVAL vmul(double, double, INTERVAL); 116*0c8de5b0SBaptiste Daroussin INTERVAL vdiv(double, double, INTERVAL); 117*0c8de5b0SBaptiste Daroussin 118*0c8de5b0SBaptiste Daroussin extern int yylex(void); 119*0c8de5b0SBaptiste Daroussin static void yyerror(const char *s); 120*0c8de5b0SBaptiste Daroussin 121*0c8de5b0SBaptiste Daroussin int dcheck(INTERVAL); 122*0c8de5b0SBaptiste Daroussin 123*0c8de5b0SBaptiste Daroussin double dreg[26]; 124*0c8de5b0SBaptiste Daroussin INTERVAL vreg[26]; 125*0c8de5b0SBaptiste Daroussin 126*0c8de5b0SBaptiste Daroussin #line 31 "calc1.y" 127*0c8de5b0SBaptiste Daroussin #ifdef YYSTYPE 128*0c8de5b0SBaptiste Daroussin #undef YYSTYPE_IS_DECLARED 129*0c8de5b0SBaptiste Daroussin #define YYSTYPE_IS_DECLARED 1 130*0c8de5b0SBaptiste Daroussin #endif 131*0c8de5b0SBaptiste Daroussin #ifndef YYSTYPE_IS_DECLARED 132*0c8de5b0SBaptiste Daroussin #define YYSTYPE_IS_DECLARED 1 133*0c8de5b0SBaptiste Daroussin typedef union 134*0c8de5b0SBaptiste Daroussin { 135*0c8de5b0SBaptiste Daroussin int ival; 136*0c8de5b0SBaptiste Daroussin double dval; 137*0c8de5b0SBaptiste Daroussin INTERVAL vval; 138*0c8de5b0SBaptiste Daroussin } YYSTYPE; 139*0c8de5b0SBaptiste Daroussin #endif /* !YYSTYPE_IS_DECLARED */ 140*0c8de5b0SBaptiste Daroussin #line 141 "calc1.tab.c" 141*0c8de5b0SBaptiste Daroussin 142*0c8de5b0SBaptiste Daroussin /* compatibility with bison */ 143*0c8de5b0SBaptiste Daroussin #ifdef YYPARSE_PARAM 144*0c8de5b0SBaptiste Daroussin /* compatibility with FreeBSD */ 145*0c8de5b0SBaptiste Daroussin # ifdef YYPARSE_PARAM_TYPE 146*0c8de5b0SBaptiste Daroussin # define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM) 147*0c8de5b0SBaptiste Daroussin # else 148*0c8de5b0SBaptiste Daroussin # define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM) 149*0c8de5b0SBaptiste Daroussin # endif 150*0c8de5b0SBaptiste Daroussin #else 151*0c8de5b0SBaptiste Daroussin # define YYPARSE_DECL() yyparse(void) 152*0c8de5b0SBaptiste Daroussin #endif 153*0c8de5b0SBaptiste Daroussin 154*0c8de5b0SBaptiste Daroussin /* Parameters sent to lex. */ 155*0c8de5b0SBaptiste Daroussin #ifdef YYLEX_PARAM 156*0c8de5b0SBaptiste Daroussin # define YYLEX_DECL() yylex(void *YYLEX_PARAM) 157*0c8de5b0SBaptiste Daroussin # define YYLEX yylex(YYLEX_PARAM) 158*0c8de5b0SBaptiste Daroussin #else 159*0c8de5b0SBaptiste Daroussin # define YYLEX_DECL() yylex(void) 160*0c8de5b0SBaptiste Daroussin # define YYLEX yylex() 161*0c8de5b0SBaptiste Daroussin #endif 162*0c8de5b0SBaptiste Daroussin 163*0c8de5b0SBaptiste Daroussin /* Parameters sent to yyerror. */ 164*0c8de5b0SBaptiste Daroussin #ifndef YYERROR_DECL 165*0c8de5b0SBaptiste Daroussin #define YYERROR_DECL() yyerror(const char *s) 166*0c8de5b0SBaptiste Daroussin #endif 167*0c8de5b0SBaptiste Daroussin #ifndef YYERROR_CALL 168*0c8de5b0SBaptiste Daroussin #define YYERROR_CALL(msg) yyerror(msg) 169*0c8de5b0SBaptiste Daroussin #endif 170*0c8de5b0SBaptiste Daroussin 171*0c8de5b0SBaptiste Daroussin extern int YYPARSE_DECL(); 172*0c8de5b0SBaptiste Daroussin 173*0c8de5b0SBaptiste Daroussin #define DREG 257 174*0c8de5b0SBaptiste Daroussin #define VREG 258 175*0c8de5b0SBaptiste Daroussin #define CONST 259 176*0c8de5b0SBaptiste Daroussin #define UMINUS 260 177*0c8de5b0SBaptiste Daroussin #define YYERRCODE 256 178*0c8de5b0SBaptiste Daroussin typedef short YYINT; 179*0c8de5b0SBaptiste Daroussin static const YYINT calc1_lhs[] = { -1, 180*0c8de5b0SBaptiste Daroussin 3, 3, 0, 0, 0, 0, 0, 1, 1, 1, 181*0c8de5b0SBaptiste Daroussin 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 182*0c8de5b0SBaptiste Daroussin 2, 2, 2, 2, 2, 2, 2, 2, 183*0c8de5b0SBaptiste Daroussin }; 184*0c8de5b0SBaptiste Daroussin static const YYINT calc1_len[] = { 2, 185*0c8de5b0SBaptiste Daroussin 0, 2, 2, 2, 4, 4, 2, 1, 1, 3, 186*0c8de5b0SBaptiste Daroussin 3, 3, 3, 2, 3, 1, 5, 1, 3, 3, 187*0c8de5b0SBaptiste Daroussin 3, 3, 3, 3, 3, 3, 2, 3, 188*0c8de5b0SBaptiste Daroussin }; 189*0c8de5b0SBaptiste Daroussin static const YYINT calc1_defred[] = { 0, 190*0c8de5b0SBaptiste Daroussin 0, 0, 0, 8, 0, 0, 0, 0, 0, 7, 191*0c8de5b0SBaptiste Daroussin 0, 0, 9, 18, 14, 27, 0, 0, 0, 0, 192*0c8de5b0SBaptiste Daroussin 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 193*0c8de5b0SBaptiste Daroussin 0, 0, 0, 15, 0, 28, 0, 0, 0, 0, 194*0c8de5b0SBaptiste Daroussin 12, 24, 13, 26, 0, 0, 23, 25, 14, 0, 195*0c8de5b0SBaptiste Daroussin 0, 0, 0, 0, 5, 6, 0, 0, 0, 12, 196*0c8de5b0SBaptiste Daroussin 13, 17, 197*0c8de5b0SBaptiste Daroussin }; 198*0c8de5b0SBaptiste Daroussin static const YYINT calc1_dgoto[] = { 7, 199*0c8de5b0SBaptiste Daroussin 32, 9, 0, 200*0c8de5b0SBaptiste Daroussin }; 201*0c8de5b0SBaptiste Daroussin static const YYINT calc1_sindex[] = { -40, 202*0c8de5b0SBaptiste Daroussin -8, -48, -47, 0, -37, -37, 0, 2, 17, 0, 203*0c8de5b0SBaptiste Daroussin -34, -37, 0, 0, 0, 0, -25, 90, -37, -37, 204*0c8de5b0SBaptiste Daroussin -37, -37, 0, -37, -37, -37, -37, 0, -34, -34, 205*0c8de5b0SBaptiste Daroussin 25, 125, 31, 0, -34, 0, -11, 37, -11, 37, 206*0c8de5b0SBaptiste Daroussin 0, 0, 0, 0, 37, 37, 0, 0, 0, 111, 207*0c8de5b0SBaptiste Daroussin -34, -34, -34, -34, 0, 0, 118, 69, 69, 0, 208*0c8de5b0SBaptiste Daroussin 0, 0, 209*0c8de5b0SBaptiste Daroussin }; 210*0c8de5b0SBaptiste Daroussin static const YYINT calc1_rindex[] = { 0, 211*0c8de5b0SBaptiste Daroussin 0, 38, 44, 0, 0, 0, 0, 0, 0, 0, 212*0c8de5b0SBaptiste Daroussin 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213*0c8de5b0SBaptiste Daroussin 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214*0c8de5b0SBaptiste Daroussin 0, -9, 0, 0, 0, 0, 51, -3, 56, 61, 215*0c8de5b0SBaptiste Daroussin 0, 0, 0, 0, 67, 72, 0, 0, 0, 0, 216*0c8de5b0SBaptiste Daroussin 0, 0, 0, 0, 0, 0, 0, 78, 83, 0, 217*0c8de5b0SBaptiste Daroussin 0, 0, 218*0c8de5b0SBaptiste Daroussin }; 219*0c8de5b0SBaptiste Daroussin static const YYINT calc1_gindex[] = { 0, 220*0c8de5b0SBaptiste Daroussin 4, 124, 0, 221*0c8de5b0SBaptiste Daroussin }; 222*0c8de5b0SBaptiste Daroussin #define YYTABLESIZE 225 223*0c8de5b0SBaptiste Daroussin static const YYINT calc1_table[] = { 6, 224*0c8de5b0SBaptiste Daroussin 16, 10, 6, 8, 5, 30, 20, 5, 15, 17, 225*0c8de5b0SBaptiste Daroussin 29, 23, 11, 12, 31, 34, 21, 19, 35, 20, 226*0c8de5b0SBaptiste Daroussin 0, 22, 37, 39, 41, 43, 28, 0, 0, 0, 227*0c8de5b0SBaptiste Daroussin 21, 16, 49, 50, 55, 22, 0, 20, 57, 20, 228*0c8de5b0SBaptiste Daroussin 56, 20, 0, 21, 19, 0, 20, 9, 22, 0, 229*0c8de5b0SBaptiste Daroussin 0, 0, 0, 18, 58, 59, 60, 61, 26, 24, 230*0c8de5b0SBaptiste Daroussin 10, 25, 0, 27, 0, 11, 53, 51, 0, 52, 231*0c8de5b0SBaptiste Daroussin 22, 54, 26, 24, 0, 25, 19, 27, 26, 9, 232*0c8de5b0SBaptiste Daroussin 9, 21, 9, 27, 9, 18, 18, 10, 18, 0, 233*0c8de5b0SBaptiste Daroussin 18, 10, 11, 10, 10, 10, 11, 0, 11, 11, 234*0c8de5b0SBaptiste Daroussin 11, 22, 0, 22, 0, 22, 0, 19, 0, 19, 235*0c8de5b0SBaptiste Daroussin 53, 19, 21, 0, 21, 54, 21, 0, 10, 0, 236*0c8de5b0SBaptiste Daroussin 10, 0, 10, 11, 0, 11, 0, 11, 16, 18, 237*0c8de5b0SBaptiste Daroussin 36, 26, 24, 0, 25, 33, 27, 0, 0, 0, 238*0c8de5b0SBaptiste Daroussin 0, 0, 38, 40, 42, 44, 0, 45, 46, 47, 239*0c8de5b0SBaptiste Daroussin 48, 34, 53, 51, 0, 52, 0, 54, 62, 53, 240*0c8de5b0SBaptiste Daroussin 51, 0, 52, 0, 54, 0, 21, 19, 0, 20, 241*0c8de5b0SBaptiste Daroussin 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 242*0c8de5b0SBaptiste Daroussin 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 243*0c8de5b0SBaptiste Daroussin 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244*0c8de5b0SBaptiste Daroussin 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 245*0c8de5b0SBaptiste Daroussin 0, 0, 0, 0, 0, 1, 2, 3, 4, 13, 246*0c8de5b0SBaptiste Daroussin 14, 4, 13, 0, 4, 247*0c8de5b0SBaptiste Daroussin }; 248*0c8de5b0SBaptiste Daroussin static const YYINT calc1_check[] = { 40, 249*0c8de5b0SBaptiste Daroussin 10, 10, 40, 0, 45, 40, 10, 45, 5, 6, 250*0c8de5b0SBaptiste Daroussin 45, 10, 61, 61, 11, 41, 42, 43, 44, 45, 251*0c8de5b0SBaptiste Daroussin -1, 47, 19, 20, 21, 22, 10, -1, -1, -1, 252*0c8de5b0SBaptiste Daroussin 42, 41, 29, 30, 10, 47, -1, 41, 35, 43, 253*0c8de5b0SBaptiste Daroussin 10, 45, -1, 42, 43, -1, 45, 10, 47, -1, 254*0c8de5b0SBaptiste Daroussin -1, -1, -1, 10, 51, 52, 53, 54, 42, 43, 255*0c8de5b0SBaptiste Daroussin 10, 45, -1, 47, -1, 10, 42, 43, -1, 45, 256*0c8de5b0SBaptiste Daroussin 10, 47, 42, 43, -1, 45, 10, 47, 42, 42, 257*0c8de5b0SBaptiste Daroussin 43, 10, 45, 47, 47, 42, 43, 10, 45, -1, 258*0c8de5b0SBaptiste Daroussin 47, 41, 10, 43, 44, 45, 41, -1, 43, 44, 259*0c8de5b0SBaptiste Daroussin 45, 41, -1, 43, -1, 45, -1, 41, -1, 43, 260*0c8de5b0SBaptiste Daroussin 42, 45, 41, -1, 43, 47, 45, -1, 41, -1, 261*0c8de5b0SBaptiste Daroussin 43, -1, 45, 41, -1, 43, -1, 45, 5, 6, 262*0c8de5b0SBaptiste Daroussin 41, 42, 43, -1, 45, 12, 47, -1, -1, -1, 263*0c8de5b0SBaptiste Daroussin -1, -1, 19, 20, 21, 22, -1, 24, 25, 26, 264*0c8de5b0SBaptiste Daroussin 27, 41, 42, 43, -1, 45, -1, 47, 41, 42, 265*0c8de5b0SBaptiste Daroussin 43, -1, 45, -1, 47, -1, 42, 43, -1, 45, 266*0c8de5b0SBaptiste Daroussin -1, 47, -1, -1, -1, -1, -1, -1, -1, -1, 267*0c8de5b0SBaptiste Daroussin -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 268*0c8de5b0SBaptiste Daroussin -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 269*0c8de5b0SBaptiste Daroussin -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 270*0c8de5b0SBaptiste Daroussin -1, -1, -1, -1, -1, 256, 257, 258, 259, 257, 271*0c8de5b0SBaptiste Daroussin 258, 259, 257, -1, 259, 272*0c8de5b0SBaptiste Daroussin }; 273*0c8de5b0SBaptiste Daroussin #define YYFINAL 7 274*0c8de5b0SBaptiste Daroussin #ifndef YYDEBUG 275*0c8de5b0SBaptiste Daroussin #define YYDEBUG 0 276*0c8de5b0SBaptiste Daroussin #endif 277*0c8de5b0SBaptiste Daroussin #define YYMAXTOKEN 260 278*0c8de5b0SBaptiste Daroussin #define YYUNDFTOKEN 266 279*0c8de5b0SBaptiste Daroussin #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) 280*0c8de5b0SBaptiste Daroussin #if YYDEBUG 281*0c8de5b0SBaptiste Daroussin static const char *const calc1_name[] = { 282*0c8de5b0SBaptiste Daroussin 283*0c8de5b0SBaptiste Daroussin "end-of-file",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, 284*0c8de5b0SBaptiste Daroussin 0,0,0,0,0,0,0,0,0,"'('","')'","'*'","'+'","','","'-'",0,"'/'",0,0,0,0,0,0,0,0,0, 285*0c8de5b0SBaptiste Daroussin 0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 286*0c8de5b0SBaptiste Daroussin 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 287*0c8de5b0SBaptiste Daroussin 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 288*0c8de5b0SBaptiste Daroussin 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 289*0c8de5b0SBaptiste Daroussin 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 290*0c8de5b0SBaptiste Daroussin 0,0,"DREG","VREG","CONST","UMINUS",0,0,0,0,0,"illegal-symbol", 291*0c8de5b0SBaptiste Daroussin }; 292*0c8de5b0SBaptiste Daroussin static const char *const calc1_rule[] = { 293*0c8de5b0SBaptiste Daroussin "$accept : line", 294*0c8de5b0SBaptiste Daroussin "lines :", 295*0c8de5b0SBaptiste Daroussin "lines : lines line", 296*0c8de5b0SBaptiste Daroussin "line : dexp '\\n'", 297*0c8de5b0SBaptiste Daroussin "line : vexp '\\n'", 298*0c8de5b0SBaptiste Daroussin "line : DREG '=' dexp '\\n'", 299*0c8de5b0SBaptiste Daroussin "line : VREG '=' vexp '\\n'", 300*0c8de5b0SBaptiste Daroussin "line : error '\\n'", 301*0c8de5b0SBaptiste Daroussin "dexp : CONST", 302*0c8de5b0SBaptiste Daroussin "dexp : DREG", 303*0c8de5b0SBaptiste Daroussin "dexp : dexp '+' dexp", 304*0c8de5b0SBaptiste Daroussin "dexp : dexp '-' dexp", 305*0c8de5b0SBaptiste Daroussin "dexp : dexp '*' dexp", 306*0c8de5b0SBaptiste Daroussin "dexp : dexp '/' dexp", 307*0c8de5b0SBaptiste Daroussin "dexp : '-' dexp", 308*0c8de5b0SBaptiste Daroussin "dexp : '(' dexp ')'", 309*0c8de5b0SBaptiste Daroussin "vexp : dexp", 310*0c8de5b0SBaptiste Daroussin "vexp : '(' dexp ',' dexp ')'", 311*0c8de5b0SBaptiste Daroussin "vexp : VREG", 312*0c8de5b0SBaptiste Daroussin "vexp : vexp '+' vexp", 313*0c8de5b0SBaptiste Daroussin "vexp : dexp '+' vexp", 314*0c8de5b0SBaptiste Daroussin "vexp : vexp '-' vexp", 315*0c8de5b0SBaptiste Daroussin "vexp : dexp '-' vexp", 316*0c8de5b0SBaptiste Daroussin "vexp : vexp '*' vexp", 317*0c8de5b0SBaptiste Daroussin "vexp : dexp '*' vexp", 318*0c8de5b0SBaptiste Daroussin "vexp : vexp '/' vexp", 319*0c8de5b0SBaptiste Daroussin "vexp : dexp '/' vexp", 320*0c8de5b0SBaptiste Daroussin "vexp : '-' vexp", 321*0c8de5b0SBaptiste Daroussin "vexp : '(' vexp ')'", 322*0c8de5b0SBaptiste Daroussin 323*0c8de5b0SBaptiste Daroussin }; 324*0c8de5b0SBaptiste Daroussin #endif 325*0c8de5b0SBaptiste Daroussin 326*0c8de5b0SBaptiste Daroussin int yydebug; 327*0c8de5b0SBaptiste Daroussin int yynerrs; 328*0c8de5b0SBaptiste Daroussin 329*0c8de5b0SBaptiste Daroussin int yyerrflag; 330*0c8de5b0SBaptiste Daroussin int yychar; 331*0c8de5b0SBaptiste Daroussin YYSTYPE yyval; 332*0c8de5b0SBaptiste Daroussin YYSTYPE yylval; 333*0c8de5b0SBaptiste Daroussin 334*0c8de5b0SBaptiste Daroussin /* define the initial stack-sizes */ 335*0c8de5b0SBaptiste Daroussin #ifdef YYSTACKSIZE 336*0c8de5b0SBaptiste Daroussin #undef YYMAXDEPTH 337*0c8de5b0SBaptiste Daroussin #define YYMAXDEPTH YYSTACKSIZE 338*0c8de5b0SBaptiste Daroussin #else 339*0c8de5b0SBaptiste Daroussin #ifdef YYMAXDEPTH 340*0c8de5b0SBaptiste Daroussin #define YYSTACKSIZE YYMAXDEPTH 341*0c8de5b0SBaptiste Daroussin #else 342*0c8de5b0SBaptiste Daroussin #define YYSTACKSIZE 10000 343*0c8de5b0SBaptiste Daroussin #define YYMAXDEPTH 10000 344*0c8de5b0SBaptiste Daroussin #endif 345*0c8de5b0SBaptiste Daroussin #endif 346*0c8de5b0SBaptiste Daroussin 347*0c8de5b0SBaptiste Daroussin #define YYINITSTACKSIZE 200 348*0c8de5b0SBaptiste Daroussin 349*0c8de5b0SBaptiste Daroussin typedef struct { 350*0c8de5b0SBaptiste Daroussin unsigned stacksize; 351*0c8de5b0SBaptiste Daroussin YYINT *s_base; 352*0c8de5b0SBaptiste Daroussin YYINT *s_mark; 353*0c8de5b0SBaptiste Daroussin YYINT *s_last; 354*0c8de5b0SBaptiste Daroussin YYSTYPE *l_base; 355*0c8de5b0SBaptiste Daroussin YYSTYPE *l_mark; 356*0c8de5b0SBaptiste Daroussin } YYSTACKDATA; 357*0c8de5b0SBaptiste Daroussin /* variables for the parser stack */ 358*0c8de5b0SBaptiste Daroussin static YYSTACKDATA yystack; 359*0c8de5b0SBaptiste Daroussin #line 176 "calc1.y" 360*0c8de5b0SBaptiste Daroussin /* beginning of subroutines section */ 361*0c8de5b0SBaptiste Daroussin 362*0c8de5b0SBaptiste Daroussin #define BSZ 50 /* buffer size for floating point numbers */ 363*0c8de5b0SBaptiste Daroussin 364*0c8de5b0SBaptiste Daroussin /* lexical analysis */ 365*0c8de5b0SBaptiste Daroussin 366*0c8de5b0SBaptiste Daroussin static void 367*0c8de5b0SBaptiste Daroussin yyerror(const char *s) 368*0c8de5b0SBaptiste Daroussin { 369*0c8de5b0SBaptiste Daroussin fprintf(stderr, "%s\n", s); 370*0c8de5b0SBaptiste Daroussin } 371*0c8de5b0SBaptiste Daroussin 372*0c8de5b0SBaptiste Daroussin int 373*0c8de5b0SBaptiste Daroussin yylex(void) 374*0c8de5b0SBaptiste Daroussin { 375*0c8de5b0SBaptiste Daroussin int c; 376*0c8de5b0SBaptiste Daroussin 377*0c8de5b0SBaptiste Daroussin while ((c = getchar()) == ' ') 378*0c8de5b0SBaptiste Daroussin { /* skip over blanks */ 379*0c8de5b0SBaptiste Daroussin } 380*0c8de5b0SBaptiste Daroussin 381*0c8de5b0SBaptiste Daroussin if (isupper(c)) 382*0c8de5b0SBaptiste Daroussin { 383*0c8de5b0SBaptiste Daroussin yylval.ival = c - 'A'; 384*0c8de5b0SBaptiste Daroussin return (VREG); 385*0c8de5b0SBaptiste Daroussin } 386*0c8de5b0SBaptiste Daroussin if (islower(c)) 387*0c8de5b0SBaptiste Daroussin { 388*0c8de5b0SBaptiste Daroussin yylval.ival = c - 'a'; 389*0c8de5b0SBaptiste Daroussin return (DREG); 390*0c8de5b0SBaptiste Daroussin } 391*0c8de5b0SBaptiste Daroussin 392*0c8de5b0SBaptiste Daroussin if (isdigit(c) || c == '.') 393*0c8de5b0SBaptiste Daroussin { 394*0c8de5b0SBaptiste Daroussin /* gobble up digits, points, exponents */ 395*0c8de5b0SBaptiste Daroussin char buf[BSZ + 1], *cp = buf; 396*0c8de5b0SBaptiste Daroussin int dot = 0, expr = 0; 397*0c8de5b0SBaptiste Daroussin 398*0c8de5b0SBaptiste Daroussin for (; (cp - buf) < BSZ; ++cp, c = getchar()) 399*0c8de5b0SBaptiste Daroussin { 400*0c8de5b0SBaptiste Daroussin 401*0c8de5b0SBaptiste Daroussin *cp = (char) c; 402*0c8de5b0SBaptiste Daroussin if (isdigit(c)) 403*0c8de5b0SBaptiste Daroussin continue; 404*0c8de5b0SBaptiste Daroussin if (c == '.') 405*0c8de5b0SBaptiste Daroussin { 406*0c8de5b0SBaptiste Daroussin if (dot++ || expr) 407*0c8de5b0SBaptiste Daroussin return ('.'); /* will cause syntax error */ 408*0c8de5b0SBaptiste Daroussin continue; 409*0c8de5b0SBaptiste Daroussin } 410*0c8de5b0SBaptiste Daroussin 411*0c8de5b0SBaptiste Daroussin if (c == 'e') 412*0c8de5b0SBaptiste Daroussin { 413*0c8de5b0SBaptiste Daroussin if (expr++) 414*0c8de5b0SBaptiste Daroussin return ('e'); /* will cause syntax error */ 415*0c8de5b0SBaptiste Daroussin continue; 416*0c8de5b0SBaptiste Daroussin } 417*0c8de5b0SBaptiste Daroussin 418*0c8de5b0SBaptiste Daroussin /* end of number */ 419*0c8de5b0SBaptiste Daroussin break; 420*0c8de5b0SBaptiste Daroussin } 421*0c8de5b0SBaptiste Daroussin *cp = '\0'; 422*0c8de5b0SBaptiste Daroussin 423*0c8de5b0SBaptiste Daroussin if ((cp - buf) >= BSZ) 424*0c8de5b0SBaptiste Daroussin printf("constant too long: truncated\n"); 425*0c8de5b0SBaptiste Daroussin else 426*0c8de5b0SBaptiste Daroussin ungetc(c, stdin); /* push back last char read */ 427*0c8de5b0SBaptiste Daroussin yylval.dval = atof(buf); 428*0c8de5b0SBaptiste Daroussin return (CONST); 429*0c8de5b0SBaptiste Daroussin } 430*0c8de5b0SBaptiste Daroussin return (c); 431*0c8de5b0SBaptiste Daroussin } 432*0c8de5b0SBaptiste Daroussin 433*0c8de5b0SBaptiste Daroussin static INTERVAL 434*0c8de5b0SBaptiste Daroussin hilo(double a, double b, double c, double d) 435*0c8de5b0SBaptiste Daroussin { 436*0c8de5b0SBaptiste Daroussin /* returns the smallest interval containing a, b, c, and d */ 437*0c8de5b0SBaptiste Daroussin /* used by *, / routines */ 438*0c8de5b0SBaptiste Daroussin INTERVAL v; 439*0c8de5b0SBaptiste Daroussin 440*0c8de5b0SBaptiste Daroussin if (a > b) 441*0c8de5b0SBaptiste Daroussin { 442*0c8de5b0SBaptiste Daroussin v.hi = a; 443*0c8de5b0SBaptiste Daroussin v.lo = b; 444*0c8de5b0SBaptiste Daroussin } 445*0c8de5b0SBaptiste Daroussin else 446*0c8de5b0SBaptiste Daroussin { 447*0c8de5b0SBaptiste Daroussin v.hi = b; 448*0c8de5b0SBaptiste Daroussin v.lo = a; 449*0c8de5b0SBaptiste Daroussin } 450*0c8de5b0SBaptiste Daroussin 451*0c8de5b0SBaptiste Daroussin if (c > d) 452*0c8de5b0SBaptiste Daroussin { 453*0c8de5b0SBaptiste Daroussin if (c > v.hi) 454*0c8de5b0SBaptiste Daroussin v.hi = c; 455*0c8de5b0SBaptiste Daroussin if (d < v.lo) 456*0c8de5b0SBaptiste Daroussin v.lo = d; 457*0c8de5b0SBaptiste Daroussin } 458*0c8de5b0SBaptiste Daroussin else 459*0c8de5b0SBaptiste Daroussin { 460*0c8de5b0SBaptiste Daroussin if (d > v.hi) 461*0c8de5b0SBaptiste Daroussin v.hi = d; 462*0c8de5b0SBaptiste Daroussin if (c < v.lo) 463*0c8de5b0SBaptiste Daroussin v.lo = c; 464*0c8de5b0SBaptiste Daroussin } 465*0c8de5b0SBaptiste Daroussin return (v); 466*0c8de5b0SBaptiste Daroussin } 467*0c8de5b0SBaptiste Daroussin 468*0c8de5b0SBaptiste Daroussin INTERVAL 469*0c8de5b0SBaptiste Daroussin vmul(double a, double b, INTERVAL v) 470*0c8de5b0SBaptiste Daroussin { 471*0c8de5b0SBaptiste Daroussin return (hilo(a * v.hi, a * v.lo, b * v.hi, b * v.lo)); 472*0c8de5b0SBaptiste Daroussin } 473*0c8de5b0SBaptiste Daroussin 474*0c8de5b0SBaptiste Daroussin int 475*0c8de5b0SBaptiste Daroussin dcheck(INTERVAL v) 476*0c8de5b0SBaptiste Daroussin { 477*0c8de5b0SBaptiste Daroussin if (v.hi >= 0. && v.lo <= 0.) 478*0c8de5b0SBaptiste Daroussin { 479*0c8de5b0SBaptiste Daroussin printf("divisor interval contains 0.\n"); 480*0c8de5b0SBaptiste Daroussin return (1); 481*0c8de5b0SBaptiste Daroussin } 482*0c8de5b0SBaptiste Daroussin return (0); 483*0c8de5b0SBaptiste Daroussin } 484*0c8de5b0SBaptiste Daroussin 485*0c8de5b0SBaptiste Daroussin INTERVAL 486*0c8de5b0SBaptiste Daroussin vdiv(double a, double b, INTERVAL v) 487*0c8de5b0SBaptiste Daroussin { 488*0c8de5b0SBaptiste Daroussin return (hilo(a / v.hi, a / v.lo, b / v.hi, b / v.lo)); 489*0c8de5b0SBaptiste Daroussin } 490*0c8de5b0SBaptiste Daroussin #line 491 "calc1.tab.c" 491*0c8de5b0SBaptiste Daroussin 492*0c8de5b0SBaptiste Daroussin #if YYDEBUG 493*0c8de5b0SBaptiste Daroussin #include <stdio.h> /* needed for printf */ 494*0c8de5b0SBaptiste Daroussin #endif 495*0c8de5b0SBaptiste Daroussin 496*0c8de5b0SBaptiste Daroussin #include <stdlib.h> /* needed for malloc, etc */ 497*0c8de5b0SBaptiste Daroussin #include <string.h> /* needed for memset */ 498*0c8de5b0SBaptiste Daroussin 499*0c8de5b0SBaptiste Daroussin /* allocate initial stack or double stack size, up to YYMAXDEPTH */ 500*0c8de5b0SBaptiste Daroussin static int yygrowstack(YYSTACKDATA *data) 501*0c8de5b0SBaptiste Daroussin { 502*0c8de5b0SBaptiste Daroussin int i; 503*0c8de5b0SBaptiste Daroussin unsigned newsize; 504*0c8de5b0SBaptiste Daroussin YYINT *newss; 505*0c8de5b0SBaptiste Daroussin YYSTYPE *newvs; 506*0c8de5b0SBaptiste Daroussin 507*0c8de5b0SBaptiste Daroussin if ((newsize = data->stacksize) == 0) 508*0c8de5b0SBaptiste Daroussin newsize = YYINITSTACKSIZE; 509*0c8de5b0SBaptiste Daroussin else if (newsize >= YYMAXDEPTH) 510*0c8de5b0SBaptiste Daroussin return YYENOMEM; 511*0c8de5b0SBaptiste Daroussin else if ((newsize *= 2) > YYMAXDEPTH) 512*0c8de5b0SBaptiste Daroussin newsize = YYMAXDEPTH; 513*0c8de5b0SBaptiste Daroussin 514*0c8de5b0SBaptiste Daroussin i = (int) (data->s_mark - data->s_base); 515*0c8de5b0SBaptiste Daroussin newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss)); 516*0c8de5b0SBaptiste Daroussin if (newss == 0) 517*0c8de5b0SBaptiste Daroussin return YYENOMEM; 518*0c8de5b0SBaptiste Daroussin 519*0c8de5b0SBaptiste Daroussin data->s_base = newss; 520*0c8de5b0SBaptiste Daroussin data->s_mark = newss + i; 521*0c8de5b0SBaptiste Daroussin 522*0c8de5b0SBaptiste Daroussin newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs)); 523*0c8de5b0SBaptiste Daroussin if (newvs == 0) 524*0c8de5b0SBaptiste Daroussin return YYENOMEM; 525*0c8de5b0SBaptiste Daroussin 526*0c8de5b0SBaptiste Daroussin data->l_base = newvs; 527*0c8de5b0SBaptiste Daroussin data->l_mark = newvs + i; 528*0c8de5b0SBaptiste Daroussin 529*0c8de5b0SBaptiste Daroussin data->stacksize = newsize; 530*0c8de5b0SBaptiste Daroussin data->s_last = data->s_base + newsize - 1; 531*0c8de5b0SBaptiste Daroussin return 0; 532*0c8de5b0SBaptiste Daroussin } 533*0c8de5b0SBaptiste Daroussin 534*0c8de5b0SBaptiste Daroussin #if YYPURE || defined(YY_NO_LEAKS) 535*0c8de5b0SBaptiste Daroussin static void yyfreestack(YYSTACKDATA *data) 536*0c8de5b0SBaptiste Daroussin { 537*0c8de5b0SBaptiste Daroussin free(data->s_base); 538*0c8de5b0SBaptiste Daroussin free(data->l_base); 539*0c8de5b0SBaptiste Daroussin memset(data, 0, sizeof(*data)); 540*0c8de5b0SBaptiste Daroussin } 541*0c8de5b0SBaptiste Daroussin #else 542*0c8de5b0SBaptiste Daroussin #define yyfreestack(data) /* nothing */ 543*0c8de5b0SBaptiste Daroussin #endif 544*0c8de5b0SBaptiste Daroussin 545*0c8de5b0SBaptiste Daroussin #define YYABORT goto yyabort 546*0c8de5b0SBaptiste Daroussin #define YYREJECT goto yyabort 547*0c8de5b0SBaptiste Daroussin #define YYACCEPT goto yyaccept 548*0c8de5b0SBaptiste Daroussin #define YYERROR goto yyerrlab 549*0c8de5b0SBaptiste Daroussin 550*0c8de5b0SBaptiste Daroussin int 551*0c8de5b0SBaptiste Daroussin YYPARSE_DECL() 552*0c8de5b0SBaptiste Daroussin { 553*0c8de5b0SBaptiste Daroussin int yym, yyn, yystate; 554*0c8de5b0SBaptiste Daroussin #if YYDEBUG 555*0c8de5b0SBaptiste Daroussin const char *yys; 556*0c8de5b0SBaptiste Daroussin 557*0c8de5b0SBaptiste Daroussin if ((yys = getenv("YYDEBUG")) != 0) 558*0c8de5b0SBaptiste Daroussin { 559*0c8de5b0SBaptiste Daroussin yyn = *yys; 560*0c8de5b0SBaptiste Daroussin if (yyn >= '0' && yyn <= '9') 561*0c8de5b0SBaptiste Daroussin yydebug = yyn - '0'; 562*0c8de5b0SBaptiste Daroussin } 563*0c8de5b0SBaptiste Daroussin #endif 564*0c8de5b0SBaptiste Daroussin 565*0c8de5b0SBaptiste Daroussin yynerrs = 0; 566*0c8de5b0SBaptiste Daroussin yyerrflag = 0; 567*0c8de5b0SBaptiste Daroussin yychar = YYEMPTY; 568*0c8de5b0SBaptiste Daroussin yystate = 0; 569*0c8de5b0SBaptiste Daroussin 570*0c8de5b0SBaptiste Daroussin #if YYPURE 571*0c8de5b0SBaptiste Daroussin memset(&yystack, 0, sizeof(yystack)); 572*0c8de5b0SBaptiste Daroussin #endif 573*0c8de5b0SBaptiste Daroussin 574*0c8de5b0SBaptiste Daroussin if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; 575*0c8de5b0SBaptiste Daroussin yystack.s_mark = yystack.s_base; 576*0c8de5b0SBaptiste Daroussin yystack.l_mark = yystack.l_base; 577*0c8de5b0SBaptiste Daroussin yystate = 0; 578*0c8de5b0SBaptiste Daroussin *yystack.s_mark = 0; 579*0c8de5b0SBaptiste Daroussin 580*0c8de5b0SBaptiste Daroussin yyloop: 581*0c8de5b0SBaptiste Daroussin if ((yyn = yydefred[yystate]) != 0) goto yyreduce; 582*0c8de5b0SBaptiste Daroussin if (yychar < 0) 583*0c8de5b0SBaptiste Daroussin { 584*0c8de5b0SBaptiste Daroussin if ((yychar = YYLEX) < 0) yychar = YYEOF; 585*0c8de5b0SBaptiste Daroussin #if YYDEBUG 586*0c8de5b0SBaptiste Daroussin if (yydebug) 587*0c8de5b0SBaptiste Daroussin { 588*0c8de5b0SBaptiste Daroussin yys = yyname[YYTRANSLATE(yychar)]; 589*0c8de5b0SBaptiste Daroussin printf("%sdebug: state %d, reading %d (%s)\n", 590*0c8de5b0SBaptiste Daroussin YYPREFIX, yystate, yychar, yys); 591*0c8de5b0SBaptiste Daroussin } 592*0c8de5b0SBaptiste Daroussin #endif 593*0c8de5b0SBaptiste Daroussin } 594*0c8de5b0SBaptiste Daroussin if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 && 595*0c8de5b0SBaptiste Daroussin yyn <= YYTABLESIZE && yycheck[yyn] == yychar) 596*0c8de5b0SBaptiste Daroussin { 597*0c8de5b0SBaptiste Daroussin #if YYDEBUG 598*0c8de5b0SBaptiste Daroussin if (yydebug) 599*0c8de5b0SBaptiste Daroussin printf("%sdebug: state %d, shifting to state %d\n", 600*0c8de5b0SBaptiste Daroussin YYPREFIX, yystate, yytable[yyn]); 601*0c8de5b0SBaptiste Daroussin #endif 602*0c8de5b0SBaptiste Daroussin if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) 603*0c8de5b0SBaptiste Daroussin { 604*0c8de5b0SBaptiste Daroussin goto yyoverflow; 605*0c8de5b0SBaptiste Daroussin } 606*0c8de5b0SBaptiste Daroussin yystate = yytable[yyn]; 607*0c8de5b0SBaptiste Daroussin *++yystack.s_mark = yytable[yyn]; 608*0c8de5b0SBaptiste Daroussin *++yystack.l_mark = yylval; 609*0c8de5b0SBaptiste Daroussin yychar = YYEMPTY; 610*0c8de5b0SBaptiste Daroussin if (yyerrflag > 0) --yyerrflag; 611*0c8de5b0SBaptiste Daroussin goto yyloop; 612*0c8de5b0SBaptiste Daroussin } 613*0c8de5b0SBaptiste Daroussin if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 && 614*0c8de5b0SBaptiste Daroussin yyn <= YYTABLESIZE && yycheck[yyn] == yychar) 615*0c8de5b0SBaptiste Daroussin { 616*0c8de5b0SBaptiste Daroussin yyn = yytable[yyn]; 617*0c8de5b0SBaptiste Daroussin goto yyreduce; 618*0c8de5b0SBaptiste Daroussin } 619*0c8de5b0SBaptiste Daroussin if (yyerrflag) goto yyinrecovery; 620*0c8de5b0SBaptiste Daroussin 621*0c8de5b0SBaptiste Daroussin YYERROR_CALL("syntax error"); 622*0c8de5b0SBaptiste Daroussin 623*0c8de5b0SBaptiste Daroussin goto yyerrlab; 624*0c8de5b0SBaptiste Daroussin 625*0c8de5b0SBaptiste Daroussin yyerrlab: 626*0c8de5b0SBaptiste Daroussin ++yynerrs; 627*0c8de5b0SBaptiste Daroussin 628*0c8de5b0SBaptiste Daroussin yyinrecovery: 629*0c8de5b0SBaptiste Daroussin if (yyerrflag < 3) 630*0c8de5b0SBaptiste Daroussin { 631*0c8de5b0SBaptiste Daroussin yyerrflag = 3; 632*0c8de5b0SBaptiste Daroussin for (;;) 633*0c8de5b0SBaptiste Daroussin { 634*0c8de5b0SBaptiste Daroussin if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 && 635*0c8de5b0SBaptiste Daroussin yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE) 636*0c8de5b0SBaptiste Daroussin { 637*0c8de5b0SBaptiste Daroussin #if YYDEBUG 638*0c8de5b0SBaptiste Daroussin if (yydebug) 639*0c8de5b0SBaptiste Daroussin printf("%sdebug: state %d, error recovery shifting\ 640*0c8de5b0SBaptiste Daroussin to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]); 641*0c8de5b0SBaptiste Daroussin #endif 642*0c8de5b0SBaptiste Daroussin if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) 643*0c8de5b0SBaptiste Daroussin { 644*0c8de5b0SBaptiste Daroussin goto yyoverflow; 645*0c8de5b0SBaptiste Daroussin } 646*0c8de5b0SBaptiste Daroussin yystate = yytable[yyn]; 647*0c8de5b0SBaptiste Daroussin *++yystack.s_mark = yytable[yyn]; 648*0c8de5b0SBaptiste Daroussin *++yystack.l_mark = yylval; 649*0c8de5b0SBaptiste Daroussin goto yyloop; 650*0c8de5b0SBaptiste Daroussin } 651*0c8de5b0SBaptiste Daroussin else 652*0c8de5b0SBaptiste Daroussin { 653*0c8de5b0SBaptiste Daroussin #if YYDEBUG 654*0c8de5b0SBaptiste Daroussin if (yydebug) 655*0c8de5b0SBaptiste Daroussin printf("%sdebug: error recovery discarding state %d\n", 656*0c8de5b0SBaptiste Daroussin YYPREFIX, *yystack.s_mark); 657*0c8de5b0SBaptiste Daroussin #endif 658*0c8de5b0SBaptiste Daroussin if (yystack.s_mark <= yystack.s_base) goto yyabort; 659*0c8de5b0SBaptiste Daroussin --yystack.s_mark; 660*0c8de5b0SBaptiste Daroussin --yystack.l_mark; 661*0c8de5b0SBaptiste Daroussin } 662*0c8de5b0SBaptiste Daroussin } 663*0c8de5b0SBaptiste Daroussin } 664*0c8de5b0SBaptiste Daroussin else 665*0c8de5b0SBaptiste Daroussin { 666*0c8de5b0SBaptiste Daroussin if (yychar == YYEOF) goto yyabort; 667*0c8de5b0SBaptiste Daroussin #if YYDEBUG 668*0c8de5b0SBaptiste Daroussin if (yydebug) 669*0c8de5b0SBaptiste Daroussin { 670*0c8de5b0SBaptiste Daroussin yys = yyname[YYTRANSLATE(yychar)]; 671*0c8de5b0SBaptiste Daroussin printf("%sdebug: state %d, error recovery discards token %d (%s)\n", 672*0c8de5b0SBaptiste Daroussin YYPREFIX, yystate, yychar, yys); 673*0c8de5b0SBaptiste Daroussin } 674*0c8de5b0SBaptiste Daroussin #endif 675*0c8de5b0SBaptiste Daroussin yychar = YYEMPTY; 676*0c8de5b0SBaptiste Daroussin goto yyloop; 677*0c8de5b0SBaptiste Daroussin } 678*0c8de5b0SBaptiste Daroussin 679*0c8de5b0SBaptiste Daroussin yyreduce: 680*0c8de5b0SBaptiste Daroussin #if YYDEBUG 681*0c8de5b0SBaptiste Daroussin if (yydebug) 682*0c8de5b0SBaptiste Daroussin printf("%sdebug: state %d, reducing by rule %d (%s)\n", 683*0c8de5b0SBaptiste Daroussin YYPREFIX, yystate, yyn, yyrule[yyn]); 684*0c8de5b0SBaptiste Daroussin #endif 685*0c8de5b0SBaptiste Daroussin yym = yylen[yyn]; 686*0c8de5b0SBaptiste Daroussin if (yym) 687*0c8de5b0SBaptiste Daroussin yyval = yystack.l_mark[1-yym]; 688*0c8de5b0SBaptiste Daroussin else 689*0c8de5b0SBaptiste Daroussin memset(&yyval, 0, sizeof yyval); 690*0c8de5b0SBaptiste Daroussin switch (yyn) 691*0c8de5b0SBaptiste Daroussin { 692*0c8de5b0SBaptiste Daroussin case 3: 693*0c8de5b0SBaptiste Daroussin #line 57 "calc1.y" 694*0c8de5b0SBaptiste Daroussin { 695*0c8de5b0SBaptiste Daroussin (void) printf("%15.8f\n", yystack.l_mark[-1].dval); 696*0c8de5b0SBaptiste Daroussin } 697*0c8de5b0SBaptiste Daroussin break; 698*0c8de5b0SBaptiste Daroussin case 4: 699*0c8de5b0SBaptiste Daroussin #line 61 "calc1.y" 700*0c8de5b0SBaptiste Daroussin { 701*0c8de5b0SBaptiste Daroussin (void) printf("(%15.8f, %15.8f)\n", yystack.l_mark[-1].vval.lo, yystack.l_mark[-1].vval.hi); 702*0c8de5b0SBaptiste Daroussin } 703*0c8de5b0SBaptiste Daroussin break; 704*0c8de5b0SBaptiste Daroussin case 5: 705*0c8de5b0SBaptiste Daroussin #line 65 "calc1.y" 706*0c8de5b0SBaptiste Daroussin { 707*0c8de5b0SBaptiste Daroussin dreg[yystack.l_mark[-3].ival] = yystack.l_mark[-1].dval; 708*0c8de5b0SBaptiste Daroussin } 709*0c8de5b0SBaptiste Daroussin break; 710*0c8de5b0SBaptiste Daroussin case 6: 711*0c8de5b0SBaptiste Daroussin #line 69 "calc1.y" 712*0c8de5b0SBaptiste Daroussin { 713*0c8de5b0SBaptiste Daroussin vreg[yystack.l_mark[-3].ival] = yystack.l_mark[-1].vval; 714*0c8de5b0SBaptiste Daroussin } 715*0c8de5b0SBaptiste Daroussin break; 716*0c8de5b0SBaptiste Daroussin case 7: 717*0c8de5b0SBaptiste Daroussin #line 73 "calc1.y" 718*0c8de5b0SBaptiste Daroussin { 719*0c8de5b0SBaptiste Daroussin yyerrok; 720*0c8de5b0SBaptiste Daroussin } 721*0c8de5b0SBaptiste Daroussin break; 722*0c8de5b0SBaptiste Daroussin case 9: 723*0c8de5b0SBaptiste Daroussin #line 80 "calc1.y" 724*0c8de5b0SBaptiste Daroussin { 725*0c8de5b0SBaptiste Daroussin yyval.dval = dreg[yystack.l_mark[0].ival]; 726*0c8de5b0SBaptiste Daroussin } 727*0c8de5b0SBaptiste Daroussin break; 728*0c8de5b0SBaptiste Daroussin case 10: 729*0c8de5b0SBaptiste Daroussin #line 84 "calc1.y" 730*0c8de5b0SBaptiste Daroussin { 731*0c8de5b0SBaptiste Daroussin yyval.dval = yystack.l_mark[-2].dval + yystack.l_mark[0].dval; 732*0c8de5b0SBaptiste Daroussin } 733*0c8de5b0SBaptiste Daroussin break; 734*0c8de5b0SBaptiste Daroussin case 11: 735*0c8de5b0SBaptiste Daroussin #line 88 "calc1.y" 736*0c8de5b0SBaptiste Daroussin { 737*0c8de5b0SBaptiste Daroussin yyval.dval = yystack.l_mark[-2].dval - yystack.l_mark[0].dval; 738*0c8de5b0SBaptiste Daroussin } 739*0c8de5b0SBaptiste Daroussin break; 740*0c8de5b0SBaptiste Daroussin case 12: 741*0c8de5b0SBaptiste Daroussin #line 92 "calc1.y" 742*0c8de5b0SBaptiste Daroussin { 743*0c8de5b0SBaptiste Daroussin yyval.dval = yystack.l_mark[-2].dval * yystack.l_mark[0].dval; 744*0c8de5b0SBaptiste Daroussin } 745*0c8de5b0SBaptiste Daroussin break; 746*0c8de5b0SBaptiste Daroussin case 13: 747*0c8de5b0SBaptiste Daroussin #line 96 "calc1.y" 748*0c8de5b0SBaptiste Daroussin { 749*0c8de5b0SBaptiste Daroussin yyval.dval = yystack.l_mark[-2].dval / yystack.l_mark[0].dval; 750*0c8de5b0SBaptiste Daroussin } 751*0c8de5b0SBaptiste Daroussin break; 752*0c8de5b0SBaptiste Daroussin case 14: 753*0c8de5b0SBaptiste Daroussin #line 100 "calc1.y" 754*0c8de5b0SBaptiste Daroussin { 755*0c8de5b0SBaptiste Daroussin yyval.dval = -yystack.l_mark[0].dval; 756*0c8de5b0SBaptiste Daroussin } 757*0c8de5b0SBaptiste Daroussin break; 758*0c8de5b0SBaptiste Daroussin case 15: 759*0c8de5b0SBaptiste Daroussin #line 104 "calc1.y" 760*0c8de5b0SBaptiste Daroussin { 761*0c8de5b0SBaptiste Daroussin yyval.dval = yystack.l_mark[-1].dval; 762*0c8de5b0SBaptiste Daroussin } 763*0c8de5b0SBaptiste Daroussin break; 764*0c8de5b0SBaptiste Daroussin case 16: 765*0c8de5b0SBaptiste Daroussin #line 110 "calc1.y" 766*0c8de5b0SBaptiste Daroussin { 767*0c8de5b0SBaptiste Daroussin yyval.vval.hi = yyval.vval.lo = yystack.l_mark[0].dval; 768*0c8de5b0SBaptiste Daroussin } 769*0c8de5b0SBaptiste Daroussin break; 770*0c8de5b0SBaptiste Daroussin case 17: 771*0c8de5b0SBaptiste Daroussin #line 114 "calc1.y" 772*0c8de5b0SBaptiste Daroussin { 773*0c8de5b0SBaptiste Daroussin yyval.vval.lo = yystack.l_mark[-3].dval; 774*0c8de5b0SBaptiste Daroussin yyval.vval.hi = yystack.l_mark[-1].dval; 775*0c8de5b0SBaptiste Daroussin if ( yyval.vval.lo > yyval.vval.hi ) 776*0c8de5b0SBaptiste Daroussin { 777*0c8de5b0SBaptiste Daroussin (void) printf("interval out of order\n"); 778*0c8de5b0SBaptiste Daroussin YYERROR; 779*0c8de5b0SBaptiste Daroussin } 780*0c8de5b0SBaptiste Daroussin } 781*0c8de5b0SBaptiste Daroussin break; 782*0c8de5b0SBaptiste Daroussin case 18: 783*0c8de5b0SBaptiste Daroussin #line 124 "calc1.y" 784*0c8de5b0SBaptiste Daroussin { 785*0c8de5b0SBaptiste Daroussin yyval.vval = vreg[yystack.l_mark[0].ival]; 786*0c8de5b0SBaptiste Daroussin } 787*0c8de5b0SBaptiste Daroussin break; 788*0c8de5b0SBaptiste Daroussin case 19: 789*0c8de5b0SBaptiste Daroussin #line 128 "calc1.y" 790*0c8de5b0SBaptiste Daroussin { 791*0c8de5b0SBaptiste Daroussin yyval.vval.hi = yystack.l_mark[-2].vval.hi + yystack.l_mark[0].vval.hi; 792*0c8de5b0SBaptiste Daroussin yyval.vval.lo = yystack.l_mark[-2].vval.lo + yystack.l_mark[0].vval.lo; 793*0c8de5b0SBaptiste Daroussin } 794*0c8de5b0SBaptiste Daroussin break; 795*0c8de5b0SBaptiste Daroussin case 20: 796*0c8de5b0SBaptiste Daroussin #line 133 "calc1.y" 797*0c8de5b0SBaptiste Daroussin { 798*0c8de5b0SBaptiste Daroussin yyval.vval.hi = yystack.l_mark[-2].dval + yystack.l_mark[0].vval.hi; 799*0c8de5b0SBaptiste Daroussin yyval.vval.lo = yystack.l_mark[-2].dval + yystack.l_mark[0].vval.lo; 800*0c8de5b0SBaptiste Daroussin } 801*0c8de5b0SBaptiste Daroussin break; 802*0c8de5b0SBaptiste Daroussin case 21: 803*0c8de5b0SBaptiste Daroussin #line 138 "calc1.y" 804*0c8de5b0SBaptiste Daroussin { 805*0c8de5b0SBaptiste Daroussin yyval.vval.hi = yystack.l_mark[-2].vval.hi - yystack.l_mark[0].vval.lo; 806*0c8de5b0SBaptiste Daroussin yyval.vval.lo = yystack.l_mark[-2].vval.lo - yystack.l_mark[0].vval.hi; 807*0c8de5b0SBaptiste Daroussin } 808*0c8de5b0SBaptiste Daroussin break; 809*0c8de5b0SBaptiste Daroussin case 22: 810*0c8de5b0SBaptiste Daroussin #line 143 "calc1.y" 811*0c8de5b0SBaptiste Daroussin { 812*0c8de5b0SBaptiste Daroussin yyval.vval.hi = yystack.l_mark[-2].dval - yystack.l_mark[0].vval.lo; 813*0c8de5b0SBaptiste Daroussin yyval.vval.lo = yystack.l_mark[-2].dval - yystack.l_mark[0].vval.hi; 814*0c8de5b0SBaptiste Daroussin } 815*0c8de5b0SBaptiste Daroussin break; 816*0c8de5b0SBaptiste Daroussin case 23: 817*0c8de5b0SBaptiste Daroussin #line 148 "calc1.y" 818*0c8de5b0SBaptiste Daroussin { 819*0c8de5b0SBaptiste Daroussin yyval.vval = vmul( yystack.l_mark[-2].vval.lo, yystack.l_mark[-2].vval.hi, yystack.l_mark[0].vval ); 820*0c8de5b0SBaptiste Daroussin } 821*0c8de5b0SBaptiste Daroussin break; 822*0c8de5b0SBaptiste Daroussin case 24: 823*0c8de5b0SBaptiste Daroussin #line 152 "calc1.y" 824*0c8de5b0SBaptiste Daroussin { 825*0c8de5b0SBaptiste Daroussin yyval.vval = vmul (yystack.l_mark[-2].dval, yystack.l_mark[-2].dval, yystack.l_mark[0].vval ); 826*0c8de5b0SBaptiste Daroussin } 827*0c8de5b0SBaptiste Daroussin break; 828*0c8de5b0SBaptiste Daroussin case 25: 829*0c8de5b0SBaptiste Daroussin #line 156 "calc1.y" 830*0c8de5b0SBaptiste Daroussin { 831*0c8de5b0SBaptiste Daroussin if (dcheck(yystack.l_mark[0].vval)) YYERROR; 832*0c8de5b0SBaptiste Daroussin yyval.vval = vdiv ( yystack.l_mark[-2].vval.lo, yystack.l_mark[-2].vval.hi, yystack.l_mark[0].vval ); 833*0c8de5b0SBaptiste Daroussin } 834*0c8de5b0SBaptiste Daroussin break; 835*0c8de5b0SBaptiste Daroussin case 26: 836*0c8de5b0SBaptiste Daroussin #line 161 "calc1.y" 837*0c8de5b0SBaptiste Daroussin { 838*0c8de5b0SBaptiste Daroussin if (dcheck ( yystack.l_mark[0].vval )) YYERROR; 839*0c8de5b0SBaptiste Daroussin yyval.vval = vdiv (yystack.l_mark[-2].dval, yystack.l_mark[-2].dval, yystack.l_mark[0].vval ); 840*0c8de5b0SBaptiste Daroussin } 841*0c8de5b0SBaptiste Daroussin break; 842*0c8de5b0SBaptiste Daroussin case 27: 843*0c8de5b0SBaptiste Daroussin #line 166 "calc1.y" 844*0c8de5b0SBaptiste Daroussin { 845*0c8de5b0SBaptiste Daroussin yyval.vval.hi = -yystack.l_mark[0].vval.lo; 846*0c8de5b0SBaptiste Daroussin yyval.vval.lo = -yystack.l_mark[0].vval.hi; 847*0c8de5b0SBaptiste Daroussin } 848*0c8de5b0SBaptiste Daroussin break; 849*0c8de5b0SBaptiste Daroussin case 28: 850*0c8de5b0SBaptiste Daroussin #line 171 "calc1.y" 851*0c8de5b0SBaptiste Daroussin { 852*0c8de5b0SBaptiste Daroussin yyval.vval = yystack.l_mark[-1].vval; 853*0c8de5b0SBaptiste Daroussin } 854*0c8de5b0SBaptiste Daroussin break; 855*0c8de5b0SBaptiste Daroussin #line 856 "calc1.tab.c" 856*0c8de5b0SBaptiste Daroussin } 857*0c8de5b0SBaptiste Daroussin yystack.s_mark -= yym; 858*0c8de5b0SBaptiste Daroussin yystate = *yystack.s_mark; 859*0c8de5b0SBaptiste Daroussin yystack.l_mark -= yym; 860*0c8de5b0SBaptiste Daroussin yym = yylhs[yyn]; 861*0c8de5b0SBaptiste Daroussin if (yystate == 0 && yym == 0) 862*0c8de5b0SBaptiste Daroussin { 863*0c8de5b0SBaptiste Daroussin #if YYDEBUG 864*0c8de5b0SBaptiste Daroussin if (yydebug) 865*0c8de5b0SBaptiste Daroussin printf("%sdebug: after reduction, shifting from state 0 to\ 866*0c8de5b0SBaptiste Daroussin state %d\n", YYPREFIX, YYFINAL); 867*0c8de5b0SBaptiste Daroussin #endif 868*0c8de5b0SBaptiste Daroussin yystate = YYFINAL; 869*0c8de5b0SBaptiste Daroussin *++yystack.s_mark = YYFINAL; 870*0c8de5b0SBaptiste Daroussin *++yystack.l_mark = yyval; 871*0c8de5b0SBaptiste Daroussin if (yychar < 0) 872*0c8de5b0SBaptiste Daroussin { 873*0c8de5b0SBaptiste Daroussin if ((yychar = YYLEX) < 0) yychar = YYEOF; 874*0c8de5b0SBaptiste Daroussin #if YYDEBUG 875*0c8de5b0SBaptiste Daroussin if (yydebug) 876*0c8de5b0SBaptiste Daroussin { 877*0c8de5b0SBaptiste Daroussin yys = yyname[YYTRANSLATE(yychar)]; 878*0c8de5b0SBaptiste Daroussin printf("%sdebug: state %d, reading %d (%s)\n", 879*0c8de5b0SBaptiste Daroussin YYPREFIX, YYFINAL, yychar, yys); 880*0c8de5b0SBaptiste Daroussin } 881*0c8de5b0SBaptiste Daroussin #endif 882*0c8de5b0SBaptiste Daroussin } 883*0c8de5b0SBaptiste Daroussin if (yychar == YYEOF) goto yyaccept; 884*0c8de5b0SBaptiste Daroussin goto yyloop; 885*0c8de5b0SBaptiste Daroussin } 886*0c8de5b0SBaptiste Daroussin if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 && 887*0c8de5b0SBaptiste Daroussin yyn <= YYTABLESIZE && yycheck[yyn] == yystate) 888*0c8de5b0SBaptiste Daroussin yystate = yytable[yyn]; 889*0c8de5b0SBaptiste Daroussin else 890*0c8de5b0SBaptiste Daroussin yystate = yydgoto[yym]; 891*0c8de5b0SBaptiste Daroussin #if YYDEBUG 892*0c8de5b0SBaptiste Daroussin if (yydebug) 893*0c8de5b0SBaptiste Daroussin printf("%sdebug: after reduction, shifting from state %d \ 894*0c8de5b0SBaptiste Daroussin to state %d\n", YYPREFIX, *yystack.s_mark, yystate); 895*0c8de5b0SBaptiste Daroussin #endif 896*0c8de5b0SBaptiste Daroussin if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) 897*0c8de5b0SBaptiste Daroussin { 898*0c8de5b0SBaptiste Daroussin goto yyoverflow; 899*0c8de5b0SBaptiste Daroussin } 900*0c8de5b0SBaptiste Daroussin *++yystack.s_mark = (YYINT) yystate; 901*0c8de5b0SBaptiste Daroussin *++yystack.l_mark = yyval; 902*0c8de5b0SBaptiste Daroussin goto yyloop; 903*0c8de5b0SBaptiste Daroussin 904*0c8de5b0SBaptiste Daroussin yyoverflow: 905*0c8de5b0SBaptiste Daroussin YYERROR_CALL("yacc stack overflow"); 906*0c8de5b0SBaptiste Daroussin 907*0c8de5b0SBaptiste Daroussin yyabort: 908*0c8de5b0SBaptiste Daroussin yyfreestack(&yystack); 909*0c8de5b0SBaptiste Daroussin return (1); 910*0c8de5b0SBaptiste Daroussin 911*0c8de5b0SBaptiste Daroussin yyaccept: 912*0c8de5b0SBaptiste Daroussin yyfreestack(&yystack); 913*0c8de5b0SBaptiste Daroussin return (0); 914*0c8de5b0SBaptiste Daroussin } 915