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