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