diff --git a/.gitignore b/.gitignore index 6c873dc17..2a96f12d4 100644 --- a/.gitignore +++ b/.gitignore @@ -34,3 +34,4 @@ mruby-source-*.gem node_modules tags !Gemfile.lock +y.tab.c diff --git a/lib/mruby/build/command.rb b/lib/mruby/build/command.rb index e40b15533..d34e4e409 100644 --- a/lib/mruby/build/command.rb +++ b/lib/mruby/build/command.rb @@ -249,7 +249,7 @@ module MRuby def initialize(build) super - @command = 'bison' + @command = "ruby #{MRUBY_ROOT}/tools/lrama/exe/lrama" @compile_options = %q[-o "%{outfile}" "%{infile}"] end diff --git a/mrbgems/mruby-compiler/core/y.tab.c b/mrbgems/mruby-compiler/core/y.tab.c index cfd121f78..c2ccbf17b 100644 --- a/mrbgems/mruby-compiler/core/y.tab.c +++ b/mrbgems/mruby-compiler/core/y.tab.c @@ -1,4 +1,4 @@ -/* A Bison parser, made by GNU Bison 3.8.2. */ +/* A Bison parser, made by Lrama 0.6.9. */ /* Bison implementation for Yacc-like parsers in C @@ -64,8 +64,6 @@ #define YYPULL 1 - - /* First part of user prologue. */ #line 7 "mrbgems/mruby-compiler/core/parse.y" @@ -1509,7 +1507,7 @@ heredoc_end(parser_state *p) /* xxx ----------------------------- */ -#line 1513 "mrbgems/mruby-compiler/core/y.tab.c" +#line 1511 "mrbgems/mruby-compiler/core/y.tab.c" # ifndef YY_CAST # ifdef __cplusplus @@ -1532,15 +1530,17 @@ heredoc_end(parser_state *p) # endif # endif - +/* Use api.header.include to #include this header + instead of duplicating it here. */ /* Debug traces. */ #ifndef YYDEBUG # define YYDEBUG 0 #endif -#if YYDEBUG +#if YYDEBUG && !defined(yydebug) extern int yydebug; #endif + /* Token kinds. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE @@ -1715,6 +1715,7 @@ int yyparse (parser_state *p); + /* Symbol kind. */ enum yysymbol_kind_t { @@ -1869,8 +1870,8 @@ enum yysymbol_kind_t YYSYMBOL_147_ = 147, /* '.' */ YYSYMBOL_148_n_ = 148, /* '\n' */ YYSYMBOL_YYACCEPT = 149, /* $accept */ - YYSYMBOL_program = 150, /* program */ - YYSYMBOL_151_1 = 151, /* $@1 */ + YYSYMBOL_150_1 = 150, /* $@1 */ + YYSYMBOL_program = 151, /* program */ YYSYMBOL_top_compstmt = 152, /* top_compstmt */ YYSYMBOL_top_stmts = 153, /* top_stmts */ YYSYMBOL_top_stmt = 154, /* top_stmt */ @@ -1878,19 +1879,19 @@ enum yysymbol_kind_t YYSYMBOL_bodystmt = 156, /* bodystmt */ YYSYMBOL_compstmt = 157, /* compstmt */ YYSYMBOL_stmts = 158, /* stmts */ - YYSYMBOL_stmt = 159, /* stmt */ - YYSYMBOL_160_3 = 160, /* $@3 */ + YYSYMBOL_159_3 = 159, /* $@3 */ + YYSYMBOL_stmt = 160, /* stmt */ YYSYMBOL_command_asgn = 161, /* command_asgn */ YYSYMBOL_command_rhs = 162, /* command_rhs */ YYSYMBOL_expr = 163, /* expr */ YYSYMBOL_defn_head = 164, /* defn_head */ - YYSYMBOL_defs_head = 165, /* defs_head */ - YYSYMBOL_166_4 = 166, /* $@4 */ + YYSYMBOL_165_4 = 165, /* $@4 */ + YYSYMBOL_defs_head = 166, /* defs_head */ YYSYMBOL_expr_value = 167, /* expr_value */ YYSYMBOL_command_call = 168, /* command_call */ YYSYMBOL_block_command = 169, /* block_command */ - YYSYMBOL_cmd_brace_block = 170, /* cmd_brace_block */ - YYSYMBOL_171_5 = 171, /* $@5 */ + YYSYMBOL_170_5 = 170, /* $@5 */ + YYSYMBOL_cmd_brace_block = 171, /* cmd_brace_block */ YYSYMBOL_command = 172, /* command */ YYSYMBOL_mlhs = 173, /* mlhs */ YYSYMBOL_mlhs_inner = 174, /* mlhs_inner */ @@ -1915,8 +1916,8 @@ enum yysymbol_kind_t YYSYMBOL_opt_paren_args = 193, /* opt_paren_args */ YYSYMBOL_opt_call_args = 194, /* opt_call_args */ YYSYMBOL_call_args = 195, /* call_args */ - YYSYMBOL_command_args = 196, /* command_args */ - YYSYMBOL_197_7 = 197, /* @7 */ + YYSYMBOL_196_7 = 196, /* @7 */ + YYSYMBOL_command_args = 197, /* command_args */ YYSYMBOL_block_arg = 198, /* block_arg */ YYSYMBOL_opt_block_arg = 199, /* opt_block_arg */ YYSYMBOL_comma = 200, /* comma */ @@ -1951,19 +1952,19 @@ enum yysymbol_kind_t YYSYMBOL_opt_block_args_tail = 229, /* opt_block_args_tail */ YYSYMBOL_block_param = 230, /* block_param */ YYSYMBOL_opt_block_param = 231, /* opt_block_param */ - YYSYMBOL_block_param_def = 232, /* block_param_def */ - YYSYMBOL_233_25 = 233, /* $@25 */ + YYSYMBOL_232_25 = 232, /* $@25 */ + YYSYMBOL_block_param_def = 233, /* block_param_def */ YYSYMBOL_opt_bv_decl = 234, /* opt_bv_decl */ YYSYMBOL_bv_decls = 235, /* bv_decls */ YYSYMBOL_bvar = 236, /* bvar */ YYSYMBOL_f_larglist = 237, /* f_larglist */ YYSYMBOL_lambda_body = 238, /* lambda_body */ - YYSYMBOL_do_block = 239, /* do_block */ - YYSYMBOL_240_26 = 240, /* @26 */ + YYSYMBOL_239_26 = 239, /* @26 */ + YYSYMBOL_do_block = 240, /* do_block */ YYSYMBOL_block_call = 241, /* block_call */ YYSYMBOL_method_call = 242, /* method_call */ - YYSYMBOL_brace_block = 243, /* brace_block */ - YYSYMBOL_244_27 = 244, /* @27 */ + YYSYMBOL_243_27 = 243, /* @27 */ + YYSYMBOL_brace_block = 244, /* brace_block */ YYSYMBOL_245_28 = 245, /* @28 */ YYSYMBOL_case_body = 246, /* case_body */ YYSYMBOL_cases = 247, /* cases */ @@ -2372,9 +2373,9 @@ union yyalloc #endif /* !YYCOPY_NEEDED */ /* YYFINAL -- State number of the termination state. */ -#define YYFINAL 3 +#define YYFINAL 106 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 13092 +#define YYLAST 13317 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 149 @@ -2550,23 +2551,23 @@ static const char *const yytname[] = "tHD_STRING_MID", "tLOWEST", "'='", "'?'", "':'", "'>'", "'<'", "'|'", "'^'", "'&'", "'+'", "'-'", "'*'", "'/'", "'%'", "tUMINUS_NUM", "'!'", "'~'", "tLAST_TOKEN", "'{'", "'}'", "'['", "']'", "','", "'`'", "'('", - "')'", "';'", "'.'", "'\\n'", "$accept", "program", "$@1", + "')'", "';'", "'.'", "'\\n'", "$accept", "$@1", "program", "top_compstmt", "top_stmts", "top_stmt", "@2", "bodystmt", "compstmt", - "stmts", "stmt", "$@3", "command_asgn", "command_rhs", "expr", - "defn_head", "defs_head", "$@4", "expr_value", "command_call", - "block_command", "cmd_brace_block", "$@5", "command", "mlhs", + "stmts", "$@3", "stmt", "command_asgn", "command_rhs", "expr", + "defn_head", "$@4", "defs_head", "expr_value", "command_call", + "block_command", "$@5", "cmd_brace_block", "command", "mlhs", "mlhs_inner", "mlhs_basic", "mlhs_item", "mlhs_list", "mlhs_post", "mlhs_node", "lhs", "cname", "cpath", "fname", "fsym", "undef_list", "$@6", "op", "reswords", "arg", "aref_args", "arg_rhs", "paren_args", - "opt_paren_args", "opt_call_args", "call_args", "command_args", "@7", + "opt_paren_args", "opt_call_args", "call_args", "@7", "command_args", "block_arg", "opt_block_arg", "comma", "args", "mrhs", "primary", "@8", "@9", "$@10", "$@11", "@12", "@13", "$@14", "$@15", "$@16", "$@17", "$@18", "$@19", "@20", "@21", "@22", "@23", "primary_value", "then", "do", "if_tail", "opt_else", "for_var", "f_margs", "$@24", "block_args_tail", "opt_block_args_tail", "block_param", - "opt_block_param", "block_param_def", "$@25", "opt_bv_decl", "bv_decls", - "bvar", "f_larglist", "lambda_body", "do_block", "@26", "block_call", - "method_call", "brace_block", "@27", "@28", "case_body", "cases", + "opt_block_param", "$@25", "block_param_def", "opt_bv_decl", "bv_decls", + "bvar", "f_larglist", "lambda_body", "@26", "do_block", "block_call", + "method_call", "@27", "brace_block", "@28", "case_body", "cases", "opt_rescue", "exc_list", "exc_var", "opt_ensure", "literal", "string", "string_fragment", "string_rep", "string_interp", "@29", "xstring", "regexp", "heredoc", "heredoc_bodies", "heredoc_body", @@ -2591,7 +2592,7 @@ yysymbol_name (yysymbol_kind_t yysymbol) } #endif -#define YYPACT_NINF (-868) +#define YYPACT_NINF (-859) #define yypact_value_is_default(Yyn) \ ((Yyn) == YYPACT_NINF) @@ -2605,115 +2606,115 @@ yysymbol_name (yysymbol_kind_t yysymbol) STATE-NUM. */ static const yytype_int16 yypact[] = { - -868, 115, 3515, -868, 8231, 10355, 10697, 6539, -868, 10001, - 10001, -868, -868, 10469, 7721, 6155, 8467, 8467, -868, -868, - 8467, 4172, 3764, -868, -868, -868, -868, 18, 7721, -868, - 38, -868, -868, -868, 6681, 3628, -868, -868, 6823, -868, - -868, -868, -868, -868, -868, -868, 45, 10119, 10119, 10119, - 10119, 217, 5414, 792, 8939, 9293, 8003, -868, 7439, 1134, - 894, 67, 1139, 1203, -868, 94, 10237, 10119, -868, 780, - -868, 1204, -868, 529, 1741, 1741, -868, -868, 271, 173, - -868, 184, 10583, -868, 272, 12773, 579, 668, 228, 75, - -868, 381, -868, -868, -868, -868, -868, -868, -868, -868, - -868, 48, 278, -868, 300, 129, -868, -868, -868, -868, - -868, 243, 243, 18, 110, 646, -868, 10001, 360, 5533, - 517, 1837, 1837, -868, 279, -868, 756, -868, -868, 129, - -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, - -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, - -868, -868, -868, -868, -868, -868, -868, -868, 33, 89, - 108, 109, -868, -868, -868, -868, -868, -868, 117, 154, - 192, 199, -868, 208, -868, -868, -868, -868, -868, -868, - -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, - -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, - -868, -868, -868, -868, -868, -868, -868, -868, -868, 290, - 4592, 354, 529, 1741, 1741, 77, 305, 12897, 801, 159, - 347, 193, 77, 10001, 10001, 866, 397, -868, -868, 890, - 433, 78, 85, -868, -868, -868, -868, -868, -868, -868, - -868, -868, 7580, -868, -868, 320, -868, -868, -868, -868, - -868, -868, 780, -868, 944, -868, 444, -868, -868, 780, - 3900, 124, 10119, 10119, 10119, 10119, -868, 12835, -868, -868, - 324, 428, 324, -868, -868, -868, 8585, -868, -868, -868, - 8467, -868, -868, -868, 6155, 6393, -868, 367, 5652, -868, - 974, 391, 12959, 12959, 355, 8349, 5414, 378, 780, 1204, - 780, 416, -868, 8349, 780, 408, 714, 714, -868, 12835, - 423, 714, -868, 500, 10811, 429, 988, 999, 1035, 1982, - -868, -868, -868, -868, 1241, -868, -868, -868, -868, -868, - -868, 981, 1248, -868, -868, 1126, -868, 1051, -868, 1252, - -868, 1265, 480, 482, -868, -868, -868, -868, 5917, 10001, - 10001, 10001, 10001, 8349, 10001, 10001, 93, -868, -868, -868, - -868, 536, 780, -868, -868, -868, -868, -868, -868, -868, - 2113, 475, 479, 4592, 10119, -868, 463, 563, 476, -868, - 780, -868, -868, -868, 483, 10119, -868, 487, 576, 489, - 581, -868, -868, 521, 4592, -868, -868, 9411, -868, 5414, - 8117, 503, 9411, 10119, 10119, 10119, 10119, 10119, 10119, 10119, - 10119, 10119, 10119, 10119, 10119, 10119, 10119, 592, 10119, 10119, - 10119, 10119, 10119, 10119, 10119, 10119, 10119, 10119, 10119, 10119, - 3310, -868, 8467, -868, 11089, -868, -868, 12293, -868, -868, - -868, -868, 10237, 10237, -868, 550, -868, 529, -868, 1036, - -868, -868, -868, -868, -868, -868, 11175, 8467, 11261, 4592, - 10001, -868, -868, -868, 636, 642, 210, 538, 540, -868, - 4738, 659, 10119, 11347, 8467, 11433, 10119, 10119, 5030, 620, - 620, 134, 11519, 8467, 11605, -868, 616, -868, 5652, 444, - -868, -868, 9529, 665, -868, 10119, 10119, 12897, 12897, 12897, - 10119, -868, -868, 8703, -868, 10119, -868, 9057, 6274, 546, - 780, 324, 324, -868, -868, 313, 547, -868, -868, -868, - 7721, 5149, 557, 11347, 11433, 10119, 1204, 780, -868, -868, - 6036, 555, 1204, -868, -868, 9175, -868, 780, 9293, -868, - -868, -868, 1036, 184, 10811, -868, 10811, 11691, 8467, 11777, - 2314, -868, -868, 561, -868, 1290, 5652, 981, -868, -868, - -868, -868, -868, -868, -868, 10119, 10119, -868, -868, -868, - -868, -868, -868, -868, -868, -868, -868, -868, -868, 1428, - 780, 780, 564, 10237, 699, 12897, 266, -868, -868, -868, - 263, -868, -868, 2562, -868, 12897, 2314, -868, -868, 2042, - -868, -868, 10237, 701, 65, 10119, -868, 12489, 324, -868, - 780, 10811, 566, -868, -868, -868, 674, 591, 2410, -868, - -868, 1037, 220, 3100, 3100, 3100, 3100, 1377, 1377, 3375, - 2808, 3100, 3100, 12959, 12959, 1279, 1279, -868, 391, 12897, - 1377, 1377, 1483, 1483, 1288, 383, 383, 391, 391, 391, - 2930, 7179, 4308, 7297, -868, 243, -868, 584, 324, 452, - -868, 516, -868, -868, 4036, -868, -868, 1908, 65, 65, - -868, 3027, -868, -868, -868, -868, -868, 780, 10001, 4592, - 697, 530, -868, 243, 587, 243, 707, 313, 7862, -868, - 9647, 715, -868, 10119, 10119, 572, -868, 6941, 7060, 596, - 223, 285, 715, -868, -868, -868, -868, 116, 121, 603, - 135, 136, 10001, 7721, 609, 734, 12897, 206, -868, 12897, - 12897, 12897, 281, 10119, 12835, -868, 324, 12897, -868, -868, - -868, -868, 8821, 9057, -868, -868, -868, 611, -868, -868, - 211, 1204, 780, 714, 503, -868, 697, 530, 613, 860, - 904, -868, 36, 2314, -868, 618, -868, 391, 391, -868, - -868, 812, 780, 619, -868, -868, 2628, 711, 12365, -868, - 706, 536, -868, 476, -868, 780, -868, -868, 623, 627, - 628, -868, 630, 706, 628, 731, 12427, -868, -868, 2314, - 4592, -868, -868, 12560, 9765, -868, -868, 10811, 8349, 10237, - 10119, 11863, 8467, 11949, 413, 10237, 10237, -868, 550, 560, - 8703, 10237, 10237, -868, 550, 75, 271, 4592, 5652, 65, - -868, 780, 766, -868, -868, -868, -868, 12489, -868, 689, - -868, 5295, 771, -868, 10001, 774, -868, 10119, 10119, 333, - 10119, 10119, 776, 5798, 5798, 148, 620, -868, -868, -868, - 9883, 4884, 12897, -868, 6274, 324, -868, -868, -868, 88, - 647, 990, 4592, 5652, -868, -868, -868, 653, -868, 1554, - 780, 10119, 10119, -868, -868, 2314, -868, 2042, -868, 2042, - -868, 2042, -868, -868, 10119, 10119, -868, -868, -868, 10925, - -868, 655, 476, 657, 10925, -868, 661, 667, -868, 786, - 10119, 12631, -868, -868, 12897, 3179, 4444, 670, 406, 426, - 10119, 10119, -868, -868, -868, -868, -868, 10237, -868, -868, - -868, -868, -868, -868, -868, 803, 677, 5652, 4592, -868, - -868, 11039, 77, -868, -868, 5798, -868, -868, 77, -868, - 10119, -868, 808, 809, -868, 12897, 219, -868, 9057, -868, - 1629, 813, 682, 1445, 1445, 1019, -868, 12897, 12897, 628, - 694, 628, 628, 12897, 12897, 705, 712, 788, 1054, 266, - -868, -868, 1801, -868, 1054, 2314, -868, 2042, -868, -868, - 12702, 432, 12897, 12897, -868, -868, -868, -868, 718, 830, - 795, -868, 1083, 999, 1035, 4592, -868, 4738, -868, -868, - 5798, -868, -868, -868, -868, 722, -868, -868, -868, -868, - 727, 727, 1445, 733, -868, 2042, -868, -868, -868, -868, - -868, -868, 12035, -868, 476, 266, -868, -868, 736, 746, - 750, -868, 751, 750, -868, -868, 1036, 12121, 8467, 12207, - 642, 572, 879, 1629, 281, 1445, 727, 1445, 628, 757, - 761, -868, 2314, -868, 2042, -868, 2042, -868, 2042, -868, - -868, 697, 530, 772, 201, 467, -868, -868, -868, -868, - 727, -868, 750, 781, 750, 750, 88, -868, 2042, -868, - -868, -868, 750, -868 + -859, 3604, 156, 8456, 10580, 10922, 6764, -859, 10226, 10226, + -859, -859, 10694, 7946, 6380, 8692, 8692, -859, -859, 8692, + 4261, 3853, -859, -859, -859, -859, 35, 7946, -859, 36, + -859, -859, -859, 6906, 3717, -859, -859, 7048, -859, -859, + -859, -859, -859, -859, -859, 163, 10344, 10344, 10344, 10344, + 131, 5639, 1235, 9164, 9518, 8228, -859, 7664, 817, 1000, + 333, 1142, 1175, -859, 135, 10462, 10344, -859, 1021, -859, + 1008, -859, 346, 1162, 1162, -859, -859, 155, 68, -859, + 55, 10808, -859, 118, 12998, 193, 315, 148, 82, -859, + 117, -859, -859, -859, -859, -859, -859, -859, -859, -859, + 84, 99, -859, 396, 63, -859, -859, -859, -859, -859, + -859, 85, 85, 35, 768, 955, -859, 10226, 100, 5758, + 244, 1233, 1233, -859, 122, -859, 337, -859, -859, 63, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, 113, 114, + 168, 219, -859, -859, -859, -859, -859, -859, 220, 241, + 245, 252, -859, 255, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, 263, + 4817, 202, 346, 1162, 1162, 77, 138, 13122, 401, 208, + 195, 388, 77, 10226, 10226, 522, 251, -859, -859, 633, + 288, 58, 95, -859, -859, -859, -859, -859, -859, -859, + -859, -859, 7805, -859, -859, 175, -859, -859, -859, -859, + -859, -859, 1021, -859, 356, -859, 319, -859, -859, 1021, + 3989, 54, 10344, 10344, 10344, 10344, -859, 13060, -859, -859, + 213, 308, 213, -859, -859, -859, 8810, -859, -859, 8692, + -859, -859, -859, -859, 6380, 6618, -859, 285, 5877, -859, + 727, 278, 13184, 13184, 454, 8574, 5639, 248, 1021, 1008, + 1021, 280, -859, 8574, 1021, 284, 1389, 1389, -859, 13060, + 304, 1389, -859, 384, 11036, 312, 729, 739, 760, 1603, + -859, -859, -859, -859, 1249, -859, -859, -859, -859, -859, + -859, 595, 1254, -859, -859, 1119, -859, 478, -859, 1275, + -859, 1310, 364, 392, -859, -859, -859, -859, 6142, 10226, + 10226, 10226, 10226, 8574, 10226, 10226, 110, -859, -859, -859, + -859, 400, 1021, -859, -859, -859, -859, -859, -859, -859, + 1763, 378, 387, 4817, 10344, -859, 343, 461, 374, -859, + 1021, -859, -859, -859, 376, 10344, -859, 385, 499, 409, + 501, -859, -859, 446, 4817, -859, -859, 9636, -859, 5639, + 8342, 432, 9636, 10344, 10344, 10344, 10344, 10344, 10344, 10344, + 10344, 10344, 10344, 10344, 10344, 10344, 10344, 533, 10344, 10344, + 10344, 10344, 10344, 10344, 10344, 10344, 10344, 10344, 10344, 10344, + 3399, -859, 8692, -859, 11314, -859, -859, 12518, -859, -859, + -859, -859, 10462, 10462, -859, 490, -859, 346, -859, 815, + -859, -859, -859, -859, -859, -859, 11400, 8692, 11486, 4817, + 10226, -859, -859, -859, 575, 584, 439, 483, 500, -859, + 4963, 607, 10344, 11572, 8692, 11658, 10344, 10344, 5255, 556, + 556, 108, 11744, 8692, 11830, -859, 574, -859, 5877, 319, + -859, -859, 9754, 623, -859, 10344, 10344, 13122, 13122, 13122, + 10344, -859, -859, 8928, -859, 10344, -859, 9282, 6499, 495, + 1021, 213, 213, -859, -859, 995, 508, -859, -859, -859, + 7946, 5374, 507, 11572, 11658, 10344, 1008, 1021, -859, -859, + 6261, 528, 1008, -859, -859, 9400, -859, 1021, 9518, -859, + -859, -859, 815, 55, 11036, -859, 11036, 11916, 8692, 12002, + 1620, -859, -859, 549, -859, 1330, 5877, 595, -859, -859, + -859, -859, -859, -859, -859, 10344, 10344, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, 1412, + 1021, 1021, 558, 10462, 690, 13122, 139, -859, -859, -859, + 56, -859, -859, 1872, -859, 13122, 1620, -859, -859, 2058, + -859, -859, 10462, 691, 73, 10344, -859, 12714, 213, -859, + 1021, 11036, 573, -859, -859, -859, 673, 605, 3107, -859, + -859, 838, 466, 2229, 2229, 2229, 2229, 1502, 1502, 2670, + 2048, 2229, 2229, 13184, 13184, 1569, 1569, -859, 278, 13122, + 1502, 1502, 1801, 1801, 1391, 547, 547, 278, 278, 278, + 3281, 7404, 4533, 7522, -859, 85, -859, 610, 213, 509, + -859, 534, -859, -859, 4125, -859, -859, 1740, 73, 73, + -859, 2127, -859, -859, -859, -859, -859, 1021, 10226, 4817, + 986, 656, -859, 85, 611, 85, 725, 995, 8087, -859, + 9872, 736, -859, 10344, 10344, 373, -859, 7166, 7285, 617, + 477, 540, 736, -859, -859, -859, -859, 72, 92, 618, + 112, 128, 10226, 7946, 628, 761, 13122, 510, -859, 13122, + 13122, 13122, 616, 10344, 13060, -859, 213, 13122, -859, -859, + -859, -859, 9046, 9282, -859, -859, -859, 647, -859, -859, + 40, 1008, 1021, 1389, 432, -859, 986, 656, 649, 1041, + 1082, -859, 102, 1620, -859, 659, -859, 278, 278, -859, + -859, 265, 1021, 646, -859, -859, 1971, 766, 12590, -859, + 747, 400, -859, 374, -859, 1021, -859, -859, 663, 670, + 674, -859, 682, 747, 674, 789, 12652, -859, -859, 1620, + 4817, -859, -859, 12785, 9990, -859, -859, 11036, 8574, 10462, + 10344, 12088, 8692, 12174, 299, 10462, 10462, -859, 490, 671, + 8928, 10462, 10462, -859, 490, 82, 155, 4817, 5877, 73, + -859, 1021, 821, -859, -859, -859, -859, 12714, -859, 744, + -859, 5520, 827, -859, 10226, 830, -859, 10344, 10344, 544, + 10344, 10344, 831, 6023, 6023, 140, 556, -859, -859, -859, + 10108, 5109, 13122, -859, 6499, 213, -859, -859, -859, 655, + 697, 1084, 4817, 5877, -859, -859, -859, 709, -859, 1419, + 1021, 10344, 10344, -859, -859, 1620, -859, 2058, -859, 2058, + -859, 2058, -859, -859, 10344, 10344, -859, -859, -859, 11150, + -859, 717, 374, 721, 11150, -859, 728, 735, -859, 870, + 10344, 12856, -859, -859, 13122, 4397, 4669, 748, 551, 562, + 10344, 10344, -859, -859, -859, -859, -859, 10462, -859, -859, + -859, -859, -859, -859, -859, 877, 758, 5877, 4817, -859, + -859, 11264, 77, -859, -859, 6023, -859, -859, 77, -859, + 10344, -859, 884, 889, -859, 13122, 153, -859, 9282, -859, + 1400, 898, 775, 1554, 1554, 715, -859, 13122, 13122, 674, + 774, 674, 674, 13122, 13122, 793, 795, 868, 852, 139, + -859, -859, 1383, -859, 852, 1620, -859, 2058, -859, -859, + 12927, 603, 13122, 13122, -859, -859, -859, -859, 785, 910, + 874, -859, 915, 739, 760, 4817, -859, 4963, -859, -859, + 6023, -859, -859, -859, -859, 796, -859, -859, -859, -859, + 797, 797, 1554, 799, -859, 2058, -859, -859, -859, -859, + -859, -859, 12260, -859, 374, 139, -859, -859, 814, 816, + 823, -859, 828, 823, -859, -859, 815, 12346, 8692, 12432, + 584, 373, 916, 1400, 616, 1554, 797, 1554, 674, 842, + 843, -859, 1620, -859, 2058, -859, 2058, -859, 2058, -859, + -859, 986, 656, 818, 593, 629, -859, -859, -859, -859, + 797, -859, 823, 840, 823, 823, 655, -859, 2058, -859, + -859, -859, 823, -859 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -2721,17 +2722,17 @@ static const yytype_int16 yypact[] = means the default is an error. */ static const yytype_int16 yydefact[] = { - 2, 0, 0, 1, 0, 0, 0, 0, 295, 0, - 0, 319, 322, 0, 0, 605, 339, 340, 341, 342, - 307, 270, 270, 490, 489, 491, 492, 607, 0, 10, - 0, 494, 493, 495, 481, 591, 483, 482, 485, 484, - 477, 478, 439, 440, 496, 497, 293, 0, 0, 0, - 0, 0, 0, 297, 619, 619, 88, 314, 0, 0, - 0, 0, 0, 0, 454, 0, 0, 0, 3, 605, - 6, 9, 27, 33, 544, 544, 49, 60, 59, 0, - 76, 0, 80, 90, 0, 54, 248, 0, 61, 312, - 286, 287, 437, 288, 289, 290, 435, 434, 466, 436, - 433, 488, 0, 291, 292, 270, 5, 8, 339, 340, + 2, 0, 0, 0, 0, 0, 0, 295, 0, 0, + 319, 322, 0, 0, 605, 339, 340, 341, 342, 307, + 270, 270, 490, 489, 491, 492, 607, 0, 10, 0, + 494, 493, 495, 481, 591, 483, 482, 485, 484, 477, + 478, 439, 440, 496, 497, 293, 0, 0, 0, 0, + 0, 0, 297, 619, 619, 88, 314, 0, 0, 0, + 0, 0, 0, 454, 0, 0, 0, 3, 605, 6, + 9, 27, 33, 544, 544, 49, 60, 59, 0, 76, + 0, 80, 90, 0, 54, 248, 0, 61, 312, 286, + 287, 437, 288, 289, 290, 435, 434, 466, 436, 433, + 488, 0, 291, 292, 270, 5, 1, 8, 339, 340, 307, 619, 415, 0, 113, 114, 293, 0, 0, 0, 0, 544, 544, 116, 498, 343, 0, 488, 292, 0, 335, 168, 178, 169, 165, 194, 195, 196, 197, 176, @@ -2748,8 +2749,8 @@ static const yytype_int16 yydefact[] = 118, 119, 0, 123, 125, 20, 124, 457, 462, 461, 613, 615, 605, 616, 0, 459, 0, 617, 614, 606, 589, 293, 278, 588, 273, 0, 265, 277, 74, 269, - 619, 437, 619, 579, 75, 73, 619, 259, 308, 72, - 0, 258, 414, 71, 605, 0, 18, 0, 0, 221, + 619, 437, 619, 579, 75, 73, 619, 259, 308, 0, + 72, 258, 414, 71, 605, 0, 18, 0, 0, 221, 0, 222, 209, 212, 304, 0, 0, 0, 605, 15, 605, 78, 14, 0, 605, 0, 610, 610, 249, 0, 0, 610, 577, 0, 0, 86, 0, 96, 103, 544, @@ -2835,42 +2836,42 @@ static const yytype_int16 yydefact[] = /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -868, -868, -868, 411, -868, 25, -868, -282, 693, -868, - 42, -868, -254, -213, 768, 1343, 1513, -868, 84, -59, - -868, -429, -868, -14, 916, -190, 4, -33, -271, -487, - -11, 1993, -84, 936, 29, -19, -868, -868, 19, -868, - 867, -868, -392, 46, -461, -327, 118, -7, -868, -446, - -233, -184, 15, -360, 57, -868, -868, -868, -868, -868, - -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, - -868, 8, -211, -460, -94, -610, -868, -868, -868, 163, - 501, -868, -572, -868, -868, -276, -868, -90, -868, -868, - 145, -868, -868, -868, -81, -868, -868, -451, -868, -78, - -868, -868, -868, -868, -868, 147, 58, -167, -868, -868, - -868, -868, -868, -248, -868, 710, -868, -868, -868, 2, - -868, -868, -868, 2347, 2558, 960, 1777, -868, -868, -27, - 502, 20, -9, 396, 16, -868, -868, -868, 181, 485, - 249, -244, -839, -672, -556, -868, 180, -723, -541, -867, - 14, -513, -868, -388, -868, 675, -351, -868, -868, -868, - 62, -436, 624, -330, -868, -868, -47, -868, 7, -22, - 806, -253, 394, -284, -65, -2 + -859, -859, -859, 467, -859, 30, -859, -231, 171, -859, + -859, 41, -298, -307, 625, 1610, -859, 1791, 21, -56, + -859, -859, -636, -11, 979, -201, 5, -23, -268, -443, + 13, 2466, -82, 992, 10, -20, -859, -859, 44, -859, + 1144, -859, 518, 98, -232, -378, 97, -859, 18, -382, + -250, -163, 32, -353, 33, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, 9, -202, -465, -41, -622, -859, -859, -859, 214, + 222, -859, -545, -859, -859, -472, -859, -36, -859, -859, + -859, 192, -859, -859, -859, -87, -859, -457, -859, -30, + -859, -859, -859, -859, -859, -13, 88, -175, -859, -859, + -859, -859, -859, -261, -859, 757, -859, -859, -859, 16, + -859, -859, -859, 2219, 2647, 1010, 2038, -859, -859, 4, + 316, 7, -726, 431, 50, -859, -859, -859, 49, 66, + 189, -243, -858, -679, -439, -859, 367, -683, -537, -841, + 57, -518, -859, 300, -859, -190, -347, -859, -859, -859, + 46, -452, 599, -343, -859, -859, -60, -859, 70, -15, + 403, -209, 866, -219, -34, -1 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - 0, 1, 2, 68, 69, 70, 287, 464, 465, 298, - 299, 520, 72, 615, 73, 213, 214, 688, 215, 76, - 77, 676, 819, 78, 79, 300, 80, 81, 82, 545, - 83, 216, 123, 124, 243, 244, 245, 713, 653, 207, - 85, 305, 619, 654, 278, 509, 510, 279, 280, 269, - 502, 538, 658, 609, 86, 210, 303, 742, 304, 319, + 0, 1, 2, 67, 68, 69, 287, 464, 465, 298, + 520, 299, 71, 615, 72, 213, 688, 214, 215, 75, + 76, 819, 676, 77, 78, 300, 79, 80, 81, 545, + 82, 216, 123, 124, 243, 244, 245, 713, 653, 207, + 84, 305, 619, 654, 278, 509, 510, 279, 280, 269, + 502, 538, 658, 609, 85, 210, 303, 742, 304, 319, 752, 223, 843, 224, 844, 712, 1000, 679, 677, 928, 459, 290, 470, 704, 835, 836, 230, 762, 953, 1026, - 973, 887, 790, 791, 888, 860, 1005, 1006, 551, 864, - 396, 604, 88, 89, 446, 669, 668, 493, 1003, 691, - 829, 932, 936, 90, 91, 92, 332, 333, 556, 93, - 94, 95, 557, 253, 254, 255, 488, 96, 97, 98, - 326, 99, 100, 219, 220, 103, 221, 455, 678, 371, + 973, 887, 790, 888, 791, 860, 1005, 1006, 551, 864, + 604, 396, 87, 88, 669, 446, 668, 493, 1003, 691, + 829, 932, 936, 89, 90, 91, 332, 333, 556, 92, + 93, 94, 557, 253, 254, 255, 488, 95, 96, 97, + 326, 98, 99, 219, 220, 102, 221, 455, 678, 371, 372, 373, 374, 375, 890, 891, 376, 377, 378, 776, 594, 380, 381, 382, 383, 579, 384, 385, 386, 895, 896, 387, 388, 389, 390, 391, 587, 209, 460, 310, @@ -2883,1840 +2884,1858 @@ static const yytype_int16 yydefgoto[] = number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_int16 yytable[] = { - 106, 519, 266, 266, 348, 285, 266, 344, 440, 286, - 87, 478, 87, 126, 126, 283, 246, 218, 218, 281, - 706, 229, 256, 218, 218, 218, 206, 591, 218, 107, - 246, 270, 270, 206, 450, 270, 205, 777, 715, 506, - 434, 436, 620, 544, 71, 315, 71, 206, 393, 401, - 672, 674, 308, 312, 539, 781, 301, 725, 541, 745, - 87, 725, 125, 125, 316, 862, 894, 277, 282, 306, - 125, 728, 392, 392, 218, 552, 347, 206, 272, 272, - 778, 832, 272, 558, 672, 674, 503, 325, 507, 867, - 316, 584, 842, 469, 222, 394, 817, 818, 445, 252, - 655, 438, 728, -104, 664, 657, 527, 667, 1031, 281, - -111, 1007, 603, 125, -416, 3, 307, 311, 335, 337, - 339, 341, 535, -490, 796, 218, 581, 87, 685, 336, - 684, 328, 329, 739, 268, 274, -589, -487, 275, 125, - -486, -107, 394, 655, 788, 664, -109, 699, 614, 863, - 575, 444, 342, 343, 685, 438, 709, 277, 282, -110, - -106, -108, 284, 271, 271, 560, -112, 271, 560, -104, - 560, 475, 560, -105, 560, 444, 288, 686, -416, -489, - -490, 496, 484, 330, 331, 1031, 467, 468, 614, 614, - -96, 789, 247, -416, 685, 248, 249, 777, -491, -492, - -481, 271, 271, 813, 1007, 779, 815, -494, 782, 610, - 777, 392, 392, 439, 576, -481, -487, -106, 87, 685, - -96, 748, 469, 250, 813, 251, -416, -103, -416, 670, - 673, 218, 218, 530, 394, -416, -489, 831, 441, 492, - 778, 537, 537, 524, -493, -112, 537, 927, -589, 894, - -481, -486, 894, 778, -589, -491, -492, -481, -99, 489, - -592, 206, 266, -101, -494, -593, 266, 439, 504, 549, - 504, 325, 294, 276, 513, 544, -102, -98, -100, 506, - -104, 543, -495, 1013, 218, 477, 725, 725, 218, -481, - -97, 511, 218, 218, 397, 270, 87, 728, -485, 395, - 301, -493, 525, 87, 87, 529, 751, 479, 480, 756, - 902, 87, 443, 777, -111, 840, -106, 770, 435, -106, - -106, 247, 316, 777, 248, 249, 398, 732, 733, 894, - 828, -110, -77, 431, 781, 771, 1001, 526, 606, -495, - 544, -111, 272, 616, -106, 532, -481, -106, 501, -106, - 354, 355, 250, -91, 251, -485, 87, 218, 218, 218, - 218, 87, 218, 218, 725, 779, 367, 365, 366, 367, - 442, 125, 682, 567, 588, 433, 588, 841, 779, 916, - 461, 87, 555, 616, 616, 922, 944, 276, 560, 612, - 71, 368, 443, 402, 368, 572, 247, 822, 514, 248, - 249, 897, 87, 301, 454, 218, -108, 87, 316, 466, - 621, 448, 608, 913, 915, 449, 777, 608, 266, 919, - 921, -111, 873, 271, 794, 940, 472, 271, 247, 251, - 513, 248, 249, 568, 569, 570, 571, 462, 519, 476, - 218, 42, -103, 266, 43, 913, 915, 525, 919, 921, - 621, 621, 481, 662, -105, 513, 662, 125, 485, 250, - 266, 251, 487, 692, 492, 218, 501, 87, 218, 266, - 910, 655, 513, 664, 810, 907, -110, 662, 87, 722, - 663, 513, 218, -108, 418, 505, 87, 960, 59, 777, - 858, 218, 418, 853, 662, 1002, 87, -102, 811, 553, - 777, 736, 725, 662, 663, 521, 851, 717, 899, 504, - 504, 744, 728, 543, 427, 428, 429, 731, 812, 106, - 519, 663, 246, 528, 917, 985, 544, -106, 247, 87, - 663, 248, 249, 850, 266, 925, 911, -76, 87, 206, - 970, 971, 507, 662, 811, 614, 513, -108, 985, 534, - 582, 614, 316, -105, 316, 542, 218, 614, 614, 379, - 379, 251, 540, 71, 87, 726, 354, 355, 662, 767, - 663, 546, 741, -106, 803, 451, 452, 519, 543, 271, - 951, 565, -108, 566, 1029, -108, -108, 1032, 785, 834, - 831, 218, 912, 577, -98, 663, 583, 743, 918, 920, - -501, 125, 792, 125, 271, 586, 379, 379, 812, 471, - 218, 965, 966, -108, 589, -108, 471, 804, 590, 316, - -303, 271, 853, 453, 453, 593, 105, 598, 105, 596, - 271, 599, 601, 105, 105, -303, 597, -108, 600, 105, - 105, 105, 602, 637, 105, 613, 989, 703, 808, 675, - 271, 689, 917, 494, 271, 690, 504, 814, -100, 693, - 816, 694, 281, 614, 1073, 281, 792, 792, 125, -343, - -303, 948, -590, 1051, -593, 696, 105, -303, 537, 554, - 718, -105, 271, 281, -343, 271, 218, 87, 830, 833, - 105, 730, 735, 833, 847, 271, 738, -91, 379, 379, - 833, 807, -97, 753, 984, 608, 766, 206, 797, 685, - 277, 1063, 799, 277, 769, 246, 787, 826, 798, -343, - 218, 995, 824, -596, 504, 809, -343, 997, 823, 807, - 553, 277, 206, 831, 923, 247, -485, 839, 248, 249, - 616, 105, 494, 105, 845, 297, 616, 914, 848, 849, - 856, -485, 616, 616, 859, 871, 578, 865, 430, 763, - 519, 869, 821, 575, 543, 875, 250, 773, 251, 877, - 879, 588, 881, 431, 592, 884, 780, 212, 212, 784, - 889, 930, 931, 212, -590, 935, -485, -596, 266, 939, - -590, 941, 949, -485, 855, 954, 846, 969, 87, 972, - 513, 979, -596, 975, 379, 316, 87, 621, 432, 977, - 218, 981, 297, 621, 218, 433, 987, 792, 986, 621, - 621, 1009, 662, 998, 999, 87, 87, 933, 1008, 247, - 937, 1019, 248, 249, 105, -596, 1015, -596, 1020, 87, - 903, -592, 218, 1021, -596, 1035, 456, 105, 105, 663, - 1036, 87, 87, 504, 125, 379, 501, 1034, 616, 87, - 250, 431, 251, 759, 1043, 357, 358, 359, 360, 1045, - 87, 87, 855, 705, 705, 1047, 217, 217, 1052, 271, - 271, 760, 217, 267, 267, 447, -592, 267, 1054, 588, - 588, 473, 1056, 1058, 1068, 247, 457, 968, 248, 249, - 105, -592, 974, 433, 105, -593, 431, -300, 105, 105, - -300, -300, 105, 1076, 289, 291, 292, 293, 938, 105, - 105, 267, 309, 1078, 494, 621, 250, 105, 251, 227, - -593, 494, 737, 345, 346, 87, 87, -300, -300, 992, - -300, 474, 130, 87, 833, 1039, 125, 1067, 433, 271, - -592, 125, 886, 1069, 866, 334, -293, 271, 328, 329, - 889, 924, 1066, 889, 491, -592, 889, 208, 889, 893, - 892, -293, 105, 105, 105, 105, 105, 105, 105, 105, - 482, 522, 772, 1044, 217, 1023, 1028, 0, 125, 297, - 0, 212, 212, 0, -593, 431, 0, 105, -592, 0, - -592, 0, 0, 87, -592, 87, -293, -592, 87, -593, - 330, 331, 0, -293, 0, 0, 889, 0, 105, 0, - 0, 105, 588, 105, 266, 0, 105, 876, 878, 880, - 483, 882, 0, 883, 0, 379, 513, 433, 692, 833, - 0, 0, -593, 889, -593, 889, 218, 889, -593, 889, - 0, -593, 515, 518, 0, 959, 105, 961, 662, 490, - 0, 962, 248, 249, 523, 0, 105, 105, 0, 889, - 759, 820, 357, 358, 359, 360, 0, 0, 547, 431, - 0, 105, 0, 105, 105, 663, 0, 0, 760, -488, - 217, 217, 297, 431, 105, 271, 247, 0, 105, 248, - 249, 0, 105, 0, -488, 247, 531, 105, 248, 249, - 533, 471, 105, 562, 474, 328, 329, 212, 212, 212, - 212, 433, 573, 574, 0, -292, -304, 801, 548, 497, - 498, 499, 345, 1010, 1011, 433, 950, 0, 251, -488, - -292, -304, 431, 267, 1022, 105, -488, 267, 0, 0, - 1024, 217, 217, 892, 105, 1030, 892, 1033, 892, 431, - 0, 1012, 0, 695, 0, 0, 0, 330, 331, 874, - 0, 702, 105, 1037, 0, -292, -304, 802, 0, 0, - 105, 714, -292, -304, 433, 271, 0, 561, 431, 0, - 328, 329, 1046, 0, 457, 1048, 0, 327, 328, 329, - 0, 433, 338, 328, 329, 0, 892, 105, 1014, 1016, - 1017, 1018, 0, 0, 0, 929, 217, 217, 217, 217, - 0, 217, 217, 1038, 0, 0, 105, 1070, 687, 0, - 433, 0, 1072, 892, 1074, 892, 0, 892, 1075, 892, - 705, 585, 330, 331, 349, 350, 351, 352, 353, 755, - 330, 331, 595, 0, 0, 330, 331, 0, 1082, 892, - 0, 774, 0, 0, 607, 774, 340, 328, 329, 618, - 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, - 633, 634, 635, 636, 0, 638, 639, 640, 641, 642, - 643, 644, 645, 646, 647, 648, 649, 1071, 0, 267, - 0, 0, 105, 105, 554, 328, 329, 0, 0, 671, - 671, 559, 328, 329, 729, 563, 328, 329, 0, 330, - 331, 734, 0, 0, 267, 0, 471, 217, 564, 328, - 329, 0, 471, 740, 0, 0, 105, 0, 0, 671, - 0, 267, 0, 671, 671, 74, 0, 74, 121, 121, - 267, 0, 0, 754, 328, 329, 121, 330, 331, 716, - 0, 0, 719, 720, 330, 331, 0, 721, 330, 331, - 724, 0, 727, 0, 309, 293, 415, 416, 0, 0, - 418, 330, 331, 0, 0, 0, 764, 765, 0, 418, - 0, 0, 671, 0, 0, 74, 0, 976, 978, 121, - 0, 0, 724, 0, 0, 309, 330, 331, 425, 426, - 427, 428, 429, 0, 105, 267, 795, 425, 426, 427, - 428, 429, 105, 105, 0, 121, 105, 0, 0, 105, - 105, 0, 757, 758, 0, 105, 105, 0, 0, 0, - 0, 105, 105, 0, 0, 0, 212, 0, 0, 0, - 768, 0, 0, 0, 0, 105, 0, 0, 105, 0, - 0, 0, 74, 0, 898, 415, 416, 105, 105, 786, - 0, 0, 793, 1027, 0, 105, 0, 0, 418, 759, - 212, 357, 358, 359, 360, 0, 105, 105, 0, 0, - 0, 0, 0, 825, 0, 0, 759, 760, 357, 358, - 359, 360, 0, 422, 423, 424, 425, 426, 427, 428, - 429, 926, 0, 0, 760, 75, 0, 75, 122, 122, - 0, 0, 363, 0, 934, 0, 122, 0, 761, 1053, - 1055, 1057, 0, 1059, 1060, 0, 942, 943, 0, 363, - 0, 105, 0, 0, 946, 217, 0, 0, 857, 0, - 0, 105, 105, 74, 0, 0, 952, 827, 0, 105, - 768, 786, 0, 0, 0, 75, 0, 0, 868, 122, - 0, 415, 416, 1077, 1079, 1080, 1081, 0, 0, 217, - 0, 0, 0, 1083, 418, 0, 0, 0, 0, 0, - 852, 0, 0, 0, 0, 122, 0, 0, 0, 724, - 309, 0, 212, 0, 0, 759, 0, 357, 358, 359, - 360, 424, 425, 426, 427, 428, 429, 0, 0, 105, - 988, 105, 0, 760, 105, 0, 0, 0, 996, 0, - 0, 74, 75, 0, 0, 0, 0, 0, 74, 74, - 0, 0, 0, 0, 774, 0, 74, 898, 363, 0, - 898, 0, 898, 0, 955, 0, 0, 121, 0, 0, - 947, 901, 105, 0, 0, 0, 671, 904, 0, 267, - 0, 0, 671, 671, 0, 0, 956, 724, 671, 671, - 1004, 0, 357, 358, 359, 360, 0, 0, 1040, 0, - 1041, 74, 0, 1042, 0, 0, 74, 0, 760, 0, - 898, 217, 0, 0, 671, 671, 0, 671, 671, 0, - 0, 0, 0, 0, 0, 0, 74, 945, 0, 0, - 0, 293, 0, 75, 0, 0, 0, 898, 0, 898, - 0, 898, 0, 898, 0, 0, 0, 74, 957, 958, - 0, 0, 74, 121, 0, 74, 0, 0, 0, 0, - 0, 963, 964, 898, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 980, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 982, 983, 104, - 0, 104, 128, 128, 671, 74, 74, 0, 0, 0, - 232, 0, 356, 0, 357, 358, 359, 360, 0, 0, - 0, 75, 74, 0, 0, 0, 0, 671, 75, 75, - 361, 0, 0, 74, 0, 309, 75, 0, 0, 0, - 0, 74, 0, 0, 362, 0, 0, 122, 0, 104, - 0, 74, 0, 318, 0, 363, 0, 0, 0, 0, - 0, 364, 365, 366, 367, 0, 0, 0, 0, 0, - 0, 0, 356, 0, 357, 358, 359, 360, 0, 318, - 0, 75, -619, 0, 74, 0, 75, 0, 0, 368, - 361, 0, 369, 74, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 370, 75, 121, 356, 121, - 357, 358, 359, 360, 0, 363, 104, 0, 0, 74, - 0, 364, 365, 366, 367, 267, 361, 75, -619, 0, - 0, 0, 75, 122, 0, 75, 0, 0, 0, 0, - 362, -619, -619, -619, -619, -619, -619, 0, -619, 368, - 0, 363, 369, 0, -619, -619, 0, 364, 365, 366, - 367, 0, 0, 1025, 0, -619, -619, 0, -619, -619, - -619, -619, -619, 0, 121, 75, 75, 0, 0, 0, - 0, 0, 0, 0, 0, 368, 0, 0, 369, 0, - 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, - 0, 370, 0, 75, 0, 0, 0, 104, 0, 0, - 0, 75, 0, 0, 0, 84, 0, 84, -619, 0, - 0, 75, 0, 0, 0, 0, 228, 0, 0, 0, - 0, 0, 0, -619, 0, 0, 0, 0, 0, 0, - 0, 0, 74, -619, 0, 0, -619, -619, 0, 0, - 0, 0, 0, 356, 75, 357, 358, 359, 360, 0, - 0, 0, 0, 75, 0, 84, -619, -619, 0, 0, - 0, 361, 276, -619, -619, -619, -619, 122, 0, 122, - 0, 0, 0, 0, 0, 104, 0, 0, 0, 75, - 0, 0, 104, 104, 0, 0, 363, 0, 0, 0, - 104, 0, 364, 365, 366, 367, 0, 0, 0, 0, - 0, 318, 0, 783, 0, 357, 358, 359, 360, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 368, 361, 84, 369, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 122, 104, 550, 0, 0, 0, - 104, 0, 0, 74, 0, 0, 363, 0, 0, 0, - 121, 74, 74, 365, 366, 367, 0, 0, 74, 0, - 104, 0, 0, 0, 74, 74, 0, 0, 0, 0, - 74, 74, 0, 0, 356, 0, 357, 358, 359, 360, - 368, 104, 0, 0, 74, 0, 104, 318, 0, 622, - 0, 0, 361, 0, 0, 0, 74, 74, 0, 0, - 0, 0, 75, 0, 74, 0, 0, 0, 580, 0, - 0, 0, 0, 84, 0, 74, 74, 363, 0, 0, - 0, 0, 0, 364, 365, 366, 367, 0, 0, 622, - 622, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 121, 0, 0, 0, 104, 121, 0, 0, - 0, 368, 0, 0, 369, 0, 0, 104, 0, 0, - 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, - 74, 0, 0, 0, 0, 104, 0, 0, 0, 0, - 74, 74, 0, 0, 121, 0, 0, 0, 74, 0, - 0, 84, 0, 0, 0, 0, 0, 0, 84, 84, - 0, 0, 0, 0, 0, 0, 84, 0, 104, 0, - 0, 0, 0, 75, 0, 0, 0, 104, 0, 0, - 122, 75, 75, 0, 0, 0, 0, 0, 75, 0, - 0, 318, 0, 318, 75, 75, 0, 0, 0, 0, - 75, 75, 0, 104, 0, 0, 0, 0, 74, 0, - 74, 84, 0, 74, 75, 0, 84, 0, 0, 101, - 0, 101, 127, 127, 127, 0, 75, 75, 0, 0, - 231, 0, 0, 0, 75, 356, 84, 357, 358, 359, - 360, 0, 0, 0, 0, 75, 75, 0, 0, 0, - 0, 0, 0, 361, 0, 0, 0, 84, 318, 0, - 0, 0, 84, 0, 0, 617, 0, 0, 0, 101, - 0, 0, 122, 317, 0, 0, 0, 122, 363, 0, - 0, 0, 0, 0, 364, 365, 366, 367, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 317, - 75, 0, 0, 0, 0, 617, 617, 0, 0, 0, - 75, 75, 368, 0, 122, 369, 0, 0, 75, 0, - 0, 0, 84, 0, 800, 0, 104, 0, 0, 0, - 0, 0, 0, 84, 0, 0, 101, 0, 0, 0, - 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 84, 403, 404, 405, 406, 407, 408, 409, 410, - 411, 412, 413, 414, 0, 0, 0, 0, 415, 416, - 0, 0, 0, 0, 0, 0, 0, 0, 75, 0, - 75, 418, 0, 75, 84, 0, 0, 0, 0, 0, - 0, 0, 0, 84, 0, 0, 0, 0, 0, 0, - 0, 0, 419, 0, 420, 421, 422, 423, 424, 425, - 426, 427, 428, 429, 0, 0, 0, 0, 0, 84, - 0, 0, -277, 0, 0, 0, 0, 101, 0, 0, - 102, 0, 102, 0, 0, 0, 0, 104, 0, 0, - 0, 0, 0, 0, 318, 104, 622, 0, 0, 0, - 0, 0, 622, 0, 0, 0, 0, 0, 622, 622, - 0, 0, 0, 0, 104, 104, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, - 102, 0, 0, 356, 0, 357, 358, 359, 360, 0, - 104, 104, 0, 0, 0, 0, 0, 0, 104, 0, - 0, 361, 0, 0, 0, 101, 0, 0, 0, 104, - 104, 0, 101, 101, 0, 0, 0, 775, 0, 0, - 101, 0, 0, 0, 0, 0, 363, 0, 0, 0, - 0, 317, 364, 365, 366, 367, 128, 0, 0, 0, - 0, 128, 84, 0, 0, 0, 0, 102, 0, 356, - 0, 357, 358, 359, 360, 0, 0, 0, 0, 0, - 368, 0, 0, 369, 622, 101, 0, 361, 0, 0, - 101, 0, 0, 0, 104, 104, 0, 0, 994, 0, - 0, 0, 104, 870, 0, 0, 0, 0, 0, 0, - 101, 0, 363, 0, 0, 0, 0, 0, 364, 365, - 366, 367, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 101, 0, 0, 0, 0, 101, 317, 0, 0, - 0, 0, 0, 0, 0, 0, 368, 0, 0, 369, - 0, 0, 0, 0, 0, 0, 0, 0, 102, 0, - 0, 0, 104, 0, 104, 0, 0, 104, 0, 0, - 0, 0, 0, 84, 0, 0, 0, 0, 0, 0, - 0, 84, 617, 0, 0, 0, 0, 0, 617, 0, - 0, 0, 0, 0, 617, 617, 101, 0, 0, 0, - 84, 84, 0, 0, 0, 0, 0, 101, 0, 0, - 0, 0, 0, 0, 84, 101, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 101, 84, 84, 0, 0, - 0, 0, 0, 0, 84, 0, 102, 0, 0, 0, - 0, 0, 0, 102, 102, 84, 84, 0, 0, 0, - 0, 102, 0, 0, 0, 0, 0, 0, 101, 0, - 0, 0, 0, 0, 0, 0, 0, 101, 0, 0, - 403, 404, 405, 406, 407, 408, 409, 0, 411, 412, - 0, 317, 0, 317, 0, 0, 415, 416, 0, 0, - 0, 0, 0, 101, 0, 0, 102, 0, 0, 418, - 617, 102, 0, 0, 0, 0, 0, 0, 0, 0, - 84, 84, 0, 0, 991, 0, 0, 0, 84, 0, - -596, 102, 420, 421, 422, 423, 424, 425, 426, 427, - 428, 429, 0, -596, -596, -596, 0, -596, -596, 0, - -596, 0, 102, 0, 0, 0, -596, 102, 317, 0, - 102, 0, 0, 0, 0, 0, 0, -596, -596, 0, - -596, -596, -596, -596, -596, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 84, 0, - 84, 0, 0, 84, 0, 0, 0, 0, 0, 0, - 102, 102, -596, -596, -596, -596, -596, -596, -596, -596, - -596, -596, -596, -596, 0, 0, 0, 102, -596, -596, - -596, 0, 805, -596, 0, 0, 101, 0, 102, 0, - 0, -596, 0, 0, 0, -596, 102, 0, 0, 0, - 0, 0, 0, 0, 0, -596, 102, 0, -596, -596, - 0, -107, -596, 0, -596, -596, -596, -596, -596, -596, - -596, -596, -596, -596, 0, 0, 0, 0, -596, -596, - -596, 800, -99, 0, 0, -596, -596, -596, -596, 102, - 0, 0, 0, 0, 0, 0, 0, 0, 102, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 403, + 105, 440, 271, 271, 266, 266, 271, 286, 266, 344, + 86, 285, 86, 126, 126, 706, 205, 218, 218, 281, + 478, 229, 506, 218, 218, 218, 434, 436, 218, 246, + 222, 591, 715, 107, 348, 252, 450, 125, 125, 283, + 271, 271, 70, 246, 70, 125, 544, 270, 270, 620, + 206, 270, 308, 312, 657, 728, 301, 206, 401, 781, + 86, 272, 272, 889, 316, 272, 519, 325, 315, 832, + 558, 206, 392, 392, 218, 778, 552, 441, 393, 684, + 842, 394, 867, -104, 256, 306, 728, 655, 125, 438, + 316, 664, 1007, 469, 667, 527, 699, -107, 539, 307, + 311, 206, 541, 745, 614, 709, 894, 503, 438, 507, + 281, 496, 268, 274, 125, 685, 275, -109, 277, 282, + -111, 725, 445, 817, 818, 725, 218, 581, 86, 394, + 655, 862, 664, -110, 1031, 670, 673, -106, 347, 379, + 379, 685, 584, 535, 614, 614, -487, 335, 337, 339, + 341, 448, 788, -108, 777, 449, 106, 560, 475, 367, + 560, -77, 560, 603, 560, -105, 560, 575, 796, 484, + 748, 831, 916, 492, 288, -112, -486, 41, 922, 284, + 42, 685, -91, 395, 368, 1007, 294, 379, 379, 397, + 770, 442, 247, 342, 343, 248, 249, 398, 610, 789, + -96, 439, 444, -490, -489, -104, 685, 276, 771, 277, + 282, 1031, 392, 392, -99, 863, -592, 467, 468, 86, + 439, 394, 297, 250, 58, 251, -96, 444, 686, 276, + 524, 576, 218, 218, -101, 778, -593, -103, 435, 402, + 365, 366, 367, 889, 479, 480, 889, 454, 778, 889, + -102, 889, 325, 431, -98, -487, 549, 466, -491, 472, + -490, -489, 506, 271, 530, 266, 271, 368, 266, 504, + -100, 504, 537, 537, 927, 513, 1013, 537, 544, 379, + 379, 728, -97, -343, -112, 218, 206, 476, 218, 894, + 297, 543, 894, 218, 218, 433, 756, 86, -343, 889, + -486, 301, 451, 452, 86, 86, 481, 751, 511, -492, + -494, 270, 86, 485, 777, -491, 759, 487, 357, 358, + 359, 360, 489, 316, 1001, 272, 889, 777, 889, -104, + 889, -493, 889, -343, 760, -495, 526, 828, 781, 492, + -343, 606, -481, 544, 532, -485, 616, 125, 732, 733, + 725, 725, 889, 461, 902, 501, 910, 86, 218, 218, + 218, 218, 86, 218, 218, 505, -492, -494, 529, 894, + 568, 569, 570, 571, 682, 588, 514, 588, 567, 418, + 560, 944, 86, 354, 355, 379, 616, 616, -493, 70, + 834, 831, -495, 528, 572, 336, 774, 328, 329, -481, + 774, -76, -485, 86, 301, 430, 218, 866, 86, 316, + 462, 621, 555, 612, 247, 965, 966, 248, 249, 271, + 431, 266, 911, 521, 907, 534, 873, 456, 725, 608, + 777, 513, 813, 125, 608, 815, 379, 453, 453, 542, + 777, 218, 431, 540, 271, 794, 266, 251, 822, 330, + 331, 621, 621, 813, 546, 432, 513, 577, 655, 522, + 664, 271, 433, 266, 692, 565, 218, 297, 86, 218, + 271, 490, 266, 513, 248, 249, 853, 457, 662, 86, + 477, 662, 513, 218, 433, 586, 722, 86, 443, 1002, + 271, 473, 218, 566, 271, 810, 728, 86, 912, 583, + 736, 614, 662, 519, 918, 920, 431, 614, -501, -111, + 504, 504, 589, 614, 614, 851, 590, -111, 593, 662, + 105, 744, 271, 543, 717, 271, 469, 596, 662, 544, + 86, 525, 663, 777, 858, 271, 246, 266, -103, 86, + 562, 474, 328, 329, 970, 971, 525, 513, 433, 726, + 598, 599, 601, 316, 850, 316, 663, 218, 443, 899, + -110, 803, 70, 507, 206, 86, 725, 602, 662, 840, + 297, 741, 767, 663, 613, -110, 597, 125, 600, 125, + 731, 743, 663, 703, 637, 519, 925, -111, 543, 675, + 689, 785, 218, 662, 330, 331, -102, 690, -106, 898, + 104, 811, 104, 792, 693, 853, 777, 104, 104, -106, + 984, 218, -293, 104, 104, 104, 379, 777, 104, 614, + 316, 694, 663, 696, 804, 247, 812, -293, 248, 249, + -106, 951, 841, 212, 212, 773, 940, 554, 718, 212, + 730, 695, 519, 811, 125, -108, 738, 663, 418, 702, + 104, -98, 501, 735, 812, -108, 250, 504, 251, 714, + 1063, -108, -293, 281, 104, -105, 281, 792, 792, -293, + -91, 247, -106, 808, 248, 249, -100, 1051, 427, 428, + 429, -416, 814, -108, 281, 816, 553, 218, 86, 830, + 833, 753, 948, 847, 833, 917, 685, 989, 826, 821, + 766, 833, 250, 531, 251, 769, 787, 533, -106, 537, + 247, -106, -106, 248, 249, 797, 104, 798, 104, 271, + 271, 218, 608, 482, -105, 504, 799, 755, 923, 246, + 995, 247, 206, 846, 248, 249, 997, 582, 431, -106, + 824, -106, 447, 616, -108, -416, -303, -108, -108, 616, + 914, 809, 823, 807, 831, 616, 616, 206, 839, 845, + -416, -303, 277, 917, 251, 277, 759, 848, 357, 358, + 359, 360, 588, 483, 543, -108, 849, -108, 855, 774, + 433, 807, 898, 277, 760, 898, 856, 898, 869, 271, + 859, 266, -105, -416, -589, -416, -303, 271, 865, 86, + -593, 513, -416, -303, 575, 875, 316, 86, 621, 104, + 871, 218, 877, -97, 621, 218, 879, 523, 792, 547, + 621, 621, 104, 104, 881, 519, 86, 86, 933, -488, + 125, 937, 431, 884, 431, 898, 930, 931, 892, 903, + 86, 935, 949, 218, -488, 939, 941, 662, 212, 212, + -292, 954, 86, 86, 504, 938, 855, 1012, -481, 969, + 86, 616, 898, 972, 898, -292, 898, 474, 898, 548, + 975, 86, 86, -481, 433, 104, 433, 977, 104, -488, + 327, 328, 329, 104, 104, 979, -488, 104, 898, 981, + 588, 588, 986, 779, 104, 104, 782, 987, 968, 998, + -292, 663, 104, 974, 999, -304, -589, -292, -481, 515, + 518, 729, -589, 1008, 1009, -481, 1015, 553, 734, 1019, + -304, 1020, 125, 1021, 1034, 1035, 621, 125, 801, 1036, + 740, 1068, 1039, 330, 331, 271, 86, 86, 1043, 1045, + 992, 1047, 1022, 431, 86, 833, 763, 104, 104, 104, + 104, 104, 104, 104, 104, -304, 1052, 431, 1054, 1076, + 672, 674, -304, 780, 125, 1056, 784, 876, 878, 880, + 1058, 882, 104, 883, 212, 212, 212, 212, 802, 573, + 574, -590, 1078, 764, 765, 433, -592, -593, 737, 926, + 1044, 227, 457, 104, 672, 674, 104, 130, 104, 433, + 1067, 104, 934, 886, 86, 1037, 86, 1069, 924, 86, + 1066, 491, -596, 795, 942, 943, 208, 772, 1024, 1023, + 431, 892, 946, 588, 892, 271, 892, 266, 0, 1028, + 0, 104, 354, 355, 952, 0, 0, 513, 0, 692, + 833, 104, 104, 739, 0, -485, 0, 218, 349, 350, + 351, 352, 353, 779, 0, 1038, 104, 0, 104, 104, + -485, 334, 433, 0, 328, 329, 779, -592, 0, 104, + 0, 0, 0, 104, 892, 0, -596, 104, 0, 0, + 0, 471, 104, 662, 0, 687, 0, 104, 471, 897, + 825, -596, 0, -590, 0, -485, 0, 0, 988, -590, + 0, 892, -485, 892, 0, 892, 996, 892, -593, 0, + 247, 0, 0, 248, 249, 0, 330, 331, 976, 978, + 104, 0, 0, 0, -596, 494, -596, 892, 0, 104, + -592, -592, 0, -596, 0, 0, 247, 663, 0, 248, + 249, 250, 0, 251, 0, 857, -592, 104, 1014, 1016, + 1017, 1018, 217, 217, 0, 104, 893, 0, 217, 267, + 267, 0, 0, 267, 0, 868, 1040, 250, 1041, 251, + 0, 1042, -593, 0, 0, 960, 0, 0, 0, -592, + 561, -592, 104, 328, 329, -592, 0, -593, -592, 0, + 289, 291, 292, 293, 1027, 0, 0, 267, 309, 247, + 0, 104, 248, 249, 0, 338, 328, 329, 0, 345, + 346, 0, 0, 356, 494, 357, 358, 359, 360, 0, + -593, 0, -593, 0, 0, 0, -593, 0, 578, -593, + 950, 361, 251, 0, 0, 330, 331, 1071, 340, 328, + 329, 0, 959, 0, 961, 362, 592, 0, 962, 0, + 1053, 1055, 1057, 0, 1059, 1060, 363, 947, 330, 331, + 0, 217, 364, 365, 366, 367, 0, 0, 0, 0, + 0, 0, 1029, 956, 0, 1032, 0, 104, 104, 0, + 0, 0, 0, -619, 356, 0, 357, 358, 359, 360, + 368, 330, 331, 369, 1077, 1079, 1080, 1081, 0, 0, + 0, 0, 361, 212, 1083, 0, 370, 0, 0, 0, + 0, 104, 554, 328, 329, 0, 362, 559, 328, 329, + 1010, 1011, 0, 913, 915, 0, 0, 363, 0, 919, + 921, 0, 0, 364, 365, 366, 367, 212, 563, 328, + 329, 0, 1030, 0, 1033, 705, 705, 0, 0, 0, + -300, 0, 1073, -300, -300, 913, 915, 0, 919, 921, + 0, 368, 0, 0, 369, 330, 331, 217, 217, 0, + 330, 331, 0, 564, 328, 329, 0, 370, 0, 1046, + -300, -300, 1048, -300, 0, 0, 0, 0, 0, 104, + 0, 330, 331, 754, 328, 329, 494, 104, 104, 0, + 0, 104, 0, 494, 104, 104, 497, 498, 499, 345, + 104, 104, 0, 0, 1070, 0, 104, 104, 0, 1072, + 267, 1074, 0, 267, 0, 1075, 330, 331, 217, 217, + 104, 0, 0, 104, 356, 985, 357, 358, 359, 360, + 0, 0, 104, 104, 0, 1082, 330, 331, 0, 0, + 104, 1004, 361, 357, 358, 359, 360, 0, 985, 212, + 0, 104, 104, 759, 0, 357, 358, 359, 360, 760, + 759, 0, 357, 358, 359, 360, 0, 363, 0, 415, + 416, 760, 0, 364, 365, 366, 367, 0, 760, 0, + 0, 0, 418, 217, 217, 217, 217, 0, 217, 217, + 0, 0, 0, 0, 247, 0, 363, 248, 249, 0, + 0, 368, 761, 363, 369, 0, 104, 0, 585, 955, + 425, 426, 427, 428, 429, 1025, 104, 104, 0, 595, + 0, 501, 0, 0, 104, 250, 0, 251, 0, 0, + 0, 607, 0, 820, 0, 0, 618, 623, 624, 625, + 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, + 636, 0, 638, 639, 640, 641, 642, 643, 644, 645, + 646, 647, 648, 649, 0, 0, 267, 0, 0, 0, + 0, 0, 0, 471, 0, 0, 671, 671, 0, 0, + 415, 416, 0, 0, 104, 0, 104, 0, 0, 104, + 0, 267, 0, 418, 217, 759, 0, 357, 358, 359, + 360, 73, 0, 73, 121, 121, 671, 0, 267, 0, + 671, 671, 121, 760, 0, 0, 0, 267, 422, 423, + 424, 425, 426, 427, 428, 429, 716, 104, 0, 719, + 720, 874, 0, 0, 721, 0, 0, 724, 363, 727, + 0, 309, 293, 0, 356, 0, 357, 358, 359, 360, + 0, 73, 0, 0, 0, 121, 0, 0, 0, 671, + 418, 356, 361, 357, 358, 359, 360, 0, 0, 724, + 0, 0, 309, 0, 0, 0, 0, 929, 0, 361, + 0, 121, 267, 0, 0, 0, 0, 363, 425, 426, + 427, 428, 429, 364, 365, 366, 367, 0, 0, 757, + 758, 0, 705, 0, 363, 0, 0, 0, 0, 0, + 364, 365, 366, 367, 0, 0, 0, 768, 0, 73, + 0, 368, 0, 0, 369, 0, 0, 0, 0, 0, + -619, 0, 0, 0, 0, 0, 786, 550, 368, 793, + 0, 369, 0, -619, -619, -619, -619, -619, -619, 0, + -619, 0, 0, 0, 0, 0, -619, -619, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -619, -619, 0, + -619, -619, -619, -619, -619, 0, 0, 0, 0, 0, + 0, 0, 74, 0, 74, 122, 122, 0, 471, 0, + 0, 0, 0, 122, 471, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 356, 0, 357, 358, 359, 360, + 73, 0, 217, 0, 0, 0, 0, 0, 0, 0, + -619, 0, 361, 0, 827, 0, 0, 768, 786, 0, + 0, 0, 74, 0, 0, -619, 122, 0, 580, 0, + 0, 0, 0, 0, 0, -619, 217, 363, -619, -619, + 0, 0, 0, 364, 365, 366, 367, 852, 0, 0, + 0, 0, 122, 0, 0, 0, 724, 309, -619, -619, + 0, 0, 0, 0, 276, -619, -619, -619, -619, 415, + 416, 368, 0, 0, 369, 0, 0, 0, 73, 0, + 0, 0, 418, 0, 0, 73, 73, 0, 0, 0, + 74, 0, 0, 73, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 356, 121, 357, 358, 359, 360, 424, + 425, 426, 427, 428, 429, 0, 0, 0, 901, 0, + 0, 361, 0, 671, 904, 0, 267, 0, 0, 671, + 671, 0, 0, 0, 724, 671, 671, 775, 73, 0, + 0, 0, 0, 73, 0, 0, 363, 0, 0, 0, + 0, 0, 364, 365, 366, 367, 0, 0, 217, 0, + 0, 671, 671, 73, 671, 671, 0, 0, 0, 0, + 0, 0, 0, 0, 945, 0, 0, 0, 293, 0, + 368, 74, 0, 369, 73, 0, 0, 0, 0, 73, + 121, 0, 73, 0, 0, 957, 958, 0, 0, 0, + 0, 0, 356, 0, 357, 358, 359, 360, 963, 964, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, + 361, 103, 128, 128, 980, 0, 0, 0, 0, 0, + 232, 0, 73, 73, 982, 983, 870, 0, 0, 0, + 0, 671, 0, 0, 0, 363, 0, 0, 0, 73, + 0, 364, 365, 366, 367, 0, 0, 0, 0, 74, + 73, 0, 0, 0, 671, 0, 74, 74, 73, 103, + 0, 0, 309, 318, 74, 0, 0, 0, 73, 368, + 0, 0, 369, 0, 0, 122, 0, 0, 0, 783, + 0, 357, 358, 359, 360, 0, 0, 0, 0, 318, + 403, 404, 405, 406, 407, 408, 409, 361, 411, 412, + 0, 73, 0, 0, 0, 0, 415, 416, 0, 74, + 73, 0, 0, 0, 74, 0, 0, 0, 0, 418, + 0, 0, 363, 0, 121, 0, 121, 103, 0, 365, + 366, 367, 0, 0, 74, 0, 73, 0, 0, 0, + 0, 800, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 267, 0, 0, 74, 368, 0, 0, 0, + 74, 122, 0, 74, 0, 0, 0, 0, 0, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, - 414, 0, 0, 0, 102, 415, 416, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 418, 0, - 0, 0, 0, 0, 0, 0, 0, 101, 0, 0, - 0, 0, 0, 0, 317, 101, 0, 0, 0, 419, + 414, 0, 0, 0, 0, 415, 416, 0, 0, 0, + 100, 121, 100, 127, 127, 127, 0, 0, 418, 0, + 0, 231, 0, 74, 74, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 103, 419, + 74, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 74, 0, 0, 0, 0, 0, 0, 0, 74, + 100, 0, 0, 0, 317, 0, 0, 0, 0, 74, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 317, -620, -620, -620, -620, 407, 408, 0, 0, -620, + -620, 0, 74, 0, 0, 0, 0, 415, 416, 0, + 0, 74, 0, 0, 0, 0, 103, 0, 0, 0, + 418, 0, 0, 103, 103, 122, 0, 122, 100, 0, + 0, 103, 0, 0, 0, 0, 0, 74, 0, 0, + 0, 0, 318, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 103, 0, 0, 0, + 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, + 73, 0, 122, 0, 0, 0, 0, 121, 73, 73, + 0, 103, 0, 0, 0, 73, 0, 0, 0, 0, + 0, 73, 73, 0, 0, 0, 0, 73, 73, 100, + 0, 0, 103, 0, 0, 0, 0, 103, 318, 0, + 622, 73, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 73, 73, 0, 0, 0, 0, 0, + 0, 73, 0, 0, 0, 0, 0, 83, 0, 83, + 74, 0, 73, 73, 0, 0, 0, 0, 228, 0, + 622, 622, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 103, 0, 121, + 0, 0, 0, 0, 121, 0, 0, 100, 103, 0, + 0, 0, 0, 0, 100, 100, 103, 83, 0, 0, + 0, 0, 100, 0, 0, 0, 103, 73, 0, 0, + 0, 0, 0, 317, 0, 0, 0, 73, 73, 0, + 0, 121, 0, 0, 0, 73, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, + 0, 0, 0, 0, 0, 0, 0, 100, 103, 0, + 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, + 0, 74, 318, 0, 318, 83, 0, 0, 122, 74, + 74, 0, 100, 0, 103, 0, 74, 0, 0, 0, + 0, 0, 74, 74, 0, 73, 0, 73, 74, 74, + 73, 0, 0, 100, 0, 0, 0, 0, 100, 317, + 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 74, 74, 0, 0, 0, 0, + 0, 0, 74, 0, 0, 0, 0, 0, 101, 318, + 101, 0, 0, 74, 74, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 83, 0, 100, 0, + 122, 0, 0, 0, 0, 122, 0, 0, 0, 100, + 0, 0, 0, 0, 0, 0, 0, 100, 101, 0, + 0, 0, 0, 0, 0, 0, 0, 100, 74, 0, + 0, 0, 0, 0, 0, 0, 0, 103, 74, 74, + 0, 0, 122, 0, 0, 0, 74, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 100, 0, 403, 404, 405, 406, 407, 408, 0, 100, + 411, 412, 0, 0, 83, 0, 0, 0, 415, 416, + 0, 83, 83, 317, 0, 317, 101, 0, 0, 83, + 0, 418, 0, 0, 0, 100, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 74, 0, 74, 0, + 0, 74, 0, 0, 420, 421, 422, 423, 424, 425, + 426, 427, 428, 429, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 83, 0, 0, 0, 0, 83, + 0, 0, 0, 0, 0, 0, 0, 0, 103, 0, + 317, 0, 0, 0, 0, 318, 103, 622, 0, 83, + 0, 0, 0, 622, 0, 0, 0, 0, 0, 622, + 622, 0, 0, 0, 0, 103, 103, 101, 0, 0, + 83, 0, 0, 0, 0, 83, 0, 0, 617, 103, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 103, 103, 0, 0, 0, 0, 0, 0, 103, + 0, 0, 0, 0, 0, 0, 0, 0, 100, 0, + 103, 103, 0, 0, 0, 0, 0, 0, 617, 617, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 83, 0, 128, 0, 0, + 0, 0, 128, 0, 0, 101, 83, 0, 0, 0, + 0, 0, 101, 101, 83, 0, 0, 0, 0, 0, + 101, 0, 0, 0, 83, 622, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 103, 103, 0, 0, 994, + 0, 0, 0, 103, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, + 0, 0, 0, 0, 0, 101, 83, 0, 0, 0, + 101, 0, 0, 0, 0, 0, 0, 0, 0, 100, + 0, 0, 0, 0, 0, 0, 317, 100, 0, 0, + 101, 0, 83, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 103, 0, 103, 100, 100, 103, 0, + 0, 101, 0, 0, 0, 0, 101, 0, 0, 101, + 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 100, 100, 0, 0, 0, 0, 0, 0, + 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 100, 100, 0, 0, 0, 0, 0, 0, 101, + 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 101, 0, 127, 0, + 0, 0, 0, 127, 0, 0, 0, 101, 0, 0, + 0, 0, 0, 0, 0, 101, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 101, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 83, 100, 100, 0, 0, + 993, 800, 0, 0, 100, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 101, 0, + 0, 0, 0, 0, 0, 0, 0, 101, 0, 403, + 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, + 414, 0, 0, 0, 0, 415, 416, 0, 0, 0, + 0, 0, 0, 101, 0, 0, 0, 0, 418, 0, + 0, 0, 0, 0, 100, 0, 100, 0, 0, 100, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 419, 0, 420, 421, 422, 423, 424, 425, 426, 427, 428, - 429, 0, 0, 0, 101, 101, 0, 0, 0, 0, - 0, 0, -620, -620, -620, -620, 407, 408, 101, -596, - -620, -620, 0, 0, 0, 0, 0, 0, 415, 416, - 101, 101, -596, -596, -596, 0, -596, -596, 101, -596, - 0, 418, 0, 0, 0, -596, 0, 0, 0, 101, - 101, 0, 0, 0, 0, 0, -596, -596, 0, -596, - -596, -596, -596, -596, 420, 421, 422, 423, 424, 425, - 426, 427, 428, 429, 0, 0, 127, 102, 0, 0, - 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -596, -596, -596, -596, -596, -596, -596, -596, -596, - -596, -596, -596, 0, 0, 0, 0, -596, -596, -596, - 0, 805, -596, 0, 101, 101, 0, 0, 993, 0, - -596, 0, 101, 0, -596, 0, 0, 0, 0, 0, - 0, 0, 0, 0, -596, 0, 0, -596, -596, 0, - -107, -596, 0, -596, -596, -596, -596, -596, -596, -596, - -596, -596, -596, 0, 0, 0, 0, -596, -596, -596, - 0, -596, 0, 0, -596, -596, -596, -596, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 101, 0, 101, 0, 0, 101, 102, 0, - 0, 0, 0, 0, 0, 0, 102, 102, 0, 0, - 0, 650, 651, 102, 0, 652, 0, 0, 0, 102, - 102, 0, 0, 0, 0, 102, 102, 0, 0, 0, - 174, 175, 176, 177, 178, 179, 180, 181, 0, 102, - 182, 183, 0, 0, 0, 0, 184, 185, 186, 187, - 0, 102, 102, 0, 0, 0, 0, 0, 0, 102, - 188, 189, 190, 0, 0, 0, 0, 0, 0, 0, - 102, 102, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 191, 192, 193, 194, 195, 196, - 197, 198, 199, 200, 0, 201, 202, 403, 404, 405, - 406, 407, 408, 203, 276, 411, 412, 0, 0, 0, - 0, 0, 0, 415, 416, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 102, 418, 0, 0, 0, - 0, 0, 0, 0, 0, 102, 102, 0, 0, 0, - 0, 0, 0, 102, 0, 0, 0, 0, 0, 420, - 421, 422, 423, 424, 425, 426, 427, 428, 429, 0, - 0, 0, 0, 0, 0, -619, 4, 0, 5, 6, - 7, 8, 9, 10, 11, 12, 13, 14, 0, 0, - 0, 0, 0, 0, 15, 0, 16, 17, 18, 19, - 0, 0, 0, 0, 0, 20, 21, 22, 23, 24, - 25, 26, 0, 102, 27, 102, 0, 0, 102, 0, - 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, - 38, 39, 0, 40, 41, 42, 0, 0, 43, 0, - 0, 44, 45, 0, 46, 47, 48, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, - 50, 0, 0, 0, 0, 0, 51, 0, 0, 52, - 53, 0, 54, 55, 0, 56, 0, 0, 0, 57, - 0, 58, 59, 60, 0, 61, 62, 63, -294, 64, - -619, 0, 0, -619, -619, 0, 0, 0, 0, 0, - 0, -294, -294, -294, -294, -294, -294, 0, -294, 65, - 66, 67, 0, 0, 0, -294, -294, -294, 0, 0, - 0, -619, 0, -619, 0, -294, -294, 0, -294, -294, - -294, -294, -294, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, -294, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, - -294, -294, 0, 0, 0, 0, -294, -294, -294, 0, - 0, -294, 0, 0, 0, 0, 0, -294, 0, -294, - 0, 0, 0, -294, 0, 0, 0, 0, 0, 0, - 0, -294, 0, -294, 0, 0, -294, -294, 0, 0, - -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, - -294, -294, 0, 0, -415, 0, 0, -294, -294, -294, - -294, 0, 0, -294, -294, -294, -294, -415, -415, -415, - -415, -415, -415, 0, -415, 0, 0, 0, 0, 0, - -415, -415, -415, 0, 0, 0, 0, 0, 0, 0, - 0, -415, -415, 0, -415, -415, -415, -415, -415, 0, + 429, 0, 0, 0, 0, 0, 0, 0, 0, -277, + 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, + 0, 0, 0, 0, 83, 617, 0, 0, 0, 0, + 0, 617, 0, 0, 0, 0, 0, 617, 617, 0, + 0, -596, 0, 83, 83, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -596, -596, -596, 83, -596, -596, + 0, -596, 0, 0, 0, 0, 0, -596, 0, 83, + 83, 0, 0, 0, 0, 0, 0, 83, -596, -596, + 0, -596, -596, -596, -596, -596, 101, 0, 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, -415, -415, -415, -415, - -415, -415, -415, -415, -415, -415, -415, -415, 0, 0, - 0, 0, -415, -415, -415, 0, 0, -415, 0, 0, - 0, 0, 0, -415, 0, -415, 0, 0, 0, -415, - 0, 0, 0, 0, 0, 0, 0, 0, 0, -415, - 0, 0, -415, -415, 0, 0, -415, 0, -415, -415, - -415, -415, -415, -415, -415, -415, -415, -415, 0, 0, - -481, 0, -415, -415, -415, -415, -415, 0, 276, -415, - -415, -415, -415, -481, -481, -481, -481, -481, -481, 0, - -481, 0, 0, 0, 0, 0, 0, -481, -481, 0, - 0, 0, 0, 0, 0, 0, 0, -481, -481, 0, - -481, -481, -481, -481, -481, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 495, 0, 0, + 0, 0, 0, -596, -596, -596, -596, -596, -596, -596, + -596, -596, -596, -596, -596, 0, 0, 0, 0, -596, + -596, -596, 0, 805, -596, 0, 0, 0, 0, 0, + 0, 0, -596, 617, 0, 0, -596, 0, 0, 0, + 0, 0, 0, 83, 83, 0, -596, 991, 0, -596, + -596, 83, -107, -596, 0, -596, -596, -596, -596, -596, + -596, -596, -596, -596, -596, 0, 0, 0, 0, -596, + -596, -596, 0, -99, 0, 0, -596, -596, -596, -596, + 0, 0, 0, 0, 0, 0, 0, 101, 0, 0, + 0, 0, 0, 0, 0, 101, 101, 0, 0, 0, + 650, 651, 101, 0, 652, 0, 0, 0, 101, 101, + 0, 83, 0, 83, 101, 101, 83, 0, 0, 174, + 175, 176, 177, 178, 179, 180, 181, 0, 101, 182, + 183, 0, 0, 0, 0, 184, 185, 186, 187, 0, + 101, 101, 0, 0, 0, 0, 0, 0, 101, 188, + 189, 190, 0, 0, 0, 0, 0, 0, 0, 101, + 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 191, 192, 193, 194, 195, 196, 197, + 198, 199, 200, 0, 201, 202, 0, 0, 0, 0, + 0, 0, 203, 276, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, -481, -481, -481, -481, -481, -481, -481, -481, - -481, -481, -481, -481, 0, 0, 0, 0, -481, -481, - -481, 0, -481, -481, 0, 0, 0, 0, 0, -481, - 0, -481, 0, 0, 0, -481, 0, 0, 0, 0, - 0, 0, 0, 0, 0, -481, 0, 0, -481, -481, - 0, -481, -481, 0, -481, -481, -481, -481, -481, -481, - -481, -481, -481, -481, 0, 0, -619, 0, 0, -481, - -481, -481, -481, 0, 0, -481, -481, -481, -481, -619, - -619, -619, -619, -619, -619, 0, -619, 0, 0, 0, - 0, 0, -619, -619, -619, 0, 0, 0, 0, 0, - 0, 0, 0, -619, -619, 0, -619, -619, -619, -619, - -619, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 101, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 101, 101, 0, 0, 0, 0, + 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -619, -619, - -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, - 0, 0, 0, 0, -619, -619, -619, 0, 0, -619, - 0, 0, 0, 0, 0, -619, 0, -619, 0, 0, - 0, -619, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -619, 0, 0, -619, -619, 0, 0, -619, 0, - -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, - 0, 0, -619, 0, -619, -619, -619, -619, -619, 0, - 276, -619, -619, -619, -619, -619, -619, -619, -619, -619, - -619, 0, -619, 0, 0, 0, 0, 0, 0, -619, - -619, 0, 0, 0, 0, 0, 0, 0, 0, -619, - -619, 0, -619, -619, -619, -619, -619, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, -619, -619, -619, -619, -619, -619, - -619, -619, -619, -619, -619, -619, 0, 0, 0, 0, - -619, -619, -619, 0, 0, -619, 0, 0, 0, 0, - 0, -619, 0, -619, 0, 0, 0, -619, 0, 0, - 0, 0, 0, 0, 0, 0, 0, -619, 0, 0, - -619, -619, 0, 0, -619, 0, -619, -619, -619, -619, - -619, -619, -619, -619, -619, -619, 0, 0, -303, 0, - 0, -619, -619, -619, -619, 0, 276, -619, -619, -619, - -619, -303, -303, -303, 0, -303, -303, 0, -303, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, -303, -303, 0, -303, -303, - -303, -303, -303, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, - -303, -303, 0, 0, 0, 0, -303, -303, -303, 0, - 806, -303, 0, 0, 0, 0, 0, 0, 0, -303, - 0, 0, 0, -303, 0, 0, 0, 0, 0, 0, - 0, 0, 0, -303, 0, 0, -303, -303, 0, -109, - -303, 0, -303, -303, -303, -303, -303, -303, -303, -303, - -303, -303, 0, 0, -303, 0, 0, -303, -303, 0, - -101, 0, 0, -303, -303, -303, -303, -303, -303, -303, - 0, -303, -303, 0, -303, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -303, -303, 0, -303, -303, -303, -303, -303, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, -303, -303, -303, -303, - -303, -303, -303, -303, -303, -303, -303, -303, 0, 0, - 0, 0, -303, -303, -303, 0, 806, -303, 0, 0, - 0, 0, 0, 0, 0, -303, 0, 0, 0, -303, - 0, 0, 0, 0, 0, 0, 0, 0, 0, -303, - 0, 0, -303, -303, 0, -109, -303, 0, -303, -303, - -303, -303, -303, -303, -303, -303, -303, -303, 0, 0, - 0, 0, 0, -303, -303, 0, -303, 0, 0, -303, - -303, -303, -303, 295, 0, 5, 6, 7, 8, 9, - 10, 11, 12, 13, 14, -619, -619, -619, 0, 0, - -619, 15, 0, 16, 17, 18, 19, 0, 0, 0, - 0, 0, 20, 21, 22, 23, 24, 25, 26, 0, - 0, 27, 0, 0, 0, 0, 0, 28, 0, 30, - 31, 32, 33, 34, 35, 36, 37, 38, 39, 0, - 40, 41, 42, 0, 0, 43, 0, 0, 44, 45, - 0, 46, 47, 48, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 49, 50, 0, 0, - 0, 0, 0, 51, 0, 0, 52, 53, 0, 54, - 55, 0, 56, 0, 0, 0, 57, 0, 58, 59, - 60, 0, 61, 62, 63, 0, 64, -619, 0, 0, - -619, -619, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 65, 66, 67, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -619, 295, - -619, 5, 6, 7, 8, 9, 10, 11, 12, 13, - 14, 0, 0, -619, 0, -619, -619, 15, 0, 16, - 17, 18, 19, 0, 0, 0, 0, 0, 20, 21, - 22, 23, 24, 25, 26, 0, 0, 27, 0, 0, - 0, 0, 0, 28, 0, 30, 31, 32, 33, 34, - 35, 36, 37, 38, 39, 0, 40, 41, 42, 0, - 0, 43, 0, 0, 44, 45, 0, 46, 47, 48, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 49, 50, 0, 0, 0, 0, 0, 51, - 0, 0, 52, 53, 0, 54, 55, 0, 56, 0, - 0, 0, 57, 0, 58, 59, 60, 0, 61, 62, - 63, 0, 64, -619, 0, 0, -619, -619, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 65, 66, 67, 0, 0, 0, 0, 0, - 0, 0, 0, 0, -619, 295, -619, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 14, 0, 0, -619, - 0, 0, -619, 15, -619, 16, 17, 18, 19, 0, - 0, 0, 0, 0, 20, 21, 22, 23, 24, 25, - 26, 0, 0, 27, 0, 0, 0, 0, 0, 28, - 0, 30, 31, 32, 33, 34, 35, 36, 37, 38, - 39, 0, 40, 41, 42, 0, 0, 43, 0, 0, - 44, 45, 0, 46, 47, 48, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 49, 50, - 0, 0, 0, 0, 0, 51, 0, 0, 52, 53, - 0, 54, 55, 0, 56, 0, 0, 0, 57, 0, - 58, 59, 60, 0, 61, 62, 63, 0, 64, -619, - 0, 0, -619, -619, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 65, 66, - 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -619, 295, -619, 5, 6, 7, 8, 9, 10, 11, - 12, 13, 14, 0, 0, -619, 0, 0, -619, 15, - 0, 16, 17, 18, 19, 0, 0, 0, 0, 0, - 20, 21, 22, 23, 24, 25, 26, 0, 0, 27, - 0, 0, 0, 0, 0, 28, 0, 30, 31, 32, - 33, 34, 35, 36, 37, 38, 39, 0, 40, 41, - 42, 0, 0, 43, 0, 0, 44, 45, 0, 46, - 47, 48, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 49, 50, 0, 0, 0, 0, - 0, 51, 0, 0, 52, 53, 0, 54, 55, 0, - 56, 0, 0, 0, 57, 0, 58, 59, 60, 0, - 61, 62, 63, 0, 64, -619, 0, 0, -619, -619, - 4, 0, 5, 6, 7, 8, 9, 10, 11, 12, - 13, 14, 0, 0, 65, 66, 67, 0, 15, 0, - 16, 17, 18, 19, 0, 0, -619, 0, -619, 20, - 21, 22, 23, 24, 25, 26, 0, 0, 27, 0, - 0, 0, 0, 0, 28, 29, 30, 31, 32, 33, - 34, 35, 36, 37, 38, 39, 0, 40, 41, 42, - 0, 0, 43, 0, 0, 44, 45, 0, 46, 47, - 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 49, 50, 0, 0, 0, 0, 0, - 51, 0, 0, 52, 53, 0, 54, 55, 0, 56, - 0, 0, 0, 57, 0, 58, 59, 60, 0, 61, - 62, 63, 0, 64, -619, 0, 0, -619, -619, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 65, 66, 67, 0, 0, -619, 0, - 0, 0, 0, 0, 0, -619, 295, -619, 5, 6, - 7, 8, 9, 10, 11, 12, 13, 14, 0, -619, - -619, 0, 0, 0, 15, 0, 16, 17, 18, 19, - 0, 0, 0, 0, 0, 20, 21, 22, 23, 24, - 25, 26, 0, 0, 27, 0, 0, 0, 0, 0, - 28, 0, 30, 31, 32, 33, 34, 35, 36, 37, - 38, 39, 0, 40, 41, 42, 0, 0, 43, 0, - 0, 44, 45, 0, 46, 47, 48, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, - 50, 0, 0, 0, 0, 0, 51, 0, 0, 52, - 53, 0, 54, 55, 0, 56, 0, 0, 0, 57, - 0, 58, 59, 60, 0, 61, 62, 63, 0, 64, - -619, 0, 0, -619, -619, 295, 0, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 14, 0, 0, 65, - 66, 67, 0, 15, 0, 16, 17, 18, 19, 0, - 0, -619, 0, -619, 20, 21, 22, 23, 24, 25, - 26, 0, 0, 27, 0, 0, 0, 0, 0, 28, - 0, 30, 31, 32, 33, 34, 35, 36, 37, 38, - 39, 0, 40, 41, 42, 0, 0, 43, 0, 0, - 44, 45, 0, 46, 47, 48, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 49, 50, - 0, 0, 0, 0, 0, 51, 0, 0, 296, 53, - 0, 54, 55, 0, 56, 0, 0, 0, 57, 0, - 58, 59, 60, 0, 61, 62, 63, 0, 64, -619, - 0, 0, -619, -619, 295, 0, 5, 6, 7, 8, - 9, 10, 11, 12, 13, 14, 0, 0, 65, 66, - 67, 0, 15, 0, 16, 17, 18, 19, 0, -619, - -619, 0, -619, 20, 21, 22, 23, 24, 25, 26, - 0, 0, 27, 0, 0, 0, 0, 0, 28, 0, - 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, - 0, 40, 41, 42, 0, 0, 43, 0, 0, 44, - 45, 0, 46, 47, 48, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 49, 50, 0, - 0, 0, 0, 0, 51, 0, 0, 52, 53, 0, - 54, 55, 0, 56, 0, 0, 0, 57, 0, 58, - 59, 60, 0, 61, 62, 63, 0, 64, -619, 0, - 0, -619, -619, 295, 0, 5, 6, 7, 8, 9, - 10, 11, 12, 13, 14, 0, 0, 65, 66, 67, - 0, 15, 0, 16, 17, 18, 19, 0, -619, -619, - 0, -619, 20, 21, 22, 23, 24, 25, 26, 0, - 0, 27, 0, 0, 0, 0, 0, 28, 0, 30, - 31, 32, 33, 34, 35, 36, 37, 38, 39, 0, - 40, 41, 42, 0, 0, 43, 0, 0, 44, 45, - 0, 46, 47, 48, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 49, 50, 0, 0, - 0, 0, 0, 51, 0, 0, 52, 53, 0, 54, - 55, 0, 56, 0, 0, 0, 57, 0, 58, 59, - 60, 0, 61, 62, 63, 0, 64, -619, 0, 0, - -619, -619, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 65, 66, 67, 0, - 0, -619, 0, 0, 0, 0, 0, 0, -619, 295, - -619, 5, 6, 7, 8, 9, 10, 11, 12, 13, - 14, 0, 0, -619, 0, 0, 0, 15, 0, 16, - 17, 18, 19, 0, 0, 0, 0, 0, 20, 21, - 22, 23, 24, 25, 26, 0, 0, 27, 0, 0, - 0, 0, 0, 28, 0, 30, 31, 32, 33, 34, - 35, 36, 37, 38, 39, 0, 40, 41, 42, 0, - 0, 43, 0, 0, 44, 45, 0, 46, 47, 48, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 49, 50, 0, 0, 0, 0, 0, 51, - 0, 0, 52, 53, 0, 54, 55, 0, 56, 0, - 0, 0, 57, 0, 58, 59, 60, 0, 61, 62, - 63, 0, 64, -619, 0, 0, -619, -619, 0, 0, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 0, 0, 65, 66, 67, 0, 15, 0, 16, 17, - 18, 19, 0, 0, -619, 0, -619, 20, 21, 22, - 23, 24, 25, 26, 0, 0, 27, 0, 0, 0, - 0, 0, 28, 29, 30, 31, 32, 33, 34, 35, - 36, 37, 38, 39, 0, 40, 41, 42, 0, 0, - 43, 0, 0, 44, 45, 0, 46, 47, 48, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 49, 50, 0, 0, 0, 0, 0, 51, 0, - 0, 52, 53, 0, 54, 55, 0, 56, 0, 0, - 0, 57, 0, 58, 59, 60, 0, 61, 62, 63, - 0, 64, 247, 0, 0, 248, 249, 0, 0, 5, - 6, 7, 8, 9, 10, 11, 12, 13, 14, 0, - 0, 65, 66, 67, 0, 15, 0, 16, 17, 18, - 19, 0, 0, 250, 0, 251, 20, 21, 22, 23, - 24, 25, 26, 0, 0, 27, 0, 0, 0, 0, - 0, 28, 0, 30, 31, 32, 33, 34, 35, 36, - 37, 38, 39, 0, 40, 41, 42, 0, 0, 43, - 0, 0, 44, 45, 0, 46, 47, 48, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 49, 50, 0, 0, 0, 0, 0, 51, 0, 0, - 52, 53, 0, 54, 55, 0, 56, 0, 0, 0, - 57, 0, 58, 59, 60, 0, 61, 62, 63, 0, - 64, 247, 0, 0, 248, 249, 0, 0, 5, 6, + 0, 0, 0, 0, -619, 3, 0, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 0, 0, 0, - 65, 66, 67, 0, 15, 0, 16, 17, 18, 19, - 0, 0, 250, 0, 251, 20, 21, 22, 23, 24, - 25, 26, 0, 0, 27, 0, 0, 0, 0, 0, - 0, 0, 0, 31, 32, 33, 34, 35, 36, 37, - 38, 39, 0, 40, 41, 42, 0, 0, 43, 0, - 0, 44, 45, 0, 46, 47, 48, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, - 50, 0, 0, 0, 0, 0, 211, 0, 0, 119, - 53, 0, 54, 55, 0, 0, 0, 0, 0, 57, - 0, 58, 59, 60, 0, 61, 62, 63, 0, 64, - 247, 0, 0, 248, 249, 0, 0, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 0, 0, 0, 65, - 66, 67, 0, 15, 0, 108, 109, 18, 19, 0, - 0, 250, 0, 251, 110, 111, 112, 23, 24, 25, - 26, 0, 0, 113, 0, 0, 0, 0, 0, 0, - 0, 0, 31, 32, 33, 34, 35, 36, 37, 38, - 39, 0, 40, 41, 42, 0, 0, 43, 0, 0, - 44, 45, 0, 46, 47, 48, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 49, 50, - 0, 0, 0, 0, 0, 211, 0, 0, 119, 53, - 0, 54, 55, 0, 0, 0, 0, 0, 57, 0, - 58, 59, 60, 0, 61, 62, 63, 0, 64, 247, - 0, 0, 248, 249, 0, 0, 5, 6, 7, 8, - 9, 10, 11, 12, 13, 0, 0, 0, 65, 265, - 67, 0, 15, 0, 16, 17, 18, 19, 0, 0, - 250, 0, 251, 20, 21, 22, 23, 24, 25, 26, - 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, - 0, 31, 32, 33, 34, 35, 36, 37, 38, 39, - 0, 40, 41, 42, 0, 0, 43, 0, 0, 44, - 45, 0, 46, 47, 48, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 49, 50, 0, - 0, 0, 0, 0, 211, 0, 0, 119, 53, 0, - 54, 55, 0, 0, 0, 0, 0, 57, 0, 58, - 59, 60, 0, 61, 62, 63, 0, 64, 247, 0, - 0, 248, 249, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 65, 66, 67, + 0, 0, 0, 14, 0, 15, 16, 17, 18, 0, + 0, 0, 0, 0, 19, 20, 21, 22, 23, 24, + 25, 0, 101, 26, 101, 0, 0, 101, 0, 27, + 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, + 38, 0, 39, 40, 41, 0, 0, 42, 0, 0, + 43, 44, 0, 45, 46, 47, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 48, 49, + 0, 0, 0, 0, 0, 50, 0, 0, 51, 52, + 0, 53, 54, 0, 55, 0, 0, 0, 56, 0, + 57, 58, 59, 0, 60, 61, 62, -294, 63, -619, + 0, 0, -619, -619, 0, 0, 0, 0, 0, 0, + -294, -294, -294, -294, -294, -294, 0, -294, 64, 65, + 66, 0, 0, 0, -294, -294, -294, 0, 0, 0, + -619, 0, -619, 0, -294, -294, 0, -294, -294, -294, + -294, -294, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -294, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, -294, + -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, + -294, 0, 0, 0, 0, -294, -294, -294, 0, 0, + -294, 0, 0, 0, 0, 0, -294, 0, -294, 0, + 0, 0, -294, 0, 0, 0, 0, 0, 0, 0, + -294, 0, -294, 0, 0, -294, -294, 0, 0, -294, + -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, + -294, 0, 0, -415, 0, 0, -294, -294, -294, -294, + 0, 0, -294, -294, -294, -294, -415, -415, -415, -415, + -415, -415, 0, -415, 0, 0, 0, 0, 0, -415, + -415, -415, 0, 0, 0, 0, 0, 0, 0, 0, + -415, -415, 0, -415, -415, -415, -415, -415, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 251, 131, 132, 133, 134, 135, 136, 137, 138, - 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, - 149, 150, 151, 152, 153, 154, 0, 0, 0, 155, - 156, 157, 158, 159, 160, 161, 162, 163, 164, 0, - 0, 0, 0, 0, 165, 166, 167, 168, 169, 170, - 171, 172, 36, 37, 173, 39, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, - 175, 176, 177, 178, 179, 180, 181, 0, 0, 182, - 183, 0, 0, 0, 0, 184, 185, 186, 187, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 188, - 189, 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 191, 192, 193, 194, 195, 196, 197, - 198, 199, 200, 0, 201, 202, 0, 0, 0, 0, - 0, 0, 203, 204, -589, -589, -589, -589, -589, -589, - -589, -589, -589, 0, 0, 0, 0, 0, 0, 0, - -589, 0, -589, -589, -589, -589, 0, -589, 0, 0, - 0, -589, -589, -589, -589, -589, -589, -589, 0, 0, - -589, 0, 0, 0, 0, 0, 0, 0, 0, -589, - -589, -589, -589, -589, -589, -589, -589, -589, 0, -589, - -589, -589, 0, 0, -589, 0, 0, -589, -589, 0, - -589, -589, -589, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, -589, -589, 0, 0, 0, - 0, 0, -589, 0, 0, -589, -589, 0, -589, -589, - 0, -589, 0, -589, -589, -589, 0, -589, -589, -589, - 0, -589, -589, -589, 0, -589, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -415, -415, -415, -415, -415, + -415, -415, -415, -415, -415, -415, -415, 0, 0, 0, + 0, -415, -415, -415, 0, 0, -415, 0, 0, 0, + 0, 0, -415, 0, -415, 0, 0, 0, -415, 0, + 0, 0, 0, 0, 0, 0, 0, 0, -415, 0, + 0, -415, -415, 0, 0, -415, 0, -415, -415, -415, + -415, -415, -415, -415, -415, -415, -415, 0, 0, -481, + 0, -415, -415, -415, -415, -415, 0, 276, -415, -415, + -415, -415, -481, -481, -481, -481, -481, -481, 0, -481, + 0, 0, 0, 0, 0, 0, -481, -481, 0, 0, + 0, 0, 0, 0, 0, 0, -481, -481, 0, -481, + -481, -481, -481, -481, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 495, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, -589, -589, -589, 0, -589, - 0, 0, 0, 0, 0, -589, -590, -590, -590, -590, - -590, -590, -590, -590, -590, 0, 0, 0, 0, 0, - 0, 0, -590, 0, -590, -590, -590, -590, 0, -590, - 0, 0, 0, -590, -590, -590, -590, -590, -590, -590, - 0, 0, -590, 0, 0, 0, 0, 0, 0, 0, - 0, -590, -590, -590, -590, -590, -590, -590, -590, -590, - 0, -590, -590, -590, 0, 0, -590, 0, 0, -590, - -590, 0, -590, -590, -590, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, -590, -590, 0, - 0, 0, 0, 0, -590, 0, 0, -590, -590, 0, - -590, -590, 0, -590, 0, -590, -590, -590, 0, -590, - -590, -590, 0, -590, -590, -590, 0, -590, 0, 0, + 0, -481, -481, -481, -481, -481, -481, -481, -481, -481, + -481, -481, -481, 0, 0, 0, 0, -481, -481, -481, + 0, -481, -481, 0, 0, 0, 0, 0, -481, 0, + -481, 0, 0, 0, -481, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -481, 0, 0, -481, -481, 0, + -481, -481, 0, -481, -481, -481, -481, -481, -481, -481, + -481, -481, -481, 0, 0, -619, 0, 0, -481, -481, + -481, -481, 0, 0, -481, -481, -481, -481, -619, -619, + -619, -619, -619, -619, 0, -619, 0, 0, 0, 0, + 0, -619, -619, -619, 0, 0, 0, 0, 0, 0, + 0, 0, -619, -619, 0, -619, -619, -619, -619, -619, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -619, -619, -619, + -619, -619, -619, -619, -619, -619, -619, -619, -619, 0, + 0, 0, 0, -619, -619, -619, 0, 0, -619, 0, + 0, 0, 0, 0, -619, 0, -619, 0, 0, 0, + -619, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -619, 0, 0, -619, -619, 0, 0, -619, 0, -619, + -619, -619, -619, -619, -619, -619, -619, -619, -619, 0, + 0, -619, 0, -619, -619, -619, -619, -619, 0, 276, + -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, + 0, -619, 0, 0, 0, 0, 0, 0, -619, -619, + 0, 0, 0, 0, 0, 0, 0, 0, -619, -619, + 0, -619, -619, -619, -619, -619, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -619, -619, -619, -619, -619, -619, -619, + -619, -619, -619, -619, -619, 0, 0, 0, 0, -619, + -619, -619, 0, 0, -619, 0, 0, 0, 0, 0, + -619, 0, -619, 0, 0, 0, -619, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -619, 0, 0, -619, + -619, 0, 0, -619, 0, -619, -619, -619, -619, -619, + -619, -619, -619, -619, -619, 0, 0, -596, 0, 0, + -619, -619, -619, -619, 0, 276, -619, -619, -619, -619, + -596, -596, -596, 0, -596, -596, 0, -596, 0, 0, + 0, 0, 0, -596, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -596, -596, 0, -596, -596, -596, + -596, -596, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, -596, + -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, + -596, 0, 0, 0, 0, -596, -596, -596, 0, 805, + -596, 0, 0, 0, 0, 0, 0, 0, -596, 0, + 0, 0, -596, 0, 0, 0, 0, 0, 0, 0, + 0, 0, -596, 0, 0, -596, -596, 0, -107, -596, + 0, -596, -596, -596, -596, -596, -596, -596, -596, -596, + -596, 0, 0, -303, 0, -596, -596, -596, 0, -596, + 0, 0, -596, -596, -596, -596, -303, -303, -303, 0, + -303, -303, 0, -303, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -303, -303, 0, -303, -303, -303, -303, -303, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -303, -303, -303, -303, -303, + -303, -303, -303, -303, -303, -303, -303, 0, 0, 0, + 0, -303, -303, -303, 0, 806, -303, 0, 0, 0, + 0, 0, 0, 0, -303, 0, 0, 0, -303, 0, + 0, 0, 0, 0, 0, 0, 0, 0, -303, 0, + 0, -303, -303, 0, -109, -303, 0, -303, -303, -303, + -303, -303, -303, -303, -303, -303, -303, 0, 0, -303, + 0, 0, -303, -303, 0, -101, 0, 0, -303, -303, + -303, -303, -303, -303, -303, 0, -303, -303, 0, -303, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -303, -303, 0, -303, + -303, -303, -303, -303, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -303, -303, -303, -303, -303, -303, -303, -303, -303, + -303, -303, -303, 0, 0, 0, 0, -303, -303, -303, + 0, 806, -303, 0, 0, 0, 0, 0, 0, 0, + -303, 0, 0, 0, -303, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -303, 0, 0, -303, -303, 0, + -109, -303, 0, -303, -303, -303, -303, -303, -303, -303, + -303, -303, -303, 0, 0, 0, 0, 0, -303, -303, + 0, -303, 0, 0, -303, -303, -303, -303, 295, 0, + 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, + -619, -619, -619, 0, 0, -619, 14, 0, 15, 16, + 17, 18, 0, 0, 0, 0, 0, 19, 20, 21, + 22, 23, 24, 25, 0, 0, 26, 0, 0, 0, + 0, 0, 27, 0, 29, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 0, 39, 40, 41, 0, 0, + 42, 0, 0, 43, 44, 0, 45, 46, 47, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 48, 49, 0, 0, 0, 0, 0, 50, 0, + 0, 51, 52, 0, 53, 54, 0, 55, 0, 0, + 0, 56, 0, 57, 58, 59, 0, 60, 61, 62, + 0, 63, -619, 0, 0, -619, -619, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -619, 295, -619, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 0, 0, -619, 0, + -619, -619, 14, 0, 15, 16, 17, 18, 0, 0, + 0, 0, 0, 19, 20, 21, 22, 23, 24, 25, + 0, 0, 26, 0, 0, 0, 0, 0, 27, 0, + 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, + 0, 39, 40, 41, 0, 0, 42, 0, 0, 43, + 44, 0, 45, 46, 47, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 48, 49, 0, + 0, 0, 0, 0, 50, 0, 0, 51, 52, 0, + 53, 54, 0, 55, 0, 0, 0, 56, 0, 57, + 58, 59, 0, 60, 61, 62, 0, 63, -619, 0, + 0, -619, -619, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, + 0, 0, 0, 0, 0, 0, 0, 0, 0, -619, + 295, -619, 4, 5, 6, 7, 8, 9, 10, 11, + 12, 13, 0, 0, -619, 0, 0, -619, 14, -619, + 15, 16, 17, 18, 0, 0, 0, 0, 0, 19, + 20, 21, 22, 23, 24, 25, 0, 0, 26, 0, + 0, 0, 0, 0, 27, 0, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 0, 39, 40, 41, + 0, 0, 42, 0, 0, 43, 44, 0, 45, 46, + 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 48, 49, 0, 0, 0, 0, 0, + 50, 0, 0, 51, 52, 0, 53, 54, 0, 55, + 0, 0, 0, 56, 0, 57, 58, 59, 0, 60, + 61, 62, 0, 63, -619, 0, 0, -619, -619, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 64, 65, 66, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -619, 295, -619, 4, 5, + 6, 7, 8, 9, 10, 11, 12, 13, 0, 0, + -619, 0, 0, -619, 14, 0, 15, 16, 17, 18, + 0, 0, 0, 0, 0, 19, 20, 21, 22, 23, + 24, 25, 0, 0, 26, 0, 0, 0, 0, 0, + 27, 0, 29, 30, 31, 32, 33, 34, 35, 36, + 37, 38, 0, 39, 40, 41, 0, 0, 42, 0, + 0, 43, 44, 0, 45, 46, 47, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, + 49, 0, 0, 0, 0, 0, 50, 0, 0, 51, + 52, 0, 53, 54, 0, 55, 0, 0, 0, 56, + 0, 57, 58, 59, 0, 60, 61, 62, 0, 63, + -619, 0, 0, -619, -619, 3, 0, 4, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 0, 0, 64, + 65, 66, 0, 14, 0, 15, 16, 17, 18, 0, + 0, -619, 0, -619, 19, 20, 21, 22, 23, 24, + 25, 0, 0, 26, 0, 0, 0, 0, 0, 27, + 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, + 38, 0, 39, 40, 41, 0, 0, 42, 0, 0, + 43, 44, 0, 45, 46, 47, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 48, 49, + 0, 0, 0, 0, 0, 50, 0, 0, 51, 52, + 0, 53, 54, 0, 55, 0, 0, 0, 56, 0, + 57, 58, 59, 0, 60, 61, 62, 0, 63, -619, + 0, 0, -619, -619, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, + 66, 0, 0, -619, 0, 0, 0, 0, 0, 0, + -619, 295, -619, 4, 5, 6, 7, 8, 9, 10, + 11, 12, 13, 0, -619, -619, 0, 0, 0, 14, + 0, 15, 16, 17, 18, 0, 0, 0, 0, 0, + 19, 20, 21, 22, 23, 24, 25, 0, 0, 26, + 0, 0, 0, 0, 0, 27, 0, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 0, 39, 40, + 41, 0, 0, 42, 0, 0, 43, 44, 0, 45, + 46, 47, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 48, 49, 0, 0, 0, 0, + 0, 50, 0, 0, 51, 52, 0, 53, 54, 0, + 55, 0, 0, 0, 56, 0, 57, 58, 59, 0, + 60, 61, 62, 0, 63, -619, 0, 0, -619, -619, + 295, 0, 4, 5, 6, 7, 8, 9, 10, 11, + 12, 13, 0, 0, 64, 65, 66, 0, 14, 0, + 15, 16, 17, 18, 0, 0, -619, 0, -619, 19, + 20, 21, 22, 23, 24, 25, 0, 0, 26, 0, + 0, 0, 0, 0, 27, 0, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 0, 39, 40, 41, + 0, 0, 42, 0, 0, 43, 44, 0, 45, 46, + 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 48, 49, 0, 0, 0, 0, 0, + 50, 0, 0, 296, 52, 0, 53, 54, 0, 55, + 0, 0, 0, 56, 0, 57, 58, 59, 0, 60, + 61, 62, 0, 63, -619, 0, 0, -619, -619, 295, + 0, 4, 5, 6, 7, 8, 9, 10, 11, 12, + 13, 0, 0, 64, 65, 66, 0, 14, 0, 15, + 16, 17, 18, 0, -619, -619, 0, -619, 19, 20, + 21, 22, 23, 24, 25, 0, 0, 26, 0, 0, + 0, 0, 0, 27, 0, 29, 30, 31, 32, 33, + 34, 35, 36, 37, 38, 0, 39, 40, 41, 0, + 0, 42, 0, 0, 43, 44, 0, 45, 46, 47, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 48, 49, 0, 0, 0, 0, 0, 50, + 0, 0, 51, 52, 0, 53, 54, 0, 55, 0, + 0, 0, 56, 0, 57, 58, 59, 0, 60, 61, + 62, 0, 63, -619, 0, 0, -619, -619, 295, 0, + 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, + 0, 0, 64, 65, 66, 0, 14, 0, 15, 16, + 17, 18, 0, -619, -619, 0, -619, 19, 20, 21, + 22, 23, 24, 25, 0, 0, 26, 0, 0, 0, + 0, 0, 27, 0, 29, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 0, 39, 40, 41, 0, 0, + 42, 0, 0, 43, 44, 0, 45, 46, 47, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 48, 49, 0, 0, 0, 0, 0, 50, 0, + 0, 51, 52, 0, 53, 54, 0, 55, 0, 0, + 0, 56, 0, 57, 58, 59, 0, 60, 61, 62, + 0, 63, -619, 0, 0, -619, -619, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 64, 65, 66, 0, 0, -619, 0, 0, 0, + 0, 0, 0, -619, 295, -619, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 0, 0, -619, 0, + 0, 0, 14, 0, 15, 16, 17, 18, 0, 0, + 0, 0, 0, 19, 20, 21, 22, 23, 24, 25, + 0, 0, 26, 0, 0, 0, 0, 0, 27, 0, + 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, + 0, 39, 40, 41, 0, 0, 42, 0, 0, 43, + 44, 0, 45, 46, 47, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 48, 49, 0, + 0, 0, 0, 0, 50, 0, 0, 51, 52, 0, + 53, 54, 0, 55, 0, 0, 0, 56, 0, 57, + 58, 59, 0, 60, 61, 62, 0, 63, -619, 0, + 0, -619, -619, 0, 0, 4, 5, 6, 7, 8, + 9, 10, 11, 12, 13, 0, 0, 64, 65, 66, + 0, 14, 0, 15, 16, 17, 18, 0, 0, -619, + 0, -619, 19, 20, 21, 22, 23, 24, 25, 0, + 0, 26, 0, 0, 0, 0, 0, 27, 28, 29, + 30, 31, 32, 33, 34, 35, 36, 37, 38, 0, + 39, 40, 41, 0, 0, 42, 0, 0, 43, 44, + 0, 45, 46, 47, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 48, 49, 0, 0, + 0, 0, 0, 50, 0, 0, 51, 52, 0, 53, + 54, 0, 55, 0, 0, 0, 56, 0, 57, 58, + 59, 0, 60, 61, 62, 0, 63, 247, 0, 0, + 248, 249, 0, 0, 4, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 0, 0, 64, 65, 66, 0, + 14, 0, 15, 16, 17, 18, 0, 0, 250, 0, + 251, 19, 20, 21, 22, 23, 24, 25, 0, 0, + 26, 0, 0, 0, 0, 0, 27, 0, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 0, 39, + 40, 41, 0, 0, 42, 0, 0, 43, 44, 0, + 45, 46, 47, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 48, 49, 0, 0, 0, + 0, 0, 50, 0, 0, 51, 52, 0, 53, 54, + 0, 55, 0, 0, 0, 56, 0, 57, 58, 59, + 0, 60, 61, 62, 0, 63, 247, 0, 0, 248, + 249, 0, 0, 4, 5, 6, 7, 8, 9, 10, + 11, 12, 0, 0, 0, 64, 65, 66, 0, 14, + 0, 15, 16, 17, 18, 0, 0, 250, 0, 251, + 19, 20, 21, 22, 23, 24, 25, 0, 0, 26, + 0, 0, 0, 0, 0, 0, 0, 0, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 0, 39, 40, + 41, 0, 0, 42, 0, 0, 43, 44, 0, 45, + 46, 47, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 48, 49, 0, 0, 0, 0, + 0, 211, 0, 0, 119, 52, 0, 53, 54, 0, + 0, 0, 0, 0, 56, 0, 57, 58, 59, 0, + 60, 61, 62, 0, 63, 247, 0, 0, 248, 249, + 0, 0, 4, 5, 6, 7, 8, 9, 10, 11, + 12, 0, 0, 0, 64, 65, 66, 0, 14, 0, + 108, 109, 17, 18, 0, 0, 250, 0, 251, 110, + 111, 112, 22, 23, 24, 25, 0, 0, 113, 0, + 0, 0, 0, 0, 0, 0, 0, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 0, 39, 40, 41, + 0, 0, 42, 0, 0, 43, 44, 0, 45, 46, + 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 48, 49, 0, 0, 0, 0, 0, + 211, 0, 0, 119, 52, 0, 53, 54, 0, 0, + 0, 0, 0, 56, 0, 57, 58, 59, 0, 60, + 61, 62, 0, 63, 247, 0, 0, 248, 249, 0, + 0, 4, 5, 6, 7, 8, 9, 10, 11, 12, + 0, 0, 0, 64, 265, 66, 0, 14, 0, 15, + 16, 17, 18, 0, 0, 250, 0, 251, 19, 20, + 21, 22, 23, 24, 25, 0, 0, 26, 0, 0, + 0, 0, 0, 0, 0, 0, 30, 31, 32, 33, + 34, 35, 36, 37, 38, 0, 39, 40, 41, 0, + 0, 42, 0, 0, 43, 44, 0, 45, 46, 47, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 48, 49, 0, 0, 0, 0, 0, 211, + 0, 0, 119, 52, 0, 53, 54, 0, 0, 0, + 0, 0, 56, 0, 57, 58, 59, 0, 60, 61, + 62, 0, 63, 247, 0, 0, 248, 249, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 251, 131, 132, 133, + 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, + 154, 0, 0, 0, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 0, 0, 0, 0, 0, 165, + 166, 167, 168, 169, 170, 171, 172, 35, 36, 173, + 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 174, 175, 176, 177, 178, 179, + 180, 181, 0, 0, 182, 183, 0, 0, 0, 0, + 184, 185, 186, 187, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 188, 189, 190, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 191, 192, + 193, 194, 195, 196, 197, 198, 199, 200, 0, 201, + 202, 0, 0, 0, 0, 0, 0, 203, 204, -589, + -589, -589, -589, -589, -589, -589, -589, -589, 0, 0, + 0, 0, 0, 0, 0, -589, 0, -589, -589, -589, + -589, 0, -589, 0, 0, 0, -589, -589, -589, -589, + -589, -589, -589, 0, 0, -589, 0, 0, 0, 0, + 0, 0, 0, 0, -589, -589, -589, -589, -589, -589, + -589, -589, -589, 0, -589, -589, -589, 0, 0, -589, + 0, 0, -589, -589, 0, -589, -589, -589, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -589, -589, 0, 0, 0, 0, 0, -589, 0, 0, + -589, -589, 0, -589, -589, 0, -589, 0, -589, -589, + -589, 0, -589, -589, -589, 0, -589, -589, -589, 0, + -589, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -589, -589, -589, 0, -589, 0, 0, 0, 0, 0, + -589, -590, -590, -590, -590, -590, -590, -590, -590, -590, + 0, 0, 0, 0, 0, 0, 0, -590, 0, -590, + -590, -590, -590, 0, -590, 0, 0, 0, -590, -590, + -590, -590, -590, -590, -590, 0, 0, -590, 0, 0, + 0, 0, 0, 0, 0, 0, -590, -590, -590, -590, + -590, -590, -590, -590, -590, 0, -590, -590, -590, 0, + 0, -590, 0, 0, -590, -590, 0, -590, -590, -590, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, -590, -590, 0, 0, 0, 0, 0, -590, + 0, 0, -590, -590, 0, -590, -590, 0, -590, 0, + -590, -590, -590, 0, -590, -590, -590, 0, -590, -590, + -590, 0, -590, 0, 0, 0, 0, 0, 0, -592, + -592, -592, -592, -592, -592, -592, -592, -592, 0, 0, + 0, 0, -590, -590, -590, -592, -590, -592, -592, -592, + -592, 0, -590, 0, 0, 0, -592, -592, -592, -592, + -592, -592, -592, 0, 0, -592, 0, 0, 0, 0, 0, 0, 0, 0, -592, -592, -592, -592, -592, -592, - -592, -592, -592, 0, 0, 0, 0, -590, -590, -590, - -592, -590, -592, -592, -592, -592, 0, -590, 0, 0, - 0, -592, -592, -592, -592, -592, -592, -592, 0, 0, - -592, 0, 0, 0, 0, 0, 0, 0, 0, -592, - -592, -592, -592, -592, -592, -592, -592, -592, 0, -592, - -592, -592, 0, 0, -592, 0, 0, -592, -592, 0, - -592, -592, -592, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, -592, -592, 0, 0, 0, - 0, 0, -592, 837, 0, -592, -592, 0, -592, -592, - 0, -592, 0, -592, -592, -592, 0, -592, -592, -592, - 0, -592, -592, -592, 0, -592, 0, 0, 0, 0, - 0, 0, -107, -593, -593, -593, -593, -593, -593, -593, - -593, -593, 0, 0, 0, -592, -592, -592, 0, -593, - 0, -593, -593, -593, -593, -592, 0, 0, 0, 0, - -593, -593, -593, -593, -593, -593, -593, 0, 0, -593, - 0, 0, 0, 0, 0, 0, 0, 0, -593, -593, - -593, -593, -593, -593, -593, -593, -593, 0, -593, -593, - -593, 0, 0, -593, 0, 0, -593, -593, 0, -593, - -593, -593, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, -593, -593, 0, 0, 0, 0, - 0, -593, 838, 0, -593, -593, 0, -593, -593, 0, - -593, 0, -593, -593, -593, 0, -593, -593, -593, 0, - -593, -593, -593, 0, -593, 0, 0, 0, 0, 0, - 0, -109, -594, -594, -594, -594, -594, -594, -594, -594, - -594, 0, 0, 0, -593, -593, -593, 0, -594, 0, - -594, -594, -594, -594, -593, 0, 0, 0, 0, -594, - -594, -594, -594, -594, -594, -594, 0, 0, -594, 0, - 0, 0, 0, 0, 0, 0, 0, -594, -594, -594, - -594, -594, -594, -594, -594, -594, 0, -594, -594, -594, - 0, 0, -594, 0, 0, -594, -594, 0, -594, -594, - -594, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, -594, -594, 0, 0, 0, 0, 0, - -594, 0, 0, -594, -594, 0, -594, -594, 0, -594, - 0, -594, -594, -594, 0, -594, -594, -594, 0, -594, - -594, -594, 0, -594, 0, 0, 0, 0, 0, 0, - -595, -595, -595, -595, -595, -595, -595, -595, -595, 0, - 0, 0, 0, -594, -594, -594, -595, 0, -595, -595, - -595, -595, 0, -594, 0, 0, 0, -595, -595, -595, - -595, -595, -595, -595, 0, 0, -595, 0, 0, 0, + -592, -592, -592, 0, -592, -592, -592, 0, 0, -592, + 0, 0, -592, -592, 0, -592, -592, -592, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -592, -592, 0, 0, 0, 0, 0, -592, 837, 0, + -592, -592, 0, -592, -592, 0, -592, 0, -592, -592, + -592, 0, -592, -592, -592, 0, -592, -592, -592, 0, + -592, 0, 0, 0, 0, 0, 0, -107, -593, -593, + -593, -593, -593, -593, -593, -593, -593, 0, 0, 0, + -592, -592, -592, 0, -593, 0, -593, -593, -593, -593, + -592, 0, 0, 0, 0, -593, -593, -593, -593, -593, + -593, -593, 0, 0, -593, 0, 0, 0, 0, 0, + 0, 0, 0, -593, -593, -593, -593, -593, -593, -593, + -593, -593, 0, -593, -593, -593, 0, 0, -593, 0, + 0, -593, -593, 0, -593, -593, -593, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, -593, + -593, 0, 0, 0, 0, 0, -593, 838, 0, -593, + -593, 0, -593, -593, 0, -593, 0, -593, -593, -593, + 0, -593, -593, -593, 0, -593, -593, -593, 0, -593, + 0, 0, 0, 0, 0, 0, -109, -594, -594, -594, + -594, -594, -594, -594, -594, -594, 0, 0, 0, -593, + -593, -593, 0, -594, 0, -594, -594, -594, -594, -593, + 0, 0, 0, 0, -594, -594, -594, -594, -594, -594, + -594, 0, 0, -594, 0, 0, 0, 0, 0, 0, + 0, 0, -594, -594, -594, -594, -594, -594, -594, -594, + -594, 0, -594, -594, -594, 0, 0, -594, 0, 0, + -594, -594, 0, -594, -594, -594, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, -594, -594, + 0, 0, 0, 0, 0, -594, 0, 0, -594, -594, + 0, -594, -594, 0, -594, 0, -594, -594, -594, 0, + -594, -594, -594, 0, -594, -594, -594, 0, -594, 0, 0, 0, 0, 0, 0, -595, -595, -595, -595, -595, - -595, -595, -595, -595, 0, -595, -595, -595, 0, 0, - -595, 0, 0, -595, -595, 0, -595, -595, -595, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -595, -595, 0, 0, 0, 0, 0, -595, 0, - 0, -595, -595, 0, -595, -595, 0, -595, 0, -595, - -595, -595, 0, -595, -595, -595, 0, -595, -595, -595, + -595, -595, -595, -595, 0, 0, 0, 0, -594, -594, + -594, -595, 0, -595, -595, -595, -595, 0, -594, 0, + 0, 0, -595, -595, -595, -595, -595, -595, -595, 0, 0, -595, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -595, -595, -595, -595, -595, -595, -595, -595, -595, 0, + -595, -595, -595, 0, 0, -595, 0, 0, -595, -595, 0, -595, -595, -595, 0, 0, 0, 0, 0, 0, - 0, -595, 131, 132, 133, 134, 135, 136, 137, 138, - 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, - 149, 150, 151, 152, 153, 154, 0, 0, 0, 155, - 156, 157, 233, 234, 235, 236, 162, 163, 164, 0, - 0, 0, 0, 0, 165, 166, 167, 237, 238, 239, - 240, 172, 320, 321, 241, 322, 0, 0, 0, 0, - 0, 0, 323, 0, 0, 0, 0, 0, 0, 174, - 175, 176, 177, 178, 179, 180, 181, 0, 0, 182, - 183, 0, 0, 0, 0, 184, 185, 186, 187, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 188, - 189, 190, 0, 0, 0, 0, 324, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -595, -595, 0, 0, + 0, 0, 0, -595, 0, 0, -595, -595, 0, -595, + -595, 0, -595, 0, -595, -595, -595, 0, -595, -595, + -595, 0, -595, -595, -595, 0, -595, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -595, -595, -595, 0, + 0, 0, 0, 0, 0, 0, -595, 131, 132, 133, + 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, + 154, 0, 0, 0, 155, 156, 157, 233, 234, 235, + 236, 162, 163, 164, 0, 0, 0, 0, 0, 165, + 166, 167, 237, 238, 239, 240, 172, 320, 321, 241, + 322, 0, 0, 0, 0, 0, 0, 323, 0, 0, + 0, 0, 0, 0, 174, 175, 176, 177, 178, 179, + 180, 181, 0, 0, 182, 183, 0, 0, 0, 0, + 184, 185, 186, 187, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 188, 189, 190, 0, 0, 0, + 0, 324, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 191, 192, + 193, 194, 195, 196, 197, 198, 199, 200, 0, 201, + 202, 0, 0, 0, 0, 0, 0, 203, 131, 132, + 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, + 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 0, 0, 0, 155, 156, 157, 233, 234, + 235, 236, 162, 163, 164, 0, 0, 0, 0, 0, + 165, 166, 167, 237, 238, 239, 240, 172, 320, 321, + 241, 322, 0, 0, 0, 0, 0, 0, 323, 0, + 0, 0, 0, 0, 0, 174, 175, 176, 177, 178, + 179, 180, 181, 0, 0, 182, 183, 0, 0, 0, + 0, 184, 185, 186, 187, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 188, 189, 190, 0, 0, + 0, 0, 486, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, + 192, 193, 194, 195, 196, 197, 198, 199, 200, 0, + 201, 202, 0, 0, 0, 0, 0, 0, 203, 131, + 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, + 152, 153, 154, 0, 0, 0, 155, 156, 157, 233, + 234, 235, 236, 162, 163, 164, 0, 0, 0, 0, + 0, 165, 166, 167, 237, 238, 239, 240, 172, 0, + 0, 241, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 174, 175, 176, 177, + 178, 179, 180, 181, 0, 0, 182, 183, 0, 0, + 0, 0, 184, 185, 186, 187, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 188, 189, 190, 0, + 0, 0, 242, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 0, 201, 202, 0, 0, 0, 0, 0, 0, 203, + 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, + 151, 152, 153, 154, 0, 0, 0, 155, 156, 157, + 233, 234, 235, 236, 162, 163, 164, 0, 0, 0, + 0, 0, 165, 166, 167, 237, 238, 239, 240, 172, + 0, 0, 241, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 174, 175, 176, + 177, 178, 179, 180, 181, 0, 0, 182, 183, 0, + 0, 0, 0, 184, 185, 186, 187, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 188, 189, 190, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 191, 192, 193, 194, 195, 196, 197, 198, 199, + 200, 0, 201, 202, 0, 0, 0, 0, 0, 0, + 203, 4, 5, 6, 7, 8, 9, 10, 11, 12, + 0, 0, 0, 0, 0, 0, 0, 14, 0, 108, + 109, 17, 18, 0, 0, 0, 0, 0, 110, 111, + 112, 22, 23, 24, 25, 0, 0, 113, 0, 0, + 0, 0, 0, 0, 0, 0, 30, 31, 32, 33, + 34, 35, 36, 37, 38, 0, 39, 40, 41, 0, + 0, 42, 0, 0, 43, 44, 0, 116, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, + 0, 0, 119, 52, 0, 53, 54, 0, 0, 0, + 0, 0, 56, 0, 57, 58, 59, 0, 60, 61, + 62, 0, 63, 0, 0, 4, 5, 6, 7, 8, + 9, 10, 11, 12, 0, 0, 0, 0, 0, 0, + 0, 14, 120, 108, 109, 17, 18, 0, 0, 0, + 314, 0, 110, 111, 112, 22, 23, 24, 25, 0, + 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, + 30, 31, 32, 33, 34, 35, 36, 37, 38, 0, + 39, 40, 41, 0, 0, 42, 0, 0, 43, 44, + 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 313, 0, 0, 119, 52, 0, 53, + 54, 0, 0, 0, 0, 0, 56, 0, 57, 58, + 59, 0, 60, 61, 62, 0, 63, 0, 0, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 0, + 0, 0, 0, 0, 0, 14, 120, 15, 16, 17, + 18, 0, 0, 0, 611, 0, 19, 20, 21, 22, + 23, 24, 25, 0, 0, 26, 0, 0, 0, 0, + 0, 27, 28, 29, 30, 31, 32, 33, 34, 35, + 36, 37, 38, 0, 39, 40, 41, 0, 0, 42, + 0, 0, 43, 44, 0, 45, 46, 47, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 48, 49, 0, 0, 0, 0, 0, 50, 0, 0, + 51, 52, 0, 53, 54, 0, 55, 0, 0, 0, + 56, 0, 57, 58, 59, 0, 60, 61, 62, 0, + 63, 0, 0, 0, 0, 0, 0, 4, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 0, 0, 0, + 64, 65, 66, 14, 0, 15, 16, 17, 18, 0, + 0, 0, 0, 0, 19, 20, 21, 22, 23, 24, + 25, 0, 0, 26, 0, 0, 0, 0, 0, 27, + 0, 29, 30, 31, 32, 33, 34, 35, 36, 37, + 38, 0, 39, 40, 41, 0, 0, 42, 0, 0, + 43, 44, 0, 45, 46, 47, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 48, 49, + 0, 0, 0, 0, 0, 50, 0, 0, 51, 52, + 0, 53, 54, 0, 55, 0, 0, 0, 56, 0, + 57, 58, 59, 0, 60, 61, 62, 0, 63, 0, + 0, 0, 0, 0, 0, 4, 5, 6, 7, 8, + 9, 10, 11, 12, 0, 0, 0, 0, 64, 65, + 66, 14, 0, 15, 16, 17, 18, 0, 0, 0, + 0, 0, 19, 20, 21, 22, 23, 24, 25, 0, + 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, + 30, 31, 32, 260, 34, 35, 36, 37, 38, 0, + 39, 40, 41, 0, 0, 42, 0, 0, 43, 44, + 0, 261, 46, 47, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 48, 49, 0, 0, + 0, 0, 0, 211, 0, 0, 119, 52, 0, 53, + 54, 0, 262, 0, 263, 264, 56, 0, 57, 58, + 59, 0, 60, 61, 62, 0, 63, 0, 0, 0, + 0, 0, 0, 4, 5, 6, 7, 8, 9, 10, + 11, 12, 0, 0, 0, 0, 64, 265, 66, 14, + 0, 15, 16, 17, 18, 0, 0, 0, 0, 0, + 19, 20, 21, 22, 23, 24, 25, 0, 0, 113, + 0, 0, 0, 0, 0, 0, 0, 0, 30, 31, + 32, 260, 34, 35, 36, 37, 38, 0, 39, 40, + 41, 0, 0, 42, 0, 0, 43, 44, 0, 261, + 46, 47, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 48, 508, 0, 0, 0, 0, + 0, 211, 0, 0, 119, 52, 0, 53, 54, 0, + 262, 0, 263, 264, 56, 0, 57, 58, 59, 0, + 60, 61, 62, 0, 63, 0, 0, 0, 0, 0, + 0, 4, 5, 6, 7, 8, 9, 10, 11, 12, + 0, 0, 0, 0, 64, 265, 66, 14, 0, 108, + 109, 17, 18, 0, 0, 0, 0, 0, 110, 111, + 112, 22, 23, 24, 25, 0, 0, 113, 0, 0, + 0, 0, 0, 0, 0, 0, 30, 31, 32, 260, + 34, 35, 36, 37, 38, 0, 39, 40, 41, 0, + 0, 42, 0, 0, 43, 44, 0, 261, 46, 47, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 48, 49, 0, 0, 0, 0, 0, 211, + 0, 0, 119, 52, 0, 53, 54, 0, 723, 0, + 263, 264, 56, 0, 57, 58, 59, 0, 60, 61, + 62, 0, 63, 0, 0, 0, 0, 0, 0, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 0, 0, + 0, 0, 64, 265, 66, 14, 0, 108, 109, 17, + 18, 0, 0, 0, 0, 0, 110, 111, 112, 22, + 23, 24, 25, 0, 0, 113, 0, 0, 0, 0, + 0, 0, 0, 0, 30, 31, 32, 260, 34, 35, + 36, 37, 38, 0, 39, 40, 41, 0, 0, 42, + 0, 0, 43, 44, 0, 261, 46, 47, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 48, 854, 0, 0, 0, 0, 0, 211, 0, 0, + 119, 52, 0, 53, 54, 0, 723, 0, 263, 264, + 56, 0, 57, 58, 59, 0, 60, 61, 62, 0, + 63, 0, 0, 0, 0, 0, 0, 4, 5, 6, + 7, 8, 9, 10, 11, 12, 0, 0, 0, 0, + 64, 265, 66, 14, 0, 108, 109, 17, 18, 0, + 0, 0, 0, 0, 110, 111, 112, 22, 23, 24, + 25, 0, 0, 113, 0, 0, 0, 0, 0, 0, + 0, 0, 30, 31, 32, 260, 34, 35, 36, 37, + 38, 0, 39, 40, 41, 0, 0, 42, 0, 0, + 43, 44, 0, 261, 46, 47, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 48, 49, + 0, 0, 0, 0, 0, 211, 0, 0, 119, 52, + 0, 53, 54, 0, 262, 0, 263, 0, 56, 0, + 57, 58, 59, 0, 60, 61, 62, 0, 63, 0, + 0, 0, 0, 0, 0, 4, 5, 6, 7, 8, + 9, 10, 11, 12, 0, 0, 0, 0, 64, 265, + 66, 14, 0, 108, 109, 17, 18, 0, 0, 0, + 0, 0, 110, 111, 112, 22, 23, 24, 25, 0, + 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, + 30, 31, 32, 260, 34, 35, 36, 37, 38, 0, + 39, 40, 41, 0, 0, 42, 0, 0, 43, 44, + 0, 261, 46, 47, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 48, 49, 0, 0, + 0, 0, 0, 211, 0, 0, 119, 52, 0, 53, + 54, 0, 0, 0, 263, 264, 56, 0, 57, 58, + 59, 0, 60, 61, 62, 0, 63, 0, 0, 0, + 0, 0, 0, 4, 5, 6, 7, 8, 9, 10, + 11, 12, 0, 0, 0, 0, 64, 265, 66, 14, + 0, 108, 109, 17, 18, 0, 0, 0, 0, 0, + 110, 111, 112, 22, 23, 24, 25, 0, 0, 113, + 0, 0, 0, 0, 0, 0, 0, 0, 30, 31, + 32, 260, 34, 35, 36, 37, 38, 0, 39, 40, + 41, 0, 0, 42, 0, 0, 43, 44, 0, 261, + 46, 47, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 48, 49, 0, 0, 0, 0, + 0, 211, 0, 0, 119, 52, 0, 53, 54, 0, + 723, 0, 263, 0, 56, 0, 57, 58, 59, 0, + 60, 61, 62, 0, 63, 0, 0, 0, 0, 0, + 0, 4, 5, 6, 7, 8, 9, 10, 11, 12, + 0, 0, 0, 0, 64, 265, 66, 14, 0, 108, + 109, 17, 18, 0, 0, 0, 0, 0, 110, 111, + 112, 22, 23, 24, 25, 0, 0, 113, 0, 0, + 0, 0, 0, 0, 0, 0, 30, 31, 32, 260, + 34, 35, 36, 37, 38, 0, 39, 40, 41, 0, + 0, 42, 0, 0, 43, 44, 0, 261, 46, 47, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 48, 49, 0, 0, 0, 0, 0, 211, + 0, 0, 119, 52, 0, 53, 54, 0, 0, 0, + 263, 0, 56, 0, 57, 58, 59, 0, 60, 61, + 62, 0, 63, 0, 0, 0, 0, 0, 0, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 0, 0, + 0, 0, 64, 265, 66, 14, 0, 15, 16, 17, + 18, 0, 0, 0, 0, 0, 19, 20, 21, 22, + 23, 24, 25, 0, 0, 113, 0, 0, 0, 0, + 0, 0, 0, 0, 30, 31, 32, 33, 34, 35, + 36, 37, 38, 0, 39, 40, 41, 0, 0, 42, + 0, 0, 43, 44, 0, 45, 46, 47, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 48, 49, 0, 0, 0, 0, 0, 211, 0, 0, + 119, 52, 0, 53, 54, 0, 605, 0, 0, 0, + 56, 0, 57, 58, 59, 0, 60, 61, 62, 0, + 63, 0, 0, 0, 0, 0, 0, 4, 5, 6, + 7, 8, 9, 10, 11, 12, 0, 0, 0, 0, + 64, 265, 66, 14, 0, 108, 109, 17, 18, 0, + 0, 0, 0, 0, 110, 111, 112, 22, 23, 24, + 25, 0, 0, 113, 0, 0, 0, 0, 0, 0, + 0, 0, 30, 31, 32, 33, 34, 35, 36, 37, + 38, 0, 39, 40, 41, 0, 0, 42, 0, 0, + 43, 44, 0, 45, 46, 47, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 48, 49, + 0, 0, 0, 0, 0, 211, 0, 0, 119, 52, + 0, 53, 54, 0, 262, 0, 0, 0, 56, 0, + 57, 58, 59, 0, 60, 61, 62, 0, 63, 0, + 0, 0, 0, 0, 0, 4, 5, 6, 7, 8, + 9, 10, 11, 12, 0, 0, 0, 0, 64, 265, + 66, 14, 0, 108, 109, 17, 18, 0, 0, 0, + 0, 0, 110, 111, 112, 22, 23, 24, 25, 0, + 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, + 30, 31, 32, 33, 34, 35, 36, 37, 38, 0, + 39, 40, 41, 0, 0, 42, 0, 0, 43, 44, + 0, 45, 46, 47, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 48, 49, 0, 0, + 0, 0, 0, 211, 0, 0, 119, 52, 0, 53, + 54, 0, 605, 0, 0, 0, 56, 0, 57, 58, + 59, 0, 60, 61, 62, 0, 63, 0, 0, 0, + 0, 0, 0, 4, 5, 6, 7, 8, 9, 10, + 11, 12, 0, 0, 0, 0, 64, 265, 66, 14, + 0, 108, 109, 17, 18, 0, 0, 0, 0, 0, + 110, 111, 112, 22, 23, 24, 25, 0, 0, 113, + 0, 0, 0, 0, 0, 0, 0, 0, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 0, 39, 40, + 41, 0, 0, 42, 0, 0, 43, 44, 0, 45, + 46, 47, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 48, 49, 0, 0, 0, 0, + 0, 211, 0, 0, 119, 52, 0, 53, 54, 0, + 900, 0, 0, 0, 56, 0, 57, 58, 59, 0, + 60, 61, 62, 0, 63, 0, 0, 0, 0, 0, + 0, 4, 5, 6, 7, 8, 9, 10, 11, 12, + 0, 0, 0, 0, 64, 265, 66, 14, 0, 108, + 109, 17, 18, 0, 0, 0, 0, 0, 110, 111, + 112, 22, 23, 24, 25, 0, 0, 113, 0, 0, + 0, 0, 0, 0, 0, 0, 30, 31, 32, 33, + 34, 35, 36, 37, 38, 0, 39, 40, 41, 0, + 0, 42, 0, 0, 43, 44, 0, 45, 46, 47, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 48, 49, 0, 0, 0, 0, 0, 211, + 0, 0, 119, 52, 0, 53, 54, 0, 723, 0, + 0, 0, 56, 0, 57, 58, 59, 0, 60, 61, + 62, 0, 63, 0, 0, 0, 0, 0, 0, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 0, 0, + 0, 0, 64, 265, 66, 14, 0, 15, 16, 17, + 18, 0, 0, 0, 0, 0, 19, 20, 21, 22, + 23, 24, 25, 0, 0, 26, 0, 0, 0, 0, + 0, 0, 0, 0, 30, 31, 32, 33, 34, 35, + 36, 37, 38, 0, 39, 40, 41, 0, 0, 42, + 0, 0, 43, 44, 0, 45, 46, 47, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 48, 49, 0, 0, 0, 0, 0, 211, 0, 0, + 119, 52, 0, 53, 54, 0, 0, 0, 0, 0, + 56, 0, 57, 58, 59, 0, 60, 61, 62, 0, + 63, 0, 0, 0, 0, 0, 0, 4, 5, 6, + 7, 8, 9, 10, 11, 12, 0, 0, 0, 0, + 64, 65, 66, 14, 0, 108, 109, 17, 18, 0, + 0, 0, 0, 0, 110, 111, 112, 22, 23, 24, + 25, 0, 0, 113, 0, 0, 0, 0, 0, 0, + 0, 0, 30, 31, 32, 33, 34, 35, 36, 37, + 38, 0, 39, 40, 41, 0, 0, 42, 0, 0, + 43, 44, 0, 45, 46, 47, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 48, 49, + 0, 0, 0, 0, 0, 211, 0, 0, 119, 52, + 0, 53, 54, 0, 0, 0, 0, 0, 56, 0, + 57, 58, 59, 0, 60, 61, 62, 0, 63, 0, + 0, 0, 0, 0, 0, 4, 5, 6, 7, 8, + 9, 10, 11, 12, 0, 0, 0, 0, 64, 265, + 66, 14, 0, 15, 16, 17, 18, 0, 0, 0, + 0, 0, 19, 20, 21, 22, 23, 24, 25, 0, + 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, + 30, 31, 32, 33, 34, 35, 36, 37, 38, 0, + 39, 40, 41, 0, 0, 42, 0, 0, 43, 44, + 0, 45, 46, 47, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 48, 49, 0, 0, + 0, 0, 0, 211, 0, 0, 119, 52, 0, 53, + 54, 0, 0, 0, 0, 0, 56, 0, 57, 58, + 59, 0, 60, 61, 62, 0, 63, 0, 0, 0, + 0, 0, 0, 4, 5, 6, 7, 8, 9, 10, + 11, 12, 0, 0, 0, 0, 64, 265, 66, 14, + 0, 108, 109, 17, 18, 0, 0, 0, 0, 0, + 110, 111, 112, 22, 23, 24, 25, 0, 0, 113, + 0, 0, 0, 0, 0, 0, 0, 0, 30, 31, + 32, 114, 34, 35, 36, 115, 38, 0, 39, 40, + 41, 0, 0, 42, 0, 0, 43, 44, 0, 116, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 117, 0, + 0, 118, 0, 0, 119, 52, 0, 53, 54, 0, + 0, 0, 0, 0, 56, 0, 57, 58, 59, 0, + 60, 61, 62, 0, 63, 0, 0, 4, 5, 6, + 7, 8, 9, 10, 11, 12, 0, 0, 0, 0, + 0, 0, 0, 14, 120, 108, 109, 17, 18, 0, + 0, 0, 0, 0, 110, 111, 112, 22, 23, 24, + 25, 0, 0, 113, 0, 0, 0, 0, 0, 0, + 0, 0, 30, 31, 32, 33, 34, 35, 36, 37, + 38, 0, 39, 40, 41, 0, 0, 42, 0, 0, + 43, 44, 0, 225, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 226, 0, 0, 51, 52, + 0, 53, 54, 0, 55, 0, 0, 0, 56, 0, + 57, 58, 59, 0, 60, 61, 62, 0, 63, 0, + 0, 4, 5, 6, 7, 8, 9, 10, 11, 12, + 0, 0, 0, 0, 0, 0, 0, 14, 120, 108, + 109, 17, 18, 0, 0, 0, 0, 0, 110, 111, + 112, 22, 23, 24, 25, 0, 0, 113, 0, 0, + 0, 0, 0, 0, 0, 0, 30, 31, 32, 33, + 34, 35, 36, 37, 38, 0, 39, 40, 41, 0, + 0, 42, 0, 0, 43, 44, 0, 116, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, + 0, 0, 399, 52, 0, 53, 54, 0, 400, 0, + 0, 0, 56, 0, 57, 58, 59, 0, 60, 61, + 62, 0, 63, 0, 0, 4, 5, 6, 7, 8, + 9, 10, 11, 12, 0, 0, 0, 0, 0, 0, + 0, 14, 120, 108, 109, 17, 18, 0, 0, 0, + 0, 0, 110, 111, 112, 22, 23, 24, 25, 0, + 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, + 30, 31, 32, 114, 34, 35, 36, 115, 38, 0, + 39, 40, 41, 0, 0, 42, 0, 0, 43, 44, + 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 118, 0, 0, 119, 52, 0, 53, + 54, 0, 0, 0, 0, 0, 56, 0, 57, 58, + 59, 0, 60, 61, 62, 0, 63, 0, 0, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 0, 0, + 0, 0, 0, 0, 0, 14, 120, 108, 109, 17, + 18, 0, 0, 0, 0, 0, 110, 111, 112, 22, + 23, 24, 25, 0, 0, 113, 0, 0, 0, 0, + 0, 0, 0, 0, 30, 31, 32, 33, 34, 35, + 36, 37, 38, 0, 39, 40, 41, 0, 0, 42, + 0, 0, 43, 44, 0, 116, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 313, 0, 0, + 399, 52, 0, 53, 54, 0, 0, 0, 0, 0, + 56, 0, 57, 58, 59, 0, 60, 61, 62, 0, + 63, 0, 0, 4, 5, 6, 7, 8, 9, 10, + 11, 12, 0, 0, 0, 0, 0, 0, 0, 14, + 120, 108, 109, 17, 18, 0, 0, 0, 0, 0, + 110, 111, 112, 22, 23, 24, 25, 0, 0, 113, + 0, 0, 0, 0, 0, 0, 0, 0, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 0, 39, 40, + 41, 0, 0, 42, 0, 0, 43, 44, 0, 116, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 967, 0, 0, 119, 52, 0, 53, 54, 0, + 0, 0, 0, 0, 56, 0, 57, 58, 59, 0, + 60, 61, 62, 0, 63, 0, 0, 4, 5, 6, + 7, 8, 9, 10, 11, 12, 0, 0, 0, 0, + 0, 0, 0, 14, 120, 108, 109, 17, 18, 0, + 0, 0, 0, 0, 110, 111, 112, 22, 23, 24, + 25, 0, 0, 113, 0, 0, 0, 0, 0, 0, + 0, 0, 30, 31, 32, 33, 34, 35, 36, 37, + 38, 0, 39, 40, 41, 0, 0, 42, 0, 0, + 43, 44, 0, 225, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 990, 0, 0, 119, 52, + 0, 53, 54, 0, 0, 659, 660, 0, 56, 661, + 57, 58, 59, 0, 60, 61, 62, 0, 63, 0, + 0, 0, 0, 0, 174, 175, 176, 177, 178, 179, + 180, 181, 0, 0, 182, 183, 0, 0, 120, 0, + 184, 185, 186, 187, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 188, 189, 190, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 191, 192, + 193, 194, 195, 196, 197, 198, 199, 200, 0, 201, + 202, 680, 651, 0, 0, 681, 0, 203, 276, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 191, 192, 193, 194, 195, 196, 197, - 198, 199, 200, 0, 201, 202, 0, 0, 0, 0, - 0, 0, 203, 131, 132, 133, 134, 135, 136, 137, - 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, - 148, 149, 150, 151, 152, 153, 154, 0, 0, 0, - 155, 156, 157, 233, 234, 235, 236, 162, 163, 164, - 0, 0, 0, 0, 0, 165, 166, 167, 237, 238, - 239, 240, 172, 320, 321, 241, 322, 0, 0, 0, - 0, 0, 0, 323, 0, 0, 0, 0, 0, 0, 174, 175, 176, 177, 178, 179, 180, 181, 0, 0, 182, 183, 0, 0, 0, 0, 184, 185, 186, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 188, 189, 190, 0, 0, 0, 0, 486, 0, 0, + 188, 189, 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 192, 193, 194, 195, 196, - 197, 198, 199, 200, 0, 201, 202, 0, 0, 0, - 0, 0, 0, 203, 131, 132, 133, 134, 135, 136, - 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, - 147, 148, 149, 150, 151, 152, 153, 154, 0, 0, - 0, 155, 156, 157, 233, 234, 235, 236, 162, 163, - 164, 0, 0, 0, 0, 0, 165, 166, 167, 237, - 238, 239, 240, 172, 0, 0, 241, 0, 0, 0, + 197, 198, 199, 200, 0, 201, 202, 665, 660, 0, + 0, 666, 0, 203, 276, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 174, 175, 176, 177, + 178, 179, 180, 181, 0, 0, 182, 183, 0, 0, + 0, 0, 184, 185, 186, 187, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 188, 189, 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 174, 175, 176, 177, 178, 179, 180, 181, 0, - 0, 182, 183, 0, 0, 0, 0, 184, 185, 186, - 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 188, 189, 190, 0, 0, 0, 242, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 191, 192, 193, 194, 195, - 196, 197, 198, 199, 200, 0, 201, 202, 0, 0, - 0, 0, 0, 0, 203, 131, 132, 133, 134, 135, - 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, - 146, 147, 148, 149, 150, 151, 152, 153, 154, 0, - 0, 0, 155, 156, 157, 233, 234, 235, 236, 162, - 163, 164, 0, 0, 0, 0, 0, 165, 166, 167, - 237, 238, 239, 240, 172, 0, 0, 241, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 0, 201, 202, 697, 651, 0, 0, 698, 0, 203, + 276, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, 175, 176, 177, 178, 179, 180, 181, 0, 0, 182, 183, 0, 0, 0, 0, 184, 185, 186, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 188, 189, 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 192, 193, 194, - 195, 196, 197, 198, 199, 200, 0, 201, 202, 0, - 0, 0, 0, 0, 0, 203, 5, 6, 7, 8, - 9, 10, 11, 12, 13, 0, 0, 0, 0, 0, - 0, 0, 15, 0, 108, 109, 18, 19, 0, 0, - 0, 0, 0, 110, 111, 112, 23, 24, 25, 26, - 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, - 0, 31, 32, 33, 34, 35, 36, 37, 38, 39, - 0, 40, 41, 42, 0, 0, 43, 0, 0, 44, - 45, 0, 116, 0, 0, 0, 0, 0, 0, 0, + 195, 196, 197, 198, 199, 200, 0, 201, 202, 700, + 660, 0, 0, 701, 0, 203, 276, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 174, 175, + 176, 177, 178, 179, 180, 181, 0, 0, 182, 183, + 0, 0, 0, 0, 184, 185, 186, 187, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 188, 189, + 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 313, 0, 0, 119, 53, 0, - 54, 55, 0, 0, 0, 0, 0, 57, 0, 58, - 59, 60, 0, 61, 62, 63, 0, 64, 0, 0, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 0, - 0, 0, 0, 0, 0, 0, 15, 120, 108, 109, - 18, 19, 0, 0, 0, 314, 0, 110, 111, 112, - 23, 24, 25, 26, 0, 0, 113, 0, 0, 0, - 0, 0, 0, 0, 0, 31, 32, 33, 34, 35, - 36, 37, 38, 39, 0, 40, 41, 42, 0, 0, - 43, 0, 0, 44, 45, 0, 116, 0, 0, 0, + 0, 0, 191, 192, 193, 194, 195, 196, 197, 198, + 199, 200, 0, 201, 202, 707, 651, 0, 0, 708, + 0, 203, 276, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 174, 175, 176, 177, 178, 179, + 180, 181, 0, 0, 182, 183, 0, 0, 0, 0, + 184, 185, 186, 187, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 188, 189, 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 313, 0, - 0, 119, 53, 0, 54, 55, 0, 0, 0, 0, - 0, 57, 0, 58, 59, 60, 0, 61, 62, 63, - 0, 64, 0, 0, 5, 6, 7, 8, 9, 10, - 11, 12, 13, 14, 0, 0, 0, 0, 0, 0, - 15, 120, 16, 17, 18, 19, 0, 0, 0, 611, - 0, 20, 21, 22, 23, 24, 25, 26, 0, 0, - 27, 0, 0, 0, 0, 0, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 0, 40, - 41, 42, 0, 0, 43, 0, 0, 44, 45, 0, - 46, 47, 48, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 49, 50, 0, 0, 0, - 0, 0, 51, 0, 0, 52, 53, 0, 54, 55, - 0, 56, 0, 0, 0, 57, 0, 58, 59, 60, - 0, 61, 62, 63, 0, 64, 0, 0, 0, 0, - 0, 0, 5, 6, 7, 8, 9, 10, 11, 12, - 13, 14, 0, 0, 0, 65, 66, 67, 15, 0, - 16, 17, 18, 19, 0, 0, 0, 0, 0, 20, - 21, 22, 23, 24, 25, 26, 0, 0, 27, 0, - 0, 0, 0, 0, 28, 0, 30, 31, 32, 33, - 34, 35, 36, 37, 38, 39, 0, 40, 41, 42, - 0, 0, 43, 0, 0, 44, 45, 0, 46, 47, - 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 49, 50, 0, 0, 0, 0, 0, - 51, 0, 0, 52, 53, 0, 54, 55, 0, 56, - 0, 0, 0, 57, 0, 58, 59, 60, 0, 61, - 62, 63, 0, 64, 0, 0, 0, 0, 0, 0, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 0, - 0, 0, 0, 65, 66, 67, 15, 0, 16, 17, - 18, 19, 0, 0, 0, 0, 0, 20, 21, 22, - 23, 24, 25, 26, 0, 0, 113, 0, 0, 0, - 0, 0, 0, 0, 0, 31, 32, 33, 260, 35, - 36, 37, 38, 39, 0, 40, 41, 42, 0, 0, - 43, 0, 0, 44, 45, 0, 261, 47, 48, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 191, 192, + 193, 194, 195, 196, 197, 198, 199, 200, 0, 201, + 202, 710, 660, 0, 0, 711, 0, 203, 276, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 49, 50, 0, 0, 0, 0, 0, 211, 0, - 0, 119, 53, 0, 54, 55, 0, 262, 0, 263, - 264, 57, 0, 58, 59, 60, 0, 61, 62, 63, - 0, 64, 0, 0, 0, 0, 0, 0, 5, 6, - 7, 8, 9, 10, 11, 12, 13, 0, 0, 0, - 0, 65, 265, 67, 15, 0, 16, 17, 18, 19, - 0, 0, 0, 0, 0, 20, 21, 22, 23, 24, - 25, 26, 0, 0, 113, 0, 0, 0, 0, 0, - 0, 0, 0, 31, 32, 33, 260, 35, 36, 37, - 38, 39, 0, 40, 41, 42, 0, 0, 43, 0, - 0, 44, 45, 0, 261, 47, 48, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, - 508, 0, 0, 0, 0, 0, 211, 0, 0, 119, - 53, 0, 54, 55, 0, 262, 0, 263, 264, 57, - 0, 58, 59, 60, 0, 61, 62, 63, 0, 64, - 0, 0, 0, 0, 0, 0, 5, 6, 7, 8, - 9, 10, 11, 12, 13, 0, 0, 0, 0, 65, - 265, 67, 15, 0, 108, 109, 18, 19, 0, 0, - 0, 0, 0, 110, 111, 112, 23, 24, 25, 26, - 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, - 0, 31, 32, 33, 260, 35, 36, 37, 38, 39, - 0, 40, 41, 42, 0, 0, 43, 0, 0, 44, - 45, 0, 261, 47, 48, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 49, 50, 0, - 0, 0, 0, 0, 211, 0, 0, 119, 53, 0, - 54, 55, 0, 723, 0, 263, 264, 57, 0, 58, - 59, 60, 0, 61, 62, 63, 0, 64, 0, 0, - 0, 0, 0, 0, 5, 6, 7, 8, 9, 10, - 11, 12, 13, 0, 0, 0, 0, 65, 265, 67, - 15, 0, 108, 109, 18, 19, 0, 0, 0, 0, - 0, 110, 111, 112, 23, 24, 25, 26, 0, 0, - 113, 0, 0, 0, 0, 0, 0, 0, 0, 31, - 32, 33, 260, 35, 36, 37, 38, 39, 0, 40, - 41, 42, 0, 0, 43, 0, 0, 44, 45, 0, - 261, 47, 48, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 49, 854, 0, 0, 0, - 0, 0, 211, 0, 0, 119, 53, 0, 54, 55, - 0, 723, 0, 263, 264, 57, 0, 58, 59, 60, - 0, 61, 62, 63, 0, 64, 0, 0, 0, 0, - 0, 0, 5, 6, 7, 8, 9, 10, 11, 12, - 13, 0, 0, 0, 0, 65, 265, 67, 15, 0, - 108, 109, 18, 19, 0, 0, 0, 0, 0, 110, - 111, 112, 23, 24, 25, 26, 0, 0, 113, 0, - 0, 0, 0, 0, 0, 0, 0, 31, 32, 33, - 260, 35, 36, 37, 38, 39, 0, 40, 41, 42, - 0, 0, 43, 0, 0, 44, 45, 0, 261, 47, - 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 49, 50, 0, 0, 0, 0, 0, - 211, 0, 0, 119, 53, 0, 54, 55, 0, 262, - 0, 263, 0, 57, 0, 58, 59, 60, 0, 61, - 62, 63, 0, 64, 0, 0, 0, 0, 0, 0, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 0, - 0, 0, 0, 65, 265, 67, 15, 0, 108, 109, - 18, 19, 0, 0, 0, 0, 0, 110, 111, 112, - 23, 24, 25, 26, 0, 0, 113, 0, 0, 0, - 0, 0, 0, 0, 0, 31, 32, 33, 260, 35, - 36, 37, 38, 39, 0, 40, 41, 42, 0, 0, - 43, 0, 0, 44, 45, 0, 261, 47, 48, 0, + 174, 175, 176, 177, 178, 179, 180, 181, 0, 0, + 182, 183, 0, 0, 0, 0, 184, 185, 186, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 49, 50, 0, 0, 0, 0, 0, 211, 0, - 0, 119, 53, 0, 54, 55, 0, 0, 0, 263, - 264, 57, 0, 58, 59, 60, 0, 61, 62, 63, - 0, 64, 0, 0, 0, 0, 0, 0, 5, 6, - 7, 8, 9, 10, 11, 12, 13, 0, 0, 0, - 0, 65, 265, 67, 15, 0, 108, 109, 18, 19, - 0, 0, 0, 0, 0, 110, 111, 112, 23, 24, - 25, 26, 0, 0, 113, 0, 0, 0, 0, 0, - 0, 0, 0, 31, 32, 33, 260, 35, 36, 37, - 38, 39, 0, 40, 41, 42, 0, 0, 43, 0, - 0, 44, 45, 0, 261, 47, 48, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, - 50, 0, 0, 0, 0, 0, 211, 0, 0, 119, - 53, 0, 54, 55, 0, 723, 0, 263, 0, 57, - 0, 58, 59, 60, 0, 61, 62, 63, 0, 64, - 0, 0, 0, 0, 0, 0, 5, 6, 7, 8, - 9, 10, 11, 12, 13, 0, 0, 0, 0, 65, - 265, 67, 15, 0, 108, 109, 18, 19, 0, 0, - 0, 0, 0, 110, 111, 112, 23, 24, 25, 26, - 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, - 0, 31, 32, 33, 260, 35, 36, 37, 38, 39, - 0, 40, 41, 42, 0, 0, 43, 0, 0, 44, - 45, 0, 261, 47, 48, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 49, 50, 0, - 0, 0, 0, 0, 211, 0, 0, 119, 53, 0, - 54, 55, 0, 0, 0, 263, 0, 57, 0, 58, - 59, 60, 0, 61, 62, 63, 0, 64, 0, 0, - 0, 0, 0, 0, 5, 6, 7, 8, 9, 10, - 11, 12, 13, 0, 0, 0, 0, 65, 265, 67, - 15, 0, 16, 17, 18, 19, 0, 0, 0, 0, - 0, 20, 21, 22, 23, 24, 25, 26, 0, 0, - 113, 0, 0, 0, 0, 0, 0, 0, 0, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 0, 40, - 41, 42, 0, 0, 43, 0, 0, 44, 45, 0, - 46, 47, 48, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 49, 50, 0, 0, 0, - 0, 0, 211, 0, 0, 119, 53, 0, 54, 55, - 0, 605, 0, 0, 0, 57, 0, 58, 59, 60, - 0, 61, 62, 63, 0, 64, 0, 0, 0, 0, - 0, 0, 5, 6, 7, 8, 9, 10, 11, 12, - 13, 0, 0, 0, 0, 65, 265, 67, 15, 0, - 108, 109, 18, 19, 0, 0, 0, 0, 0, 110, - 111, 112, 23, 24, 25, 26, 0, 0, 113, 0, - 0, 0, 0, 0, 0, 0, 0, 31, 32, 33, - 34, 35, 36, 37, 38, 39, 0, 40, 41, 42, - 0, 0, 43, 0, 0, 44, 45, 0, 46, 47, - 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 49, 50, 0, 0, 0, 0, 0, - 211, 0, 0, 119, 53, 0, 54, 55, 0, 262, - 0, 0, 0, 57, 0, 58, 59, 60, 0, 61, - 62, 63, 0, 64, 0, 0, 0, 0, 0, 0, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 0, - 0, 0, 0, 65, 265, 67, 15, 0, 108, 109, - 18, 19, 0, 0, 0, 0, 0, 110, 111, 112, - 23, 24, 25, 26, 0, 0, 113, 0, 0, 0, - 0, 0, 0, 0, 0, 31, 32, 33, 34, 35, - 36, 37, 38, 39, 0, 40, 41, 42, 0, 0, - 43, 0, 0, 44, 45, 0, 46, 47, 48, 0, + 188, 189, 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 49, 50, 0, 0, 0, 0, 0, 211, 0, - 0, 119, 53, 0, 54, 55, 0, 605, 0, 0, - 0, 57, 0, 58, 59, 60, 0, 61, 62, 63, - 0, 64, 0, 0, 0, 0, 0, 0, 5, 6, - 7, 8, 9, 10, 11, 12, 13, 0, 0, 0, - 0, 65, 265, 67, 15, 0, 108, 109, 18, 19, - 0, 0, 0, 0, 0, 110, 111, 112, 23, 24, - 25, 26, 0, 0, 113, 0, 0, 0, 0, 0, - 0, 0, 0, 31, 32, 33, 34, 35, 36, 37, - 38, 39, 0, 40, 41, 42, 0, 0, 43, 0, - 0, 44, 45, 0, 46, 47, 48, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, - 50, 0, 0, 0, 0, 0, 211, 0, 0, 119, - 53, 0, 54, 55, 0, 900, 0, 0, 0, 57, - 0, 58, 59, 60, 0, 61, 62, 63, 0, 64, - 0, 0, 0, 0, 0, 0, 5, 6, 7, 8, - 9, 10, 11, 12, 13, 0, 0, 0, 0, 65, - 265, 67, 15, 0, 108, 109, 18, 19, 0, 0, - 0, 0, 0, 110, 111, 112, 23, 24, 25, 26, - 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, - 0, 31, 32, 33, 34, 35, 36, 37, 38, 39, - 0, 40, 41, 42, 0, 0, 43, 0, 0, 44, - 45, 0, 46, 47, 48, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 49, 50, 0, - 0, 0, 0, 0, 211, 0, 0, 119, 53, 0, - 54, 55, 0, 723, 0, 0, 0, 57, 0, 58, - 59, 60, 0, 61, 62, 63, 0, 64, 0, 0, - 0, 0, 0, 0, 5, 6, 7, 8, 9, 10, - 11, 12, 13, 0, 0, 0, 0, 65, 265, 67, - 15, 0, 16, 17, 18, 19, 0, 0, 0, 0, - 0, 20, 21, 22, 23, 24, 25, 26, 0, 0, - 27, 0, 0, 0, 0, 0, 0, 0, 0, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 0, 40, - 41, 42, 0, 0, 43, 0, 0, 44, 45, 0, - 46, 47, 48, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 49, 50, 0, 0, 0, - 0, 0, 211, 0, 0, 119, 53, 0, 54, 55, - 0, 0, 0, 0, 0, 57, 0, 58, 59, 60, - 0, 61, 62, 63, 0, 64, 0, 0, 0, 0, - 0, 0, 5, 6, 7, 8, 9, 10, 11, 12, - 13, 0, 0, 0, 0, 65, 66, 67, 15, 0, - 108, 109, 18, 19, 0, 0, 0, 0, 0, 110, - 111, 112, 23, 24, 25, 26, 0, 0, 113, 0, - 0, 0, 0, 0, 0, 0, 0, 31, 32, 33, - 34, 35, 36, 37, 38, 39, 0, 40, 41, 42, - 0, 0, 43, 0, 0, 44, 45, 0, 46, 47, - 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 49, 50, 0, 0, 0, 0, 0, - 211, 0, 0, 119, 53, 0, 54, 55, 0, 0, - 0, 0, 0, 57, 0, 58, 59, 60, 0, 61, - 62, 63, 0, 64, 0, 0, 0, 0, 0, 0, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 0, - 0, 0, 0, 65, 265, 67, 15, 0, 16, 17, - 18, 19, 0, 0, 0, 0, 0, 20, 21, 22, - 23, 24, 25, 26, 0, 0, 113, 0, 0, 0, - 0, 0, 0, 0, 0, 31, 32, 33, 34, 35, - 36, 37, 38, 39, 0, 40, 41, 42, 0, 0, - 43, 0, 0, 44, 45, 0, 46, 47, 48, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 49, 50, 0, 0, 0, 0, 0, 211, 0, - 0, 119, 53, 0, 54, 55, 0, 0, 0, 0, - 0, 57, 0, 58, 59, 60, 0, 61, 62, 63, - 0, 64, 0, 0, 0, 0, 0, 0, 5, 6, - 7, 8, 9, 10, 11, 12, 13, 0, 0, 0, - 0, 65, 265, 67, 15, 0, 108, 109, 18, 19, - 0, 0, 0, 0, 0, 110, 111, 112, 23, 24, - 25, 26, 0, 0, 113, 0, 0, 0, 0, 0, - 0, 0, 0, 31, 32, 33, 114, 35, 36, 37, - 115, 39, 0, 40, 41, 42, 0, 0, 43, 0, - 0, 44, 45, 0, 116, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 117, 0, 0, 118, 0, 0, 119, - 53, 0, 54, 55, 0, 0, 0, 0, 0, 57, - 0, 58, 59, 60, 0, 61, 62, 63, 0, 64, - 0, 0, 5, 6, 7, 8, 9, 10, 11, 12, - 13, 0, 0, 0, 0, 0, 0, 0, 15, 120, - 108, 109, 18, 19, 0, 0, 0, 0, 0, 110, - 111, 112, 23, 24, 25, 26, 0, 0, 113, 0, - 0, 0, 0, 0, 0, 0, 0, 31, 32, 33, - 34, 35, 36, 37, 38, 39, 0, 40, 41, 42, - 0, 0, 43, 0, 0, 44, 45, 0, 225, 0, + 0, 0, 0, 0, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 0, 201, 202, 746, 651, 0, + 0, 747, 0, 203, 276, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 174, 175, 176, 177, + 178, 179, 180, 181, 0, 0, 182, 183, 0, 0, + 0, 0, 184, 185, 186, 187, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 188, 189, 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 226, 0, 0, 52, 53, 0, 54, 55, 0, 56, - 0, 0, 0, 57, 0, 58, 59, 60, 0, 61, - 62, 63, 0, 64, 0, 0, 5, 6, 7, 8, - 9, 10, 11, 12, 13, 0, 0, 0, 0, 0, - 0, 0, 15, 120, 108, 109, 18, 19, 0, 0, - 0, 0, 0, 110, 111, 112, 23, 24, 25, 26, - 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, - 0, 31, 32, 33, 34, 35, 36, 37, 38, 39, - 0, 40, 41, 42, 0, 0, 43, 0, 0, 44, - 45, 0, 116, 0, 0, 0, 0, 0, 0, 0, + 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 0, 201, 202, 749, 660, 0, 0, 750, 0, 203, + 276, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 174, 175, 176, 177, 178, 179, 180, 181, + 0, 0, 182, 183, 0, 0, 0, 0, 184, 185, + 186, 187, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 188, 189, 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 313, 0, 0, 399, 53, 0, - 54, 55, 0, 400, 0, 0, 0, 57, 0, 58, - 59, 60, 0, 61, 62, 63, 0, 64, 0, 0, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 0, - 0, 0, 0, 0, 0, 0, 15, 120, 108, 109, - 18, 19, 0, 0, 0, 0, 0, 110, 111, 112, - 23, 24, 25, 26, 0, 0, 113, 0, 0, 0, - 0, 0, 0, 0, 0, 31, 32, 33, 114, 35, - 36, 37, 115, 39, 0, 40, 41, 42, 0, 0, - 43, 0, 0, 44, 45, 0, 116, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 191, 192, 193, 194, + 195, 196, 197, 198, 199, 200, 0, 201, 202, 905, + 651, 0, 0, 906, 0, 203, 276, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 174, 175, + 176, 177, 178, 179, 180, 181, 0, 0, 182, 183, + 0, 0, 0, 0, 184, 185, 186, 187, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 188, 189, + 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 118, 0, - 0, 119, 53, 0, 54, 55, 0, 0, 0, 0, - 0, 57, 0, 58, 59, 60, 0, 61, 62, 63, - 0, 64, 0, 0, 5, 6, 7, 8, 9, 10, - 11, 12, 13, 0, 0, 0, 0, 0, 0, 0, - 15, 120, 108, 109, 18, 19, 0, 0, 0, 0, - 0, 110, 111, 112, 23, 24, 25, 26, 0, 0, - 113, 0, 0, 0, 0, 0, 0, 0, 0, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 0, 40, - 41, 42, 0, 0, 43, 0, 0, 44, 45, 0, - 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 191, 192, 193, 194, 195, 196, 197, 198, + 199, 200, 0, 201, 202, 908, 660, 0, 0, 909, + 0, 203, 276, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 174, 175, 176, 177, 178, 179, + 180, 181, 0, 0, 182, 183, 0, 0, 0, 0, + 184, 185, 186, 187, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 188, 189, 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 313, 0, 0, 399, 53, 0, 54, 55, - 0, 0, 0, 0, 0, 57, 0, 58, 59, 60, - 0, 61, 62, 63, 0, 64, 0, 0, 5, 6, - 7, 8, 9, 10, 11, 12, 13, 0, 0, 0, - 0, 0, 0, 0, 15, 120, 108, 109, 18, 19, - 0, 0, 0, 0, 0, 110, 111, 112, 23, 24, - 25, 26, 0, 0, 113, 0, 0, 0, 0, 0, - 0, 0, 0, 31, 32, 33, 34, 35, 36, 37, - 38, 39, 0, 40, 41, 42, 0, 0, 43, 0, - 0, 44, 45, 0, 116, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 191, 192, + 193, 194, 195, 196, 197, 198, 199, 200, 0, 201, + 202, 1049, 651, 0, 0, 1050, 0, 203, 276, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 967, 0, 0, 119, - 53, 0, 54, 55, 0, 0, 0, 0, 0, 57, - 0, 58, 59, 60, 0, 61, 62, 63, 0, 64, - 0, 0, 5, 6, 7, 8, 9, 10, 11, 12, - 13, 0, 0, 0, 0, 0, 0, 0, 15, 120, - 108, 109, 18, 19, 0, 0, 0, 0, 0, 110, - 111, 112, 23, 24, 25, 26, 0, 0, 113, 0, - 0, 0, 0, 0, 0, 0, 0, 31, 32, 33, - 34, 35, 36, 37, 38, 39, 0, 40, 41, 42, - 0, 0, 43, 0, 0, 44, 45, 0, 225, 0, + 174, 175, 176, 177, 178, 179, 180, 181, 0, 0, + 182, 183, 0, 0, 0, 0, 184, 185, 186, 187, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 188, 189, 190, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 0, 201, 202, 1061, 651, 0, + 0, 1062, 0, 203, 276, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 174, 175, 176, 177, + 178, 179, 180, 181, 0, 0, 182, 183, 0, 0, + 0, 0, 184, 185, 186, 187, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 188, 189, 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 990, 0, 0, 119, 53, 0, 54, 55, 0, 0, - 659, 660, 0, 57, 661, 58, 59, 60, 0, 61, - 62, 63, 0, 64, 0, 0, 0, 0, 0, 174, - 175, 176, 177, 178, 179, 180, 181, 0, 0, 182, - 183, 0, 0, 120, 0, 184, 185, 186, 187, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 188, - 189, 190, 0, 0, 0, 0, 0, 0, 0, 0, + 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 0, 201, 202, 1064, 660, 0, 0, 1065, 0, 203, + 276, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 174, 175, 176, 177, 178, 179, 180, 181, + 0, 0, 182, 183, 0, 0, 0, 0, 184, 185, + 186, 187, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 188, 189, 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 191, 192, 193, 194, 195, 196, 197, - 198, 199, 200, 0, 201, 202, 680, 651, 0, 0, - 681, 0, 203, 276, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 174, 175, 176, 177, 178, - 179, 180, 181, 0, 0, 182, 183, 0, 0, 0, - 0, 184, 185, 186, 187, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 188, 189, 190, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, - 192, 193, 194, 195, 196, 197, 198, 199, 200, 0, - 201, 202, 665, 660, 0, 0, 666, 0, 203, 276, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 174, 175, 176, 177, 178, 179, 180, 181, 0, - 0, 182, 183, 0, 0, 0, 0, 184, 185, 186, - 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 188, 189, 190, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 191, 192, 193, 194, 195, - 196, 197, 198, 199, 200, 0, 201, 202, 697, 651, - 0, 0, 698, 0, 203, 276, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 174, 175, 176, - 177, 178, 179, 180, 181, 0, 0, 182, 183, 0, - 0, 0, 0, 184, 185, 186, 187, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 188, 189, 190, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 191, 192, 193, 194, 195, 196, 197, 198, 199, - 200, 0, 201, 202, 700, 660, 0, 0, 701, 0, - 203, 276, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 174, 175, 176, 177, 178, 179, 180, - 181, 0, 0, 182, 183, 0, 0, 0, 0, 184, - 185, 186, 187, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 188, 189, 190, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 191, 192, 193, - 194, 195, 196, 197, 198, 199, 200, 0, 201, 202, - 707, 651, 0, 0, 708, 0, 203, 276, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, - 175, 176, 177, 178, 179, 180, 181, 0, 0, 182, - 183, 0, 0, 0, 0, 184, 185, 186, 187, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 188, - 189, 190, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 191, 192, 193, 194, 195, 196, 197, - 198, 199, 200, 0, 201, 202, 710, 660, 0, 0, - 711, 0, 203, 276, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 174, 175, 176, 177, 178, - 179, 180, 181, 0, 0, 182, 183, 0, 0, 0, - 0, 184, 185, 186, 187, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 188, 189, 190, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, - 192, 193, 194, 195, 196, 197, 198, 199, 200, 0, - 201, 202, 746, 651, 0, 0, 747, 0, 203, 276, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 174, 175, 176, 177, 178, 179, 180, 181, 0, - 0, 182, 183, 0, 0, 0, 0, 184, 185, 186, - 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 188, 189, 190, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 191, 192, 193, 194, 195, - 196, 197, 198, 199, 200, 0, 201, 202, 749, 660, - 0, 0, 750, 0, 203, 276, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 174, 175, 176, - 177, 178, 179, 180, 181, 0, 0, 182, 183, 0, - 0, 0, 0, 184, 185, 186, 187, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 188, 189, 190, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 191, 192, 193, 194, 195, 196, 197, 198, 199, - 200, 0, 201, 202, 905, 651, 0, 0, 906, 0, - 203, 276, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 174, 175, 176, 177, 178, 179, 180, - 181, 0, 0, 182, 183, 0, 0, 0, 0, 184, - 185, 186, 187, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 188, 189, 190, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 191, 192, 193, - 194, 195, 196, 197, 198, 199, 200, 0, 201, 202, - 908, 660, 0, 0, 909, 0, 203, 276, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, - 175, 176, 177, 178, 179, 180, 181, 0, 0, 182, - 183, 0, 0, 0, 0, 184, 185, 186, 187, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 188, - 189, 190, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 191, 192, 193, 194, 195, 196, 197, - 198, 199, 200, 0, 201, 202, 1049, 651, 0, 0, - 1050, 0, 203, 276, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 174, 175, 176, 177, 178, - 179, 180, 181, 0, 0, 182, 183, 0, 0, 0, - 0, 184, 185, 186, 187, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 188, 189, 190, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, - 192, 193, 194, 195, 196, 197, 198, 199, 200, 0, - 201, 202, 1061, 651, 0, 0, 1062, 0, 203, 276, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 174, 175, 176, 177, 178, 179, 180, 181, 0, - 0, 182, 183, 0, 0, 0, 0, 184, 185, 186, - 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 188, 189, 190, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 191, 192, 193, 194, 195, - 196, 197, 198, 199, 200, 0, 201, 202, 1064, 660, - 0, 0, 1065, 0, 203, 276, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 174, 175, 176, - 177, 178, 179, 180, 181, 0, 0, 182, 183, 0, - 0, 0, 0, 184, 185, 186, 187, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 188, 189, 190, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 191, 192, 193, 194, 195, 196, 197, 198, 199, - 200, 0, 201, 202, 665, 660, 0, 0, 666, 0, - 203, 276, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 174, 175, 176, 177, 178, 179, 180, - 181, 0, 0, 182, 183, 0, 0, 0, 0, 184, - 185, 186, 187, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 188, 189, 190, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 872, - 0, 0, 0, 0, 0, 0, 0, 191, 192, 193, - 194, 195, 196, 197, 198, 199, 200, 0, 201, 202, - 0, 0, 0, 0, 0, 0, 203, 403, 404, 405, - 406, 407, 408, 409, 410, 411, 412, 413, 414, 0, - 0, 0, 0, 415, 416, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 418, 0, 0, 0, - 0, 885, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 419, 0, 420, - 421, 422, 423, 424, 425, 426, 427, 428, 429, 403, - 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, - 414, 0, 0, 0, 0, 415, 416, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 418, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 419, - 0, 420, 421, 422, 423, 424, 425, 426, 427, 428, - 429, 403, 404, 405, 406, 407, 408, 409, 410, 411, - 412, 413, 414, 0, 0, 0, 0, 415, 416, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 418, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 419, 0, 420, 421, 422, 423, 424, 425, 426, - 427, 428, 429, 0, 0, 0, 0, 0, 0, 0, - 0, -277, 403, 404, 405, 406, 407, 408, 409, 410, + 0, 0, 0, 0, 0, 0, 191, 192, 193, 194, + 195, 196, 197, 198, 199, 200, 0, 201, 202, 665, + 660, 0, 0, 666, 0, 203, 276, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 174, 175, + 176, 177, 178, 179, 180, 181, 0, 0, 182, 183, + 0, 0, 0, 0, 184, 185, 186, 187, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 188, 189, + 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 872, 0, 0, 0, 0, 0, + 0, 0, 191, 192, 193, 194, 195, 196, 197, 198, + 199, 200, 0, 201, 202, 0, 0, 0, 0, 0, + 0, 203, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 0, 0, 0, 0, 415, 416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 418, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 418, 0, 0, 0, 0, 885, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 419, 0, 420, 421, 422, 423, 424, 425, - 426, 427, 428, 429, 0, 0, 0, 0, 0, 0, - 0, 0, -279, 403, 404, 405, 406, 407, 408, 409, - 410, 411, 412, 413, 414, 0, 0, 0, 0, 415, - 416, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 418, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 419, 0, 420, 421, 422, 423, 424, - 425, 426, 427, 428, 429, 0, 0, 0, 0, 0, - 0, 0, 0, -280, 403, 404, 405, 406, 407, 408, + 426, 427, 428, 429, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 0, 0, 0, 0, 415, 416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 418, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 419, 0, 420, 421, 422, 423, - 424, 425, 426, 427, 428, 429, 0, 0, 0, 0, - 0, 0, 0, 0, -282, 403, 404, 405, 406, 407, - 408, 409, 410, 411, 412, 413, 414, 0, 0, 0, - 0, 415, 416, 0, 0, 0, 417, 0, 0, 0, - 0, 0, 0, 0, 418, 0, 0, 0, 0, 0, + 424, 425, 426, 427, 428, 429, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 0, 0, + 0, 0, 415, 416, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 418, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 419, 0, 420, 421, 422, - 423, 424, 425, 426, 427, 428, 429, 403, 404, 405, + 0, 0, 0, 0, 0, 0, 419, 0, 420, 421, + 422, 423, 424, 425, 426, 427, 428, 429, 0, 0, + 0, 0, 0, 0, 0, 0, -277, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 0, - 0, 0, 0, 415, 416, 0, 0, 0, 500, 0, + 0, 0, 0, 415, 416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 418, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 419, 0, 420, - 421, 422, 423, 424, 425, 426, 427, 428, 429, 403, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 0, + 0, 0, 0, 0, 0, 0, 0, -279, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 0, 0, 0, 0, 415, 416, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 418, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 419, 0, + 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 0, 0, 0, 0, 0, 0, 0, 0, -280, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 0, 0, 0, 0, 415, 416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 418, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 419, 0, 420, 421, 422, 423, 424, 425, 426, 427, 428, - 429, 403, 404, 405, 406, 407, 408, 409, 410, 411, - 412, -620, -620, 0, 0, 0, 0, 415, 416, 0, + 429, 0, 0, 0, 0, 0, 0, 0, 0, -282, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 0, 0, 0, 0, 415, 416, 0, 0, + 0, 417, 0, 0, 0, 0, 0, 0, 0, 418, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 418, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 420, 421, 422, 423, 424, 425, 426, - 427, 428, 429 + 419, 0, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 403, 404, 405, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 0, 0, 0, 0, 415, 416, + 0, 0, 0, 500, 0, 0, 0, 0, 0, 0, + 0, 418, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 419, 0, 420, 421, 422, 423, 424, 425, + 426, 427, 428, 429, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 0, 0, 0, 0, + 415, 416, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 418, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 419, 0, 420, 421, 422, 423, + 424, 425, 426, 427, 428, 429, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, -620, -620, 0, 0, + 0, 0, 415, 416, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 418, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 420, 421, + 422, 423, 424, 425, 426, 427, 428, 429 }; static const yytype_int16 yycheck[] = { - 2, 285, 16, 17, 69, 27, 20, 66, 89, 28, - 2, 222, 4, 5, 6, 22, 14, 9, 10, 21, - 480, 13, 15, 15, 16, 17, 7, 378, 20, 4, - 28, 16, 17, 14, 118, 20, 7, 593, 489, 272, - 87, 88, 402, 314, 2, 56, 4, 28, 75, 82, - 442, 443, 54, 55, 307, 596, 52, 503, 311, 546, - 52, 507, 5, 6, 56, 29, 789, 21, 22, 54, - 13, 507, 74, 75, 66, 319, 69, 58, 16, 17, - 593, 691, 20, 331, 476, 477, 270, 58, 272, 761, - 82, 373, 702, 16, 10, 75, 668, 669, 105, 15, - 430, 26, 538, 25, 434, 432, 296, 437, 975, 111, - 25, 950, 394, 56, 26, 0, 54, 55, 60, 61, - 62, 63, 306, 90, 611, 117, 370, 119, 458, 62, - 457, 64, 65, 525, 16, 17, 26, 92, 20, 82, - 92, 25, 122, 473, 79, 475, 25, 474, 402, 113, - 57, 105, 58, 59, 484, 26, 483, 111, 112, 25, - 25, 25, 144, 16, 17, 332, 121, 20, 335, 121, - 337, 218, 339, 25, 341, 129, 138, 459, 90, 90, - 147, 57, 229, 116, 117, 1052, 213, 214, 442, 443, - 142, 126, 115, 105, 524, 118, 119, 753, 90, 90, - 90, 54, 55, 664, 1043, 593, 667, 90, 596, 399, - 766, 213, 214, 138, 121, 105, 92, 16, 210, 549, - 142, 548, 16, 146, 685, 148, 138, 142, 140, 442, - 443, 223, 224, 298, 214, 147, 147, 18, 91, 20, - 753, 306, 307, 290, 90, 121, 311, 819, 138, 972, - 140, 92, 975, 766, 144, 147, 147, 147, 142, 252, - 144, 242, 276, 142, 147, 144, 280, 138, 270, 316, - 272, 242, 55, 144, 276, 546, 142, 142, 142, 512, - 121, 314, 90, 955, 276, 92, 732, 733, 280, 90, - 142, 276, 284, 285, 121, 280, 288, 733, 90, 28, - 296, 147, 92, 295, 296, 298, 550, 223, 224, 557, - 797, 303, 92, 869, 121, 92, 115, 51, 90, 118, - 119, 115, 314, 879, 118, 119, 142, 511, 512, 1052, - 690, 121, 121, 105, 875, 69, 946, 295, 397, 147, - 611, 121, 280, 402, 121, 303, 147, 146, 142, 148, - 37, 38, 146, 142, 148, 147, 348, 349, 350, 351, - 352, 353, 354, 355, 810, 753, 103, 101, 102, 103, - 92, 314, 456, 348, 376, 147, 378, 92, 766, 808, - 90, 373, 324, 442, 443, 814, 846, 144, 555, 400, - 348, 128, 92, 121, 128, 353, 115, 679, 280, 118, - 119, 789, 394, 399, 125, 397, 121, 399, 400, 55, - 402, 51, 397, 805, 806, 55, 972, 402, 432, 811, - 812, 121, 773, 276, 608, 92, 121, 280, 115, 148, - 432, 118, 119, 349, 350, 351, 352, 147, 722, 92, - 432, 60, 142, 457, 63, 837, 838, 92, 840, 841, - 442, 443, 55, 434, 121, 457, 437, 400, 25, 146, - 474, 148, 142, 465, 20, 457, 142, 459, 460, 483, - 57, 801, 474, 803, 658, 802, 121, 458, 470, 501, - 434, 483, 474, 16, 101, 57, 478, 875, 107, 1045, - 743, 483, 101, 726, 475, 946, 488, 142, 92, 319, - 1056, 520, 948, 484, 458, 138, 717, 492, 790, 511, - 512, 544, 948, 546, 131, 132, 133, 510, 92, 521, - 804, 475, 520, 145, 92, 917, 797, 121, 115, 521, - 484, 118, 119, 717, 548, 817, 123, 121, 530, 520, - 891, 892, 726, 524, 92, 799, 548, 121, 940, 141, - 370, 805, 544, 121, 546, 55, 548, 811, 812, 74, - 75, 148, 139, 521, 556, 503, 37, 38, 549, 583, - 524, 142, 530, 121, 621, 58, 59, 861, 611, 432, - 862, 101, 115, 101, 972, 118, 119, 975, 602, 17, - 18, 583, 805, 57, 142, 549, 121, 535, 811, 812, - 121, 544, 604, 546, 457, 142, 121, 122, 92, 215, - 602, 887, 888, 146, 51, 148, 222, 639, 142, 611, - 90, 474, 855, 121, 122, 142, 2, 51, 4, 142, - 483, 142, 51, 9, 10, 105, 387, 121, 389, 15, - 16, 17, 121, 51, 20, 142, 928, 27, 655, 99, - 503, 15, 92, 259, 507, 13, 658, 664, 142, 121, - 667, 121, 664, 917, 1052, 667, 668, 669, 611, 90, - 140, 855, 26, 1024, 144, 16, 52, 147, 743, 63, - 15, 121, 535, 685, 105, 538, 678, 679, 690, 691, - 66, 145, 145, 695, 713, 548, 139, 142, 213, 214, - 702, 655, 142, 142, 917, 690, 142, 688, 142, 1039, - 664, 1038, 121, 667, 15, 713, 15, 688, 44, 140, - 712, 932, 15, 26, 726, 141, 147, 938, 141, 683, - 550, 685, 713, 18, 815, 115, 90, 141, 118, 119, - 799, 117, 348, 119, 141, 52, 805, 806, 139, 15, - 139, 105, 811, 812, 141, 44, 362, 139, 90, 579, - 1044, 142, 678, 57, 797, 142, 146, 586, 148, 142, - 142, 773, 142, 105, 380, 44, 596, 9, 10, 599, - 789, 15, 93, 15, 138, 14, 140, 90, 802, 15, - 144, 15, 145, 147, 732, 142, 712, 142, 790, 142, - 802, 15, 105, 142, 319, 797, 798, 799, 140, 142, - 802, 141, 119, 805, 806, 147, 139, 819, 15, 811, - 812, 139, 803, 15, 15, 817, 818, 829, 15, 115, - 832, 126, 118, 119, 210, 138, 142, 140, 126, 831, - 798, 144, 834, 55, 147, 15, 90, 223, 224, 803, - 55, 843, 844, 855, 797, 370, 142, 139, 917, 851, - 146, 105, 148, 51, 142, 53, 54, 55, 56, 142, - 862, 863, 810, 479, 480, 142, 9, 10, 142, 732, - 733, 69, 15, 16, 17, 117, 26, 20, 142, 891, - 892, 90, 142, 142, 15, 115, 140, 889, 118, 119, - 276, 144, 894, 147, 280, 144, 105, 115, 284, 285, - 118, 119, 288, 141, 47, 48, 49, 50, 834, 295, - 296, 54, 55, 142, 530, 917, 146, 303, 148, 13, - 26, 537, 521, 66, 67, 927, 928, 145, 146, 931, - 148, 140, 6, 935, 946, 992, 889, 1041, 147, 802, - 90, 894, 789, 1043, 142, 61, 90, 810, 64, 65, - 969, 816, 1040, 972, 254, 105, 975, 7, 977, 789, - 789, 105, 348, 349, 350, 351, 352, 353, 354, 355, - 90, 288, 586, 1005, 117, 969, 972, -1, 931, 296, - -1, 223, 224, -1, 90, 105, -1, 373, 138, -1, - 140, -1, -1, 995, 144, 997, 140, 147, 1000, 105, - 116, 117, -1, 147, -1, -1, 1025, -1, 394, -1, - -1, 397, 1024, 399, 1038, -1, 402, 778, 779, 780, - 140, 782, -1, 784, -1, 550, 1038, 147, 1040, 1041, - -1, -1, 138, 1052, 140, 1054, 1038, 1056, 144, 1058, - -1, 147, 284, 285, -1, 875, 432, 877, 1039, 115, - -1, 881, 118, 119, 90, -1, 442, 443, -1, 1078, - 51, 677, 53, 54, 55, 56, -1, -1, 90, 105, - -1, 457, -1, 459, 460, 1039, -1, -1, 69, 90, - 223, 224, 399, 105, 470, 948, 115, -1, 474, 118, - 119, -1, 478, -1, 105, 115, 300, 483, 118, 119, - 304, 717, 488, 62, 140, 64, 65, 349, 350, 351, - 352, 147, 354, 355, -1, 90, 90, 90, 140, 262, - 263, 264, 265, 953, 954, 147, 146, -1, 148, 140, - 105, 105, 105, 276, 90, 521, 147, 280, -1, -1, - 969, 284, 285, 972, 530, 975, 975, 977, 977, 105, - -1, 142, -1, 470, -1, -1, -1, 116, 117, 775, - -1, 478, 548, 90, -1, 140, 140, 140, -1, -1, - 556, 488, 147, 147, 147, 1038, -1, 61, 105, -1, - 64, 65, 1012, -1, 140, 1015, -1, 63, 64, 65, - -1, 147, 63, 64, 65, -1, 1025, 583, 959, 960, - 961, 962, -1, -1, -1, 821, 349, 350, 351, 352, - -1, 354, 355, 140, -1, -1, 602, 1047, 460, -1, - 147, -1, 1052, 1052, 1054, 1054, -1, 1056, 1058, 1058, - 846, 374, 116, 117, 40, 41, 42, 43, 44, 556, - 116, 117, 385, -1, -1, 116, 117, -1, 1078, 1078, - -1, 586, -1, -1, 397, 590, 63, 64, 65, 402, - 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, - 413, 414, 415, 416, -1, 418, 419, 420, 421, 422, - 423, 424, 425, 426, 427, 428, 429, 1048, -1, 432, - -1, -1, 678, 679, 63, 64, 65, -1, -1, 442, - 443, 63, 64, 65, 508, 63, 64, 65, -1, 116, - 117, 515, -1, -1, 457, -1, 932, 460, 63, 64, - 65, -1, 938, 527, -1, -1, 712, -1, -1, 472, - -1, 474, -1, 476, 477, 2, -1, 4, 5, 6, - 483, -1, -1, 63, 64, 65, 13, 116, 117, 492, - -1, -1, 495, 496, 116, 117, -1, 500, 116, 117, - 503, -1, 505, -1, 507, 508, 88, 89, -1, -1, - 101, 116, 117, -1, -1, -1, 580, 581, -1, 101, - -1, -1, 525, -1, -1, 52, -1, 896, 897, 56, - -1, -1, 535, -1, -1, 538, 116, 117, 129, 130, - 131, 132, 133, -1, 790, 548, 610, 129, 130, 131, - 132, 133, 798, 799, -1, 82, 802, -1, -1, 805, - 806, -1, 565, 566, -1, 811, 812, -1, -1, -1, - -1, 817, 818, -1, -1, -1, 678, -1, -1, -1, - 583, -1, -1, -1, -1, 831, -1, -1, 834, -1, - -1, -1, 119, -1, 789, 88, 89, 843, 844, 602, - -1, -1, 605, 972, -1, 851, -1, -1, 101, 51, - 712, 53, 54, 55, 56, -1, 862, 863, -1, -1, - -1, -1, -1, 687, -1, -1, 51, 69, 53, 54, - 55, 56, -1, 126, 127, 128, 129, 130, 131, 132, - 133, 818, -1, -1, 69, 2, -1, 4, 5, 6, - -1, -1, 94, -1, 831, -1, 13, -1, 100, 1028, - 1029, 1030, -1, 1032, 1033, -1, 843, 844, -1, 94, - -1, 917, -1, -1, 851, 678, -1, -1, 742, -1, - -1, 927, 928, 210, -1, -1, 863, 690, -1, 935, - 693, 694, -1, -1, -1, 52, -1, -1, 762, 56, - -1, 88, 89, 1072, 1073, 1074, 1075, -1, -1, 712, - -1, -1, -1, 1082, 101, -1, -1, -1, -1, -1, - 723, -1, -1, -1, -1, 82, -1, -1, -1, 732, - 733, -1, 834, -1, -1, 51, -1, 53, 54, 55, - 56, 128, 129, 130, 131, 132, 133, -1, -1, 995, - 927, 997, -1, 69, 1000, -1, -1, -1, 935, -1, - -1, 288, 119, -1, -1, -1, -1, -1, 295, 296, - -1, -1, -1, -1, 969, -1, 303, 972, 94, -1, - 975, -1, 977, -1, 100, -1, -1, 314, -1, -1, - 854, 794, 1038, -1, -1, -1, 799, 800, -1, 802, - -1, -1, 805, 806, -1, -1, 870, 810, 811, 812, - 51, -1, 53, 54, 55, 56, -1, -1, 995, -1, - 997, 348, -1, 1000, -1, -1, 353, -1, 69, -1, - 1025, 834, -1, -1, 837, 838, -1, 840, 841, -1, - -1, -1, -1, -1, -1, -1, 373, 850, -1, -1, - -1, 854, -1, 210, -1, -1, -1, 1052, -1, 1054, - -1, 1056, -1, 1058, -1, -1, -1, 394, 871, 872, - -1, -1, 399, 400, -1, 402, -1, -1, -1, -1, - -1, 884, 885, 1078, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 900, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 910, 911, 2, - -1, 4, 5, 6, 917, 442, 443, -1, -1, -1, - 13, -1, 51, -1, 53, 54, 55, 56, -1, -1, - -1, 288, 459, -1, -1, -1, -1, 940, 295, 296, - 69, -1, -1, 470, -1, 948, 303, -1, -1, -1, - -1, 478, -1, -1, 83, -1, -1, 314, -1, 52, - -1, 488, -1, 56, -1, 94, -1, -1, -1, -1, - -1, 100, 101, 102, 103, -1, -1, -1, -1, -1, - -1, -1, 51, -1, 53, 54, 55, 56, -1, 82, - -1, 348, 121, -1, 521, -1, 353, -1, -1, 128, - 69, -1, 131, 530, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 144, 373, 544, 51, 546, - 53, 54, 55, 56, -1, 94, 119, -1, -1, 556, - -1, 100, 101, 102, 103, 1038, 69, 394, 0, -1, - -1, -1, 399, 400, -1, 402, -1, -1, -1, -1, - 83, 13, 14, 15, 16, 17, 18, -1, 20, 128, - -1, 94, 131, -1, 26, 27, -1, 100, 101, 102, - 103, -1, -1, 142, -1, 37, 38, -1, 40, 41, - 42, 43, 44, -1, 611, 442, 443, -1, -1, -1, - -1, -1, -1, -1, -1, 128, -1, -1, 131, -1, - -1, -1, 459, -1, -1, -1, -1, -1, -1, -1, - -1, 144, -1, 470, -1, -1, -1, 210, -1, -1, - -1, 478, -1, -1, -1, 2, -1, 4, 90, -1, - -1, 488, -1, -1, -1, -1, 13, -1, -1, -1, - -1, -1, -1, 105, -1, -1, -1, -1, -1, -1, - -1, -1, 679, 115, -1, -1, 118, 119, -1, -1, - -1, -1, -1, 51, 521, 53, 54, 55, 56, -1, - -1, -1, -1, 530, -1, 52, 138, 139, -1, -1, - -1, 69, 144, 145, 146, 147, 148, 544, -1, 546, - -1, -1, -1, -1, -1, 288, -1, -1, -1, 556, - -1, -1, 295, 296, -1, -1, 94, -1, -1, -1, - 303, -1, 100, 101, 102, 103, -1, -1, -1, -1, - -1, 314, -1, 51, -1, 53, 54, 55, 56, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 128, 69, 119, 131, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 611, 348, 144, -1, -1, -1, - 353, -1, -1, 790, -1, -1, 94, -1, -1, -1, - 797, 798, 799, 101, 102, 103, -1, -1, 805, -1, - 373, -1, -1, -1, 811, 812, -1, -1, -1, -1, - 817, 818, -1, -1, 51, -1, 53, 54, 55, 56, - 128, 394, -1, -1, 831, -1, 399, 400, -1, 402, - -1, -1, 69, -1, -1, -1, 843, 844, -1, -1, - -1, -1, 679, -1, 851, -1, -1, -1, 85, -1, - -1, -1, -1, 210, -1, 862, 863, 94, -1, -1, - -1, -1, -1, 100, 101, 102, 103, -1, -1, 442, - 443, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 889, -1, -1, -1, 459, 894, -1, -1, - -1, 128, -1, -1, 131, -1, -1, 470, -1, -1, - -1, -1, -1, -1, -1, 478, -1, -1, -1, -1, - 917, -1, -1, -1, -1, 488, -1, -1, -1, -1, - 927, 928, -1, -1, 931, -1, -1, -1, 935, -1, - -1, 288, -1, -1, -1, -1, -1, -1, 295, 296, - -1, -1, -1, -1, -1, -1, 303, -1, 521, -1, - -1, -1, -1, 790, -1, -1, -1, 530, -1, -1, - 797, 798, 799, -1, -1, -1, -1, -1, 805, -1, - -1, 544, -1, 546, 811, 812, -1, -1, -1, -1, - 817, 818, -1, 556, -1, -1, -1, -1, 995, -1, - 997, 348, -1, 1000, 831, -1, 353, -1, -1, 2, - -1, 4, 5, 6, 7, -1, 843, 844, -1, -1, - 13, -1, -1, -1, 851, 51, 373, 53, 54, 55, - 56, -1, -1, -1, -1, 862, 863, -1, -1, -1, - -1, -1, -1, 69, -1, -1, -1, 394, 611, -1, - -1, -1, 399, -1, -1, 402, -1, -1, -1, 52, - -1, -1, 889, 56, -1, -1, -1, 894, 94, -1, - -1, -1, -1, -1, 100, 101, 102, 103, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 82, - 917, -1, -1, -1, -1, 442, 443, -1, -1, -1, - 927, 928, 128, -1, 931, 131, -1, -1, 935, -1, - -1, -1, 459, -1, 44, -1, 679, -1, -1, -1, - -1, -1, -1, 470, -1, -1, 119, -1, -1, -1, - -1, 478, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 488, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, -1, -1, -1, -1, 88, 89, - -1, -1, -1, -1, -1, -1, -1, -1, 995, -1, - 997, 101, -1, 1000, 521, -1, -1, -1, -1, -1, - -1, -1, -1, 530, -1, -1, -1, -1, -1, -1, - -1, -1, 122, -1, 124, 125, 126, 127, 128, 129, - 130, 131, 132, 133, -1, -1, -1, -1, -1, 556, - -1, -1, 142, -1, -1, -1, -1, 210, -1, -1, - 2, -1, 4, -1, -1, -1, -1, 790, -1, -1, - -1, -1, -1, -1, 797, 798, 799, -1, -1, -1, - -1, -1, 805, -1, -1, -1, -1, -1, 811, 812, - -1, -1, -1, -1, 817, 818, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 831, -1, - 52, -1, -1, 51, -1, 53, 54, 55, 56, -1, - 843, 844, -1, -1, -1, -1, -1, -1, 851, -1, - -1, 69, -1, -1, -1, 288, -1, -1, -1, 862, - 863, -1, 295, 296, -1, -1, -1, 85, -1, -1, - 303, -1, -1, -1, -1, -1, 94, -1, -1, -1, - -1, 314, 100, 101, 102, 103, 889, -1, -1, -1, - -1, 894, 679, -1, -1, -1, -1, 119, -1, 51, - -1, 53, 54, 55, 56, -1, -1, -1, -1, -1, - 128, -1, -1, 131, 917, 348, -1, 69, -1, -1, - 353, -1, -1, -1, 927, 928, -1, -1, 931, -1, - -1, -1, 935, 85, -1, -1, -1, -1, -1, -1, - 373, -1, 94, -1, -1, -1, -1, -1, 100, 101, - 102, 103, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 394, -1, -1, -1, -1, 399, 400, -1, -1, - -1, -1, -1, -1, -1, -1, 128, -1, -1, 131, - -1, -1, -1, -1, -1, -1, -1, -1, 210, -1, - -1, -1, 995, -1, 997, -1, -1, 1000, -1, -1, - -1, -1, -1, 790, -1, -1, -1, -1, -1, -1, - -1, 798, 799, -1, -1, -1, -1, -1, 805, -1, - -1, -1, -1, -1, 811, 812, 459, -1, -1, -1, - 817, 818, -1, -1, -1, -1, -1, 470, -1, -1, - -1, -1, -1, -1, 831, 478, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 488, 843, 844, -1, -1, - -1, -1, -1, -1, 851, -1, 288, -1, -1, -1, - -1, -1, -1, 295, 296, 862, 863, -1, -1, -1, - -1, 303, -1, -1, -1, -1, -1, -1, 521, -1, - -1, -1, -1, -1, -1, -1, -1, 530, -1, -1, - 72, 73, 74, 75, 76, 77, 78, -1, 80, 81, - -1, 544, -1, 546, -1, -1, 88, 89, -1, -1, - -1, -1, -1, 556, -1, -1, 348, -1, -1, 101, - 917, 353, -1, -1, -1, -1, -1, -1, -1, -1, - 927, 928, -1, -1, 931, -1, -1, -1, 935, -1, - 0, 373, 124, 125, 126, 127, 128, 129, 130, 131, - 132, 133, -1, 13, 14, 15, -1, 17, 18, -1, - 20, -1, 394, -1, -1, -1, 26, 399, 611, -1, - 402, -1, -1, -1, -1, -1, -1, 37, 38, -1, - 40, 41, 42, 43, 44, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 995, -1, - 997, -1, -1, 1000, -1, -1, -1, -1, -1, -1, - 442, 443, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, -1, -1, -1, 459, 88, 89, - 90, -1, 92, 93, -1, -1, 679, -1, 470, -1, - -1, 101, -1, -1, -1, 105, 478, -1, -1, -1, - -1, -1, -1, -1, -1, 115, 488, -1, 118, 119, - -1, 121, 122, -1, 124, 125, 126, 127, 128, 129, - 130, 131, 132, 133, -1, -1, -1, -1, 138, 139, - 140, 44, 142, -1, -1, 145, 146, 147, 148, 521, - -1, -1, -1, -1, -1, -1, -1, -1, 530, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 72, - 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, - 83, -1, -1, -1, 556, 88, 89, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 101, -1, - -1, -1, -1, -1, -1, -1, -1, 790, -1, -1, - -1, -1, -1, -1, 797, 798, -1, -1, -1, 122, - -1, 124, 125, 126, 127, 128, 129, 130, 131, 132, - 133, -1, -1, -1, 817, 818, -1, -1, -1, -1, - -1, -1, 72, 73, 74, 75, 76, 77, 831, 0, - 80, 81, -1, -1, -1, -1, -1, -1, 88, 89, - 843, 844, 13, 14, 15, -1, 17, 18, 851, 20, - -1, 101, -1, -1, -1, 26, -1, -1, -1, 862, - 863, -1, -1, -1, -1, -1, 37, 38, -1, 40, - 41, 42, 43, 44, 124, 125, 126, 127, 128, 129, - 130, 131, 132, 133, -1, -1, 889, 679, -1, -1, - -1, 894, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 72, 73, 74, 75, 76, 77, 78, 79, 80, - 81, 82, 83, -1, -1, -1, -1, 88, 89, 90, - -1, 92, 93, -1, 927, 928, -1, -1, 931, -1, - 101, -1, 935, -1, 105, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 115, -1, -1, 118, 119, -1, - 121, 122, -1, 124, 125, 126, 127, 128, 129, 130, - 131, 132, 133, -1, -1, -1, -1, 138, 139, 140, - -1, 142, -1, -1, 145, 146, 147, 148, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 995, -1, 997, -1, -1, 1000, 790, -1, - -1, -1, -1, -1, -1, -1, 798, 799, -1, -1, - -1, 51, 52, 805, -1, 55, -1, -1, -1, 811, - 812, -1, -1, -1, -1, 817, 818, -1, -1, -1, - 70, 71, 72, 73, 74, 75, 76, 77, -1, 831, - 80, 81, -1, -1, -1, -1, 86, 87, 88, 89, - -1, 843, 844, -1, -1, -1, -1, -1, -1, 851, - 100, 101, 102, -1, -1, -1, -1, -1, -1, -1, - 862, 863, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 124, 125, 126, 127, 128, 129, - 130, 131, 132, 133, -1, 135, 136, 72, 73, 74, - 75, 76, 77, 143, 144, 80, 81, -1, -1, -1, - -1, -1, -1, 88, 89, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 917, 101, -1, -1, -1, - -1, -1, -1, -1, -1, 927, 928, -1, -1, -1, - -1, -1, -1, 935, -1, -1, -1, -1, -1, 124, - 125, 126, 127, 128, 129, 130, 131, 132, 133, -1, - -1, -1, -1, -1, -1, 0, 1, -1, 3, 4, - 5, 6, 7, 8, 9, 10, 11, 12, -1, -1, - -1, -1, -1, -1, 19, -1, 21, 22, 23, 24, - -1, -1, -1, -1, -1, 30, 31, 32, 33, 34, - 35, 36, -1, 995, 39, 997, -1, -1, 1000, -1, - 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 55, 56, -1, 58, 59, 60, -1, -1, 63, -1, - -1, 66, 67, -1, 69, 70, 71, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 84, - 85, -1, -1, -1, -1, -1, 91, -1, -1, 94, - 95, -1, 97, 98, -1, 100, -1, -1, -1, 104, - -1, 106, 107, 108, -1, 110, 111, 112, 0, 114, - 115, -1, -1, 118, 119, -1, -1, -1, -1, -1, - -1, 13, 14, 15, 16, 17, 18, -1, 20, 134, - 135, 136, -1, -1, -1, 27, 28, 29, -1, -1, - -1, 146, -1, 148, -1, 37, 38, -1, 40, 41, - 42, 43, 44, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 57, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, - 82, 83, -1, -1, -1, -1, 88, 89, 90, -1, - -1, 93, -1, -1, -1, -1, -1, 99, -1, 101, - -1, -1, -1, 105, -1, -1, -1, -1, -1, -1, - -1, 113, -1, 115, -1, -1, 118, 119, -1, -1, - 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, - 132, 133, -1, -1, 0, -1, -1, 139, 140, 141, - 142, -1, -1, 145, 146, 147, 148, 13, 14, 15, - 16, 17, 18, -1, 20, -1, -1, -1, -1, -1, - 26, 27, 28, -1, -1, -1, -1, -1, -1, -1, - -1, 37, 38, -1, 40, 41, 42, 43, 44, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 72, 73, 74, 75, - 76, 77, 78, 79, 80, 81, 82, 83, -1, -1, - -1, -1, 88, 89, 90, -1, -1, 93, -1, -1, - -1, -1, -1, 99, -1, 101, -1, -1, -1, 105, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 115, - -1, -1, 118, 119, -1, -1, 122, -1, 124, 125, - 126, 127, 128, 129, 130, 131, 132, 133, -1, -1, - 0, -1, 138, 139, 140, 141, 142, -1, 144, 145, - 146, 147, 148, 13, 14, 15, 16, 17, 18, -1, - 20, -1, -1, -1, -1, -1, -1, 27, 28, -1, + 1, 88, 15, 16, 15, 16, 19, 27, 19, 65, + 1, 26, 3, 4, 5, 480, 6, 8, 9, 20, + 222, 12, 272, 14, 15, 16, 86, 87, 19, 13, + 9, 378, 489, 3, 68, 14, 118, 4, 5, 21, + 53, 54, 1, 27, 3, 12, 314, 15, 16, 402, + 6, 19, 53, 54, 432, 507, 51, 13, 81, 596, + 51, 15, 16, 789, 55, 19, 285, 57, 55, 691, + 331, 27, 73, 74, 65, 593, 319, 90, 74, 457, + 702, 74, 761, 25, 14, 53, 538, 430, 55, 26, + 81, 434, 950, 16, 437, 296, 474, 25, 307, 53, + 54, 57, 311, 546, 402, 483, 789, 270, 26, 272, + 111, 57, 15, 16, 81, 458, 19, 25, 20, 21, + 25, 503, 104, 668, 669, 507, 117, 370, 119, 122, + 473, 29, 475, 25, 975, 442, 443, 25, 68, 73, + 74, 484, 373, 306, 442, 443, 92, 59, 60, 61, + 62, 51, 79, 25, 593, 55, 0, 332, 218, 103, + 335, 121, 337, 394, 339, 25, 341, 57, 611, 229, + 548, 18, 808, 20, 138, 121, 92, 60, 814, 144, + 63, 524, 142, 28, 128, 1043, 55, 121, 122, 121, + 51, 92, 115, 58, 59, 118, 119, 142, 399, 126, + 142, 138, 104, 90, 90, 121, 549, 144, 69, 111, + 112, 1052, 213, 214, 142, 113, 144, 213, 214, 210, + 138, 214, 51, 146, 107, 148, 142, 129, 459, 144, + 290, 121, 223, 224, 142, 753, 144, 142, 90, 121, + 101, 102, 103, 969, 223, 224, 972, 125, 766, 975, + 142, 977, 242, 105, 142, 92, 316, 55, 90, 121, + 147, 147, 512, 276, 298, 276, 279, 128, 279, 270, + 142, 272, 306, 307, 819, 276, 955, 311, 546, 213, + 214, 733, 142, 90, 121, 276, 242, 92, 279, 972, + 119, 314, 975, 284, 285, 147, 557, 288, 105, 1025, + 92, 296, 58, 59, 295, 296, 55, 550, 276, 90, + 90, 279, 303, 25, 753, 147, 51, 142, 53, 54, + 55, 56, 252, 314, 946, 279, 1052, 766, 1054, 121, + 1056, 90, 1058, 140, 69, 90, 295, 690, 875, 20, + 147, 397, 90, 611, 303, 90, 402, 314, 511, 512, + 732, 733, 1078, 90, 797, 142, 57, 348, 349, 350, + 351, 352, 353, 354, 355, 57, 147, 147, 298, 1052, + 349, 350, 351, 352, 456, 376, 279, 378, 348, 101, + 555, 846, 373, 37, 38, 319, 442, 443, 147, 348, + 17, 18, 147, 145, 353, 62, 586, 64, 65, 147, + 590, 121, 147, 394, 399, 90, 397, 142, 399, 400, + 147, 402, 324, 400, 115, 887, 888, 118, 119, 432, + 105, 432, 123, 138, 802, 141, 773, 90, 810, 397, + 869, 432, 664, 400, 402, 667, 370, 121, 122, 55, + 879, 432, 105, 139, 457, 608, 457, 148, 679, 116, + 117, 442, 443, 685, 142, 140, 457, 57, 801, 288, + 803, 474, 147, 474, 465, 101, 457, 296, 459, 460, + 483, 115, 483, 474, 118, 119, 726, 140, 434, 470, + 92, 437, 483, 474, 147, 142, 501, 478, 92, 946, + 503, 90, 483, 101, 507, 658, 948, 488, 805, 121, + 520, 799, 458, 722, 811, 812, 105, 805, 121, 121, + 511, 512, 51, 811, 812, 717, 142, 121, 142, 475, + 521, 544, 535, 546, 492, 538, 16, 142, 484, 797, + 521, 92, 434, 972, 743, 548, 520, 548, 142, 530, + 62, 140, 64, 65, 891, 892, 92, 548, 147, 503, + 51, 142, 51, 544, 717, 546, 458, 548, 92, 790, + 121, 621, 521, 726, 520, 556, 948, 121, 524, 92, + 399, 530, 583, 475, 142, 121, 387, 544, 389, 546, + 510, 535, 484, 27, 51, 804, 817, 121, 611, 99, + 15, 602, 583, 549, 116, 117, 142, 13, 121, 789, + 1, 92, 3, 604, 121, 855, 1045, 8, 9, 16, + 917, 602, 90, 14, 15, 16, 550, 1056, 19, 917, + 611, 121, 524, 16, 639, 115, 92, 105, 118, 119, + 121, 862, 92, 8, 9, 586, 92, 63, 15, 14, + 145, 470, 861, 92, 611, 16, 139, 549, 101, 478, + 51, 142, 142, 145, 92, 121, 146, 658, 148, 488, + 1038, 121, 140, 664, 65, 121, 667, 668, 669, 147, + 142, 115, 121, 655, 118, 119, 142, 1024, 131, 132, + 133, 26, 664, 121, 685, 667, 319, 678, 679, 690, + 691, 142, 855, 713, 695, 92, 1039, 928, 688, 678, + 142, 702, 146, 300, 148, 15, 15, 304, 115, 743, + 115, 118, 119, 118, 119, 142, 117, 44, 119, 732, + 733, 712, 690, 90, 121, 726, 121, 556, 815, 713, + 932, 115, 688, 712, 118, 119, 938, 370, 105, 146, + 15, 148, 117, 799, 115, 90, 90, 118, 119, 805, + 806, 141, 141, 655, 18, 811, 812, 713, 141, 141, + 105, 105, 664, 92, 148, 667, 51, 139, 53, 54, + 55, 56, 773, 140, 797, 146, 15, 148, 732, 969, + 147, 683, 972, 685, 69, 975, 139, 977, 142, 802, + 141, 802, 121, 138, 26, 140, 140, 810, 139, 790, + 144, 802, 147, 147, 57, 142, 797, 798, 799, 210, + 44, 802, 142, 142, 805, 806, 142, 90, 819, 90, + 811, 812, 223, 224, 142, 1044, 817, 818, 829, 90, + 797, 832, 105, 44, 105, 1025, 15, 93, 789, 798, + 831, 14, 145, 834, 105, 15, 15, 803, 223, 224, + 90, 142, 843, 844, 855, 834, 810, 142, 90, 142, + 851, 917, 1052, 142, 1054, 105, 1056, 140, 1058, 140, + 142, 862, 863, 105, 147, 276, 147, 142, 279, 140, + 63, 64, 65, 284, 285, 15, 147, 288, 1078, 141, + 891, 892, 15, 593, 295, 296, 596, 139, 889, 15, + 140, 803, 303, 894, 15, 90, 138, 147, 140, 284, + 285, 508, 144, 15, 139, 147, 142, 550, 515, 126, + 105, 126, 889, 55, 139, 15, 917, 894, 90, 55, + 527, 15, 992, 116, 117, 948, 927, 928, 142, 142, + 931, 142, 90, 105, 935, 946, 579, 348, 349, 350, + 351, 352, 353, 354, 355, 140, 142, 105, 142, 141, + 442, 443, 147, 596, 931, 142, 599, 778, 779, 780, + 142, 782, 373, 784, 349, 350, 351, 352, 140, 354, + 355, 26, 142, 580, 581, 147, 144, 144, 521, 818, + 1005, 12, 140, 394, 476, 477, 397, 5, 399, 147, + 1041, 402, 831, 789, 995, 90, 997, 1043, 816, 1000, + 1040, 254, 26, 610, 843, 844, 6, 586, 969, 969, + 105, 972, 851, 1024, 975, 1038, 977, 1038, -1, 972, + -1, 432, 37, 38, 863, -1, -1, 1038, -1, 1040, + 1041, 442, 443, 525, -1, 90, -1, 1038, 40, 41, + 42, 43, 44, 753, -1, 140, 457, -1, 459, 460, + 105, 61, 147, -1, 64, 65, 766, 26, -1, 470, + -1, -1, -1, 474, 1025, -1, 90, 478, -1, -1, + -1, 215, 483, 1039, -1, 460, -1, 488, 222, 789, + 687, 105, -1, 138, -1, 140, -1, -1, 927, 144, + -1, 1052, 147, 1054, -1, 1056, 935, 1058, 26, -1, + 115, -1, -1, 118, 119, -1, 116, 117, 896, 897, + 521, -1, -1, -1, 138, 259, 140, 1078, -1, 530, + 144, 90, -1, 147, -1, -1, 115, 1039, -1, 118, + 119, 146, -1, 148, -1, 742, 105, 548, 959, 960, + 961, 962, 8, 9, -1, 556, 789, -1, 14, 15, + 16, -1, -1, 19, -1, 762, 995, 146, 997, 148, + -1, 1000, 90, -1, -1, 875, -1, -1, -1, 138, + 61, 140, 583, 64, 65, 144, -1, 105, 147, -1, + 46, 47, 48, 49, 972, -1, -1, 53, 54, 115, + -1, 602, 118, 119, -1, 63, 64, 65, -1, 65, + 66, -1, -1, 51, 348, 53, 54, 55, 56, -1, + 138, -1, 140, -1, -1, -1, 144, -1, 362, 147, + 146, 69, 148, -1, -1, 116, 117, 1048, 63, 64, + 65, -1, 875, -1, 877, 83, 380, -1, 881, -1, + 1028, 1029, 1030, -1, 1032, 1033, 94, 854, 116, 117, + -1, 117, 100, 101, 102, 103, -1, -1, -1, -1, + -1, -1, 972, 870, -1, 975, -1, 678, 679, -1, + -1, -1, -1, 121, 51, -1, 53, 54, 55, 56, + 128, 116, 117, 131, 1072, 1073, 1074, 1075, -1, -1, + -1, -1, 69, 678, 1082, -1, 144, -1, -1, -1, + -1, 712, 63, 64, 65, -1, 83, 63, 64, 65, + 953, 954, -1, 805, 806, -1, -1, 94, -1, 811, + 812, -1, -1, 100, 101, 102, 103, 712, 63, 64, + 65, -1, 975, -1, 977, 479, 480, -1, -1, -1, + 115, -1, 1052, 118, 119, 837, 838, -1, 840, 841, + -1, 128, -1, -1, 131, 116, 117, 223, 224, -1, + 116, 117, -1, 63, 64, 65, -1, 144, -1, 1012, + 145, 146, 1015, 148, -1, -1, -1, -1, -1, 790, + -1, 116, 117, 63, 64, 65, 530, 798, 799, -1, + -1, 802, -1, 537, 805, 806, 262, 263, 264, 265, + 811, 812, -1, -1, 1047, -1, 817, 818, -1, 1052, + 276, 1054, -1, 279, -1, 1058, 116, 117, 284, 285, + 831, -1, -1, 834, 51, 917, 53, 54, 55, 56, + -1, -1, 843, 844, -1, 1078, 116, 117, -1, -1, + 851, 51, 69, 53, 54, 55, 56, -1, 940, 834, + -1, 862, 863, 51, -1, 53, 54, 55, 56, 69, + 51, -1, 53, 54, 55, 56, -1, 94, -1, 88, + 89, 69, -1, 100, 101, 102, 103, -1, 69, -1, + -1, -1, 101, 349, 350, 351, 352, -1, 354, 355, + -1, -1, -1, -1, 115, -1, 94, 118, 119, -1, + -1, 128, 100, 94, 131, -1, 917, -1, 374, 100, + 129, 130, 131, 132, 133, 142, 927, 928, -1, 385, + -1, 142, -1, -1, 935, 146, -1, 148, -1, -1, + -1, 397, -1, 677, -1, -1, 402, 403, 404, 405, + 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, + 416, -1, 418, 419, 420, 421, 422, 423, 424, 425, + 426, 427, 428, 429, -1, -1, 432, -1, -1, -1, + -1, -1, -1, 717, -1, -1, 442, 443, -1, -1, + 88, 89, -1, -1, 995, -1, 997, -1, -1, 1000, + -1, 457, -1, 101, 460, 51, -1, 53, 54, 55, + 56, 1, -1, 3, 4, 5, 472, -1, 474, -1, + 476, 477, 12, 69, -1, -1, -1, 483, 126, 127, + 128, 129, 130, 131, 132, 133, 492, 1038, -1, 495, + 496, 775, -1, -1, 500, -1, -1, 503, 94, 505, + -1, 507, 508, -1, 51, -1, 53, 54, 55, 56, + -1, 51, -1, -1, -1, 55, -1, -1, -1, 525, + 101, 51, 69, 53, 54, 55, 56, -1, -1, 535, + -1, -1, 538, -1, -1, -1, -1, 821, -1, 69, + -1, 81, 548, -1, -1, -1, -1, 94, 129, 130, + 131, 132, 133, 100, 101, 102, 103, -1, -1, 565, + 566, -1, 846, -1, 94, -1, -1, -1, -1, -1, + 100, 101, 102, 103, -1, -1, -1, 583, -1, 119, + -1, 128, -1, -1, 131, -1, -1, -1, -1, -1, + 0, -1, -1, -1, -1, -1, 602, 144, 128, 605, + -1, 131, -1, 13, 14, 15, 16, 17, 18, -1, + 20, -1, -1, -1, -1, -1, 26, 27, -1, -1, -1, -1, -1, -1, -1, -1, -1, 37, 38, -1, 40, 41, 42, 43, 44, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 57, -1, -1, + -1, -1, 1, -1, 3, 4, 5, -1, 932, -1, + -1, -1, -1, 12, 938, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 51, -1, 53, 54, 55, 56, + 210, -1, 678, -1, -1, -1, -1, -1, -1, -1, + 90, -1, 69, -1, 690, -1, -1, 693, 694, -1, + -1, -1, 51, -1, -1, 105, 55, -1, 85, -1, + -1, -1, -1, -1, -1, 115, 712, 94, 118, 119, + -1, -1, -1, 100, 101, 102, 103, 723, -1, -1, + -1, -1, 81, -1, -1, -1, 732, 733, 138, 139, + -1, -1, -1, -1, 144, 145, 146, 147, 148, 88, + 89, 128, -1, -1, 131, -1, -1, -1, 288, -1, + -1, -1, 101, -1, -1, 295, 296, -1, -1, -1, + 119, -1, -1, 303, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 51, 314, 53, 54, 55, 56, 128, + 129, 130, 131, 132, 133, -1, -1, -1, 794, -1, + -1, 69, -1, 799, 800, -1, 802, -1, -1, 805, + 806, -1, -1, -1, 810, 811, 812, 85, 348, -1, + -1, -1, -1, 353, -1, -1, 94, -1, -1, -1, + -1, -1, 100, 101, 102, 103, -1, -1, 834, -1, + -1, 837, 838, 373, 840, 841, -1, -1, -1, -1, + -1, -1, -1, -1, 850, -1, -1, -1, 854, -1, + 128, 210, -1, 131, 394, -1, -1, -1, -1, 399, + 400, -1, 402, -1, -1, 871, 872, -1, -1, -1, + -1, -1, 51, -1, 53, 54, 55, 56, 884, 885, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, + 69, 3, 4, 5, 900, -1, -1, -1, -1, -1, + 12, -1, 442, 443, 910, 911, 85, -1, -1, -1, + -1, 917, -1, -1, -1, 94, -1, -1, -1, 459, + -1, 100, 101, 102, 103, -1, -1, -1, -1, 288, + 470, -1, -1, -1, 940, -1, 295, 296, 478, 51, + -1, -1, 948, 55, 303, -1, -1, -1, 488, 128, + -1, -1, 131, -1, -1, 314, -1, -1, -1, 51, + -1, 53, 54, 55, 56, -1, -1, -1, -1, 81, + 72, 73, 74, 75, 76, 77, 78, 69, 80, 81, + -1, 521, -1, -1, -1, -1, 88, 89, -1, 348, + 530, -1, -1, -1, 353, -1, -1, -1, -1, 101, + -1, -1, 94, -1, 544, -1, 546, 119, -1, 101, + 102, 103, -1, -1, 373, -1, 556, -1, -1, -1, + -1, 44, 124, 125, 126, 127, 128, 129, 130, 131, + 132, 133, 1038, -1, -1, 394, 128, -1, -1, -1, + 399, 400, -1, 402, -1, -1, -1, -1, -1, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, + 83, -1, -1, -1, -1, 88, 89, -1, -1, -1, + 1, 611, 3, 4, 5, 6, -1, -1, 101, -1, + -1, 12, -1, 442, 443, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 210, 122, + 459, 124, 125, 126, 127, 128, 129, 130, 131, 132, + 133, 470, -1, -1, -1, -1, -1, -1, -1, 478, + 51, -1, -1, -1, 55, -1, -1, -1, -1, 488, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 679, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, -1, -1, -1, -1, 88, 89, - 90, -1, 92, 93, -1, -1, -1, -1, -1, 99, - -1, 101, -1, -1, -1, 105, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 115, -1, -1, 118, 119, - -1, 121, 122, -1, 124, 125, 126, 127, 128, 129, - 130, 131, 132, 133, -1, -1, 0, -1, -1, 139, - 140, 141, 142, -1, -1, 145, 146, 147, 148, 13, - 14, 15, 16, 17, 18, -1, 20, -1, -1, -1, - -1, -1, 26, 27, 28, -1, -1, -1, -1, -1, - -1, -1, -1, 37, 38, -1, 40, 41, 42, 43, - 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 81, 72, 73, 74, 75, 76, 77, -1, -1, 80, + 81, -1, 521, -1, -1, -1, -1, 88, 89, -1, + -1, 530, -1, -1, -1, -1, 288, -1, -1, -1, + 101, -1, -1, 295, 296, 544, -1, 546, 119, -1, + -1, 303, -1, -1, -1, -1, -1, 556, -1, -1, + -1, -1, 314, 124, 125, 126, 127, 128, 129, 130, + 131, 132, 133, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 72, 73, - 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, - -1, -1, -1, -1, 88, 89, 90, -1, -1, 93, - -1, -1, -1, -1, -1, 99, -1, 101, -1, -1, - -1, 105, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 115, -1, -1, 118, 119, -1, -1, 122, -1, - 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, - -1, -1, 0, -1, 138, 139, 140, 141, 142, -1, - 144, 145, 146, 147, 148, 13, 14, 15, 16, 17, - 18, -1, 20, -1, -1, -1, -1, -1, -1, 27, - 28, -1, -1, -1, -1, -1, -1, -1, -1, 37, - 38, -1, 40, 41, 42, 43, 44, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 348, -1, -1, -1, + -1, 353, -1, -1, -1, -1, -1, -1, -1, -1, + 790, -1, 611, -1, -1, -1, -1, 797, 798, 799, + -1, 373, -1, -1, -1, 805, -1, -1, -1, -1, + -1, 811, 812, -1, -1, -1, -1, 817, 818, 210, + -1, -1, 394, -1, -1, -1, -1, 399, 400, -1, + 402, 831, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 843, 844, -1, -1, -1, -1, -1, + -1, 851, -1, -1, -1, -1, -1, 1, -1, 3, + 679, -1, 862, 863, -1, -1, -1, -1, 12, -1, + 442, 443, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 459, -1, 889, + -1, -1, -1, -1, 894, -1, -1, 288, 470, -1, + -1, -1, -1, -1, 295, 296, 478, 51, -1, -1, + -1, -1, 303, -1, -1, -1, 488, 917, -1, -1, + -1, -1, -1, 314, -1, -1, -1, 927, 928, -1, + -1, 931, -1, -1, -1, 935, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 521, + -1, -1, -1, -1, -1, -1, -1, 348, 530, -1, + -1, -1, 353, -1, -1, -1, -1, -1, -1, -1, + -1, 790, 544, -1, 546, 119, -1, -1, 797, 798, + 799, -1, 373, -1, 556, -1, 805, -1, -1, -1, + -1, -1, 811, 812, -1, 995, -1, 997, 817, 818, + 1000, -1, -1, 394, -1, -1, -1, -1, 399, 400, + -1, -1, 831, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 843, 844, -1, -1, -1, -1, + -1, -1, 851, -1, -1, -1, -1, -1, 1, 611, + 3, -1, -1, 862, 863, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 210, -1, 459, -1, + 889, -1, -1, -1, -1, 894, -1, -1, -1, 470, + -1, -1, -1, -1, -1, -1, -1, 478, 51, -1, + -1, -1, -1, -1, -1, -1, -1, 488, 917, -1, + -1, -1, -1, -1, -1, -1, -1, 679, 927, 928, + -1, -1, 931, -1, -1, -1, 935, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 521, -1, 72, 73, 74, 75, 76, 77, -1, 530, + 80, 81, -1, -1, 288, -1, -1, -1, 88, 89, + -1, 295, 296, 544, -1, 546, 119, -1, -1, 303, + -1, 101, -1, -1, -1, 556, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 995, -1, 997, -1, + -1, 1000, -1, -1, 124, 125, 126, 127, 128, 129, + 130, 131, 132, 133, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 348, -1, -1, -1, -1, 353, + -1, -1, -1, -1, -1, -1, -1, -1, 790, -1, + 611, -1, -1, -1, -1, 797, 798, 799, -1, 373, + -1, -1, -1, 805, -1, -1, -1, -1, -1, 811, + 812, -1, -1, -1, -1, 817, 818, 210, -1, -1, + 394, -1, -1, -1, -1, 399, -1, -1, 402, 831, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 843, 844, -1, -1, -1, -1, -1, -1, 851, + -1, -1, -1, -1, -1, -1, -1, -1, 679, -1, + 862, 863, -1, -1, -1, -1, -1, -1, 442, 443, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 459, -1, 889, -1, -1, + -1, -1, 894, -1, -1, 288, 470, -1, -1, -1, + -1, -1, 295, 296, 478, -1, -1, -1, -1, -1, + 303, -1, -1, -1, 488, 917, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 927, 928, -1, -1, 931, + -1, -1, -1, 935, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 521, -1, -1, + -1, -1, -1, -1, -1, 348, 530, -1, -1, -1, + 353, -1, -1, -1, -1, -1, -1, -1, -1, 790, + -1, -1, -1, -1, -1, -1, 797, 798, -1, -1, + 373, -1, 556, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 995, -1, 997, 817, 818, 1000, -1, + -1, 394, -1, -1, -1, -1, 399, -1, -1, 402, + 831, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 843, 844, -1, -1, -1, -1, -1, -1, + 851, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 862, 863, -1, -1, -1, -1, -1, -1, 442, + 443, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 459, -1, 889, -1, + -1, -1, -1, 894, -1, -1, -1, 470, -1, -1, + -1, -1, -1, -1, -1, 478, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 488, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 679, 927, 928, -1, -1, + 931, 44, -1, -1, 935, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 521, -1, + -1, -1, -1, -1, -1, -1, -1, 530, -1, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, + 83, -1, -1, -1, -1, 88, 89, -1, -1, -1, + -1, -1, -1, 556, -1, -1, -1, -1, 101, -1, + -1, -1, -1, -1, 995, -1, 997, -1, -1, 1000, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 122, + -1, 124, 125, 126, 127, 128, 129, 130, 131, 132, + 133, -1, -1, -1, -1, -1, -1, -1, -1, 142, + -1, -1, -1, -1, -1, -1, 790, -1, -1, -1, + -1, -1, -1, -1, 798, 799, -1, -1, -1, -1, + -1, 805, -1, -1, -1, -1, -1, 811, 812, -1, + -1, 0, -1, 817, 818, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 13, 14, 15, 831, 17, 18, + -1, 20, -1, -1, -1, -1, -1, 26, -1, 843, + 844, -1, -1, -1, -1, -1, -1, 851, 37, 38, + -1, 40, 41, 42, 43, 44, 679, -1, 862, 863, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 72, 73, 74, 75, 76, 77, - 78, 79, 80, 81, 82, 83, -1, -1, -1, -1, - 88, 89, 90, -1, -1, 93, -1, -1, -1, -1, - -1, 99, -1, 101, -1, -1, -1, 105, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 115, -1, -1, - 118, 119, -1, -1, 122, -1, 124, 125, 126, 127, - 128, 129, 130, 131, 132, 133, -1, -1, 0, -1, - -1, 139, 140, 141, 142, -1, 144, 145, 146, 147, - 148, 13, 14, 15, -1, 17, 18, -1, 20, -1, + -1, -1, -1, 72, 73, 74, 75, 76, 77, 78, + 79, 80, 81, 82, 83, -1, -1, -1, -1, 88, + 89, 90, -1, 92, 93, -1, -1, -1, -1, -1, + -1, -1, 101, 917, -1, -1, 105, -1, -1, -1, + -1, -1, -1, 927, 928, -1, 115, 931, -1, 118, + 119, 935, 121, 122, -1, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, -1, -1, -1, -1, 138, + 139, 140, -1, 142, -1, -1, 145, 146, 147, 148, + -1, -1, -1, -1, -1, -1, -1, 790, -1, -1, + -1, -1, -1, -1, -1, 798, 799, -1, -1, -1, + 51, 52, 805, -1, 55, -1, -1, -1, 811, 812, + -1, 995, -1, 997, 817, 818, 1000, -1, -1, 70, + 71, 72, 73, 74, 75, 76, 77, -1, 831, 80, + 81, -1, -1, -1, -1, 86, 87, 88, 89, -1, + 843, 844, -1, -1, -1, -1, -1, -1, 851, 100, + 101, 102, -1, -1, -1, -1, -1, -1, -1, 862, + 863, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 124, 125, 126, 127, 128, 129, 130, + 131, 132, 133, -1, 135, 136, -1, -1, -1, -1, + -1, -1, 143, 144, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 37, 38, -1, 40, 41, - 42, 43, 44, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 917, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 927, 928, -1, -1, -1, -1, + -1, -1, 935, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, - 82, 83, -1, -1, -1, -1, 88, 89, 90, -1, - 92, 93, -1, -1, -1, -1, -1, -1, -1, 101, - -1, -1, -1, 105, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 115, -1, -1, 118, 119, -1, 121, - 122, -1, 124, 125, 126, 127, 128, 129, 130, 131, - 132, 133, -1, -1, 0, -1, -1, 139, 140, -1, - 142, -1, -1, 145, 146, 147, 148, 13, 14, 15, - -1, 17, 18, -1, 20, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 37, 38, -1, 40, 41, 42, 43, 44, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 72, 73, 74, 75, - 76, 77, 78, 79, 80, 81, 82, 83, -1, -1, - -1, -1, 88, 89, 90, -1, 92, 93, -1, -1, - -1, -1, -1, -1, -1, 101, -1, -1, -1, 105, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 115, - -1, -1, 118, 119, -1, 121, 122, -1, 124, 125, - 126, 127, 128, 129, 130, 131, 132, 133, -1, -1, - -1, -1, -1, 139, 140, -1, 142, -1, -1, 145, - 146, 147, 148, 1, -1, 3, 4, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 14, 15, -1, -1, - 18, 19, -1, 21, 22, 23, 24, -1, -1, -1, - -1, -1, 30, 31, 32, 33, 34, 35, 36, -1, - -1, 39, -1, -1, -1, -1, -1, 45, -1, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, -1, - 58, 59, 60, -1, -1, 63, -1, -1, 66, 67, - -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 84, 85, -1, -1, - -1, -1, -1, 91, -1, -1, 94, 95, -1, 97, - 98, -1, 100, -1, -1, -1, 104, -1, 106, 107, - 108, -1, 110, 111, 112, -1, 114, 115, -1, -1, - 118, 119, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 134, 135, 136, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 146, 1, - 148, 3, 4, 5, 6, 7, 8, 9, 10, 11, - 12, -1, -1, 15, -1, 17, 18, 19, -1, 21, - 22, 23, 24, -1, -1, -1, -1, -1, 30, 31, - 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, - -1, -1, -1, 45, -1, 47, 48, 49, 50, 51, - 52, 53, 54, 55, 56, -1, 58, 59, 60, -1, - -1, 63, -1, -1, 66, 67, -1, 69, 70, 71, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 84, 85, -1, -1, -1, -1, -1, 91, - -1, -1, 94, 95, -1, 97, 98, -1, 100, -1, - -1, -1, 104, -1, 106, 107, 108, -1, 110, 111, - 112, -1, 114, 115, -1, -1, 118, 119, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 134, 135, 136, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 146, 1, 148, 3, 4, 5, - 6, 7, 8, 9, 10, 11, 12, -1, -1, 15, - -1, -1, 18, 19, 20, 21, 22, 23, 24, -1, + -1, -1, -1, -1, 0, 1, -1, 3, 4, 5, + 6, 7, 8, 9, 10, 11, 12, -1, -1, -1, + -1, -1, -1, 19, -1, 21, 22, 23, 24, -1, -1, -1, -1, -1, 30, 31, 32, 33, 34, 35, - 36, -1, -1, 39, -1, -1, -1, -1, -1, 45, - -1, 47, 48, 49, 50, 51, 52, 53, 54, 55, + 36, -1, 995, 39, 997, -1, -1, 1000, -1, 45, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, -1, 58, 59, 60, -1, -1, 63, -1, -1, 66, 67, -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 84, 85, -1, -1, -1, -1, -1, 91, -1, -1, 94, 95, -1, 97, 98, -1, 100, -1, -1, -1, 104, -1, - 106, 107, 108, -1, 110, 111, 112, -1, 114, 115, + 106, 107, 108, -1, 110, 111, 112, 0, 114, 115, -1, -1, 118, 119, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 134, 135, - 136, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 146, 1, 148, 3, 4, 5, 6, 7, 8, 9, - 10, 11, 12, -1, -1, 15, -1, -1, 18, 19, - -1, 21, 22, 23, 24, -1, -1, -1, -1, -1, - 30, 31, 32, 33, 34, 35, 36, -1, -1, 39, - -1, -1, -1, -1, -1, 45, -1, 47, 48, 49, - 50, 51, 52, 53, 54, 55, 56, -1, 58, 59, - 60, -1, -1, 63, -1, -1, 66, 67, -1, 69, - 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 84, 85, -1, -1, -1, -1, - -1, 91, -1, -1, 94, 95, -1, 97, 98, -1, - 100, -1, -1, -1, 104, -1, 106, 107, 108, -1, - 110, 111, 112, -1, 114, 115, -1, -1, 118, 119, - 1, -1, 3, 4, 5, 6, 7, 8, 9, 10, - 11, 12, -1, -1, 134, 135, 136, -1, 19, -1, - 21, 22, 23, 24, -1, -1, 146, -1, 148, 30, + 13, 14, 15, 16, 17, 18, -1, 20, 134, 135, + 136, -1, -1, -1, 27, 28, 29, -1, -1, -1, + 146, -1, 148, -1, 37, 38, -1, 40, 41, 42, + 43, 44, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 57, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, + 83, -1, -1, -1, -1, 88, 89, 90, -1, -1, + 93, -1, -1, -1, -1, -1, 99, -1, 101, -1, + -1, -1, 105, -1, -1, -1, -1, -1, -1, -1, + 113, -1, 115, -1, -1, 118, 119, -1, -1, 122, + 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, + 133, -1, -1, 0, -1, -1, 139, 140, 141, 142, + -1, -1, 145, 146, 147, 148, 13, 14, 15, 16, + 17, 18, -1, 20, -1, -1, -1, -1, -1, 26, + 27, 28, -1, -1, -1, -1, -1, -1, -1, -1, + 37, 38, -1, 40, 41, 42, 43, 44, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, -1, -1, -1, + -1, 88, 89, 90, -1, -1, 93, -1, -1, -1, + -1, -1, 99, -1, 101, -1, -1, -1, 105, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 115, -1, + -1, 118, 119, -1, -1, 122, -1, 124, 125, 126, + 127, 128, 129, 130, 131, 132, 133, -1, -1, 0, + -1, 138, 139, 140, 141, 142, -1, 144, 145, 146, + 147, 148, 13, 14, 15, 16, 17, 18, -1, 20, + -1, -1, -1, -1, -1, -1, 27, 28, -1, -1, + -1, -1, -1, -1, -1, -1, 37, 38, -1, 40, + 41, 42, 43, 44, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 57, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, -1, -1, -1, -1, 88, 89, 90, + -1, 92, 93, -1, -1, -1, -1, -1, 99, -1, + 101, -1, -1, -1, 105, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 115, -1, -1, 118, 119, -1, + 121, 122, -1, 124, 125, 126, 127, 128, 129, 130, + 131, 132, 133, -1, -1, 0, -1, -1, 139, 140, + 141, 142, -1, -1, 145, 146, 147, 148, 13, 14, + 15, 16, 17, 18, -1, 20, -1, -1, -1, -1, + -1, 26, 27, 28, -1, -1, -1, -1, -1, -1, + -1, -1, 37, 38, -1, 40, 41, 42, 43, 44, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 72, 73, 74, + 75, 76, 77, 78, 79, 80, 81, 82, 83, -1, + -1, -1, -1, 88, 89, 90, -1, -1, 93, -1, + -1, -1, -1, -1, 99, -1, 101, -1, -1, -1, + 105, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 115, -1, -1, 118, 119, -1, -1, 122, -1, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, -1, + -1, 0, -1, 138, 139, 140, 141, 142, -1, 144, + 145, 146, 147, 148, 13, 14, 15, 16, 17, 18, + -1, 20, -1, -1, -1, -1, -1, -1, 27, 28, + -1, -1, -1, -1, -1, -1, -1, -1, 37, 38, + -1, 40, 41, 42, 43, 44, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 72, 73, 74, 75, 76, 77, 78, + 79, 80, 81, 82, 83, -1, -1, -1, -1, 88, + 89, 90, -1, -1, 93, -1, -1, -1, -1, -1, + 99, -1, 101, -1, -1, -1, 105, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 115, -1, -1, 118, + 119, -1, -1, 122, -1, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, -1, -1, 0, -1, -1, + 139, 140, 141, 142, -1, 144, 145, 146, 147, 148, + 13, 14, 15, -1, 17, 18, -1, 20, -1, -1, + -1, -1, -1, 26, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 37, 38, -1, 40, 41, 42, + 43, 44, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, + 83, -1, -1, -1, -1, 88, 89, 90, -1, 92, + 93, -1, -1, -1, -1, -1, -1, -1, 101, -1, + -1, -1, 105, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 115, -1, -1, 118, 119, -1, 121, 122, + -1, 124, 125, 126, 127, 128, 129, 130, 131, 132, + 133, -1, -1, 0, -1, 138, 139, 140, -1, 142, + -1, -1, 145, 146, 147, 148, 13, 14, 15, -1, + 17, 18, -1, 20, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 37, 38, -1, 40, 41, 42, 43, 44, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, -1, -1, -1, + -1, 88, 89, 90, -1, 92, 93, -1, -1, -1, + -1, -1, -1, -1, 101, -1, -1, -1, 105, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 115, -1, + -1, 118, 119, -1, 121, 122, -1, 124, 125, 126, + 127, 128, 129, 130, 131, 132, 133, -1, -1, 0, + -1, -1, 139, 140, -1, 142, -1, -1, 145, 146, + 147, 148, 13, 14, 15, -1, 17, 18, -1, 20, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 37, 38, -1, 40, + 41, 42, 43, 44, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, -1, -1, -1, -1, 88, 89, 90, + -1, 92, 93, -1, -1, -1, -1, -1, -1, -1, + 101, -1, -1, -1, 105, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 115, -1, -1, 118, 119, -1, + 121, 122, -1, 124, 125, 126, 127, 128, 129, 130, + 131, 132, 133, -1, -1, -1, -1, -1, 139, 140, + -1, 142, -1, -1, 145, 146, 147, 148, 1, -1, + 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, + 13, 14, 15, -1, -1, 18, 19, -1, 21, 22, + 23, 24, -1, -1, -1, -1, -1, 30, 31, 32, + 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, + -1, -1, 45, -1, 47, 48, 49, 50, 51, 52, + 53, 54, 55, 56, -1, 58, 59, 60, -1, -1, + 63, -1, -1, 66, 67, -1, 69, 70, 71, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 84, 85, -1, -1, -1, -1, -1, 91, -1, + -1, 94, 95, -1, 97, 98, -1, 100, -1, -1, + -1, 104, -1, 106, 107, 108, -1, 110, 111, 112, + -1, 114, 115, -1, -1, 118, 119, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 134, 135, 136, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 146, 1, 148, 3, 4, 5, 6, + 7, 8, 9, 10, 11, 12, -1, -1, 15, -1, + 17, 18, 19, -1, 21, 22, 23, 24, -1, -1, + -1, -1, -1, 30, 31, 32, 33, 34, 35, 36, + -1, -1, 39, -1, -1, -1, -1, -1, 45, -1, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, + -1, 58, 59, 60, -1, -1, 63, -1, -1, 66, + 67, -1, 69, 70, 71, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 84, 85, -1, + -1, -1, -1, -1, 91, -1, -1, 94, 95, -1, + 97, 98, -1, 100, -1, -1, -1, 104, -1, 106, + 107, 108, -1, 110, 111, 112, -1, 114, 115, -1, + -1, 118, 119, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 134, 135, 136, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 146, + 1, 148, 3, 4, 5, 6, 7, 8, 9, 10, + 11, 12, -1, -1, 15, -1, -1, 18, 19, 20, + 21, 22, 23, 24, -1, -1, -1, -1, -1, 30, 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, - -1, -1, -1, -1, 45, 46, 47, 48, 49, 50, + -1, -1, -1, -1, 45, -1, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, -1, 58, 59, 60, -1, -1, 63, -1, -1, 66, 67, -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, @@ -4725,10 +4744,10 @@ static const yytype_int16 yycheck[] = -1, -1, -1, 104, -1, 106, 107, 108, -1, 110, 111, 112, -1, 114, 115, -1, -1, 118, 119, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 134, 135, 136, -1, -1, 139, -1, + -1, -1, -1, 134, 135, 136, -1, -1, -1, -1, -1, -1, -1, -1, -1, 146, 1, 148, 3, 4, - 5, 6, 7, 8, 9, 10, 11, 12, -1, 14, - 15, -1, -1, -1, 19, -1, 21, 22, 23, 24, + 5, 6, 7, 8, 9, 10, 11, 12, -1, -1, + 15, -1, -1, 18, 19, -1, 21, 22, 23, 24, -1, -1, -1, -1, -1, 30, 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, -1, -1, 45, -1, 47, 48, 49, 50, 51, 52, 53, 54, @@ -4743,298 +4762,31 @@ static const yytype_int16 yycheck[] = 135, 136, -1, 19, -1, 21, 22, 23, 24, -1, -1, 146, -1, 148, 30, 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, -1, -1, 45, - -1, 47, 48, 49, 50, 51, 52, 53, 54, 55, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, -1, 58, 59, 60, -1, -1, 63, -1, -1, 66, 67, -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 84, 85, -1, -1, -1, -1, -1, 91, -1, -1, 94, 95, -1, 97, 98, -1, 100, -1, -1, -1, 104, -1, 106, 107, 108, -1, 110, 111, 112, -1, 114, 115, - -1, -1, 118, 119, 1, -1, 3, 4, 5, 6, - 7, 8, 9, 10, 11, 12, -1, -1, 134, 135, - 136, -1, 19, -1, 21, 22, 23, 24, -1, 145, - 146, -1, 148, 30, 31, 32, 33, 34, 35, 36, - -1, -1, 39, -1, -1, -1, -1, -1, 45, -1, - 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, - -1, 58, 59, 60, -1, -1, 63, -1, -1, 66, - 67, -1, 69, 70, 71, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 84, 85, -1, - -1, -1, -1, -1, 91, -1, -1, 94, 95, -1, - 97, 98, -1, 100, -1, -1, -1, 104, -1, 106, - 107, 108, -1, 110, 111, 112, -1, 114, 115, -1, - -1, 118, 119, 1, -1, 3, 4, 5, 6, 7, - 8, 9, 10, 11, 12, -1, -1, 134, 135, 136, - -1, 19, -1, 21, 22, 23, 24, -1, 145, 146, - -1, 148, 30, 31, 32, 33, 34, 35, 36, -1, - -1, 39, -1, -1, -1, -1, -1, 45, -1, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, -1, - 58, 59, 60, -1, -1, 63, -1, -1, 66, 67, - -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 84, 85, -1, -1, - -1, -1, -1, 91, -1, -1, 94, 95, -1, 97, - 98, -1, 100, -1, -1, -1, 104, -1, 106, 107, - 108, -1, 110, 111, 112, -1, 114, 115, -1, -1, - 118, 119, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 134, 135, 136, -1, - -1, 139, -1, -1, -1, -1, -1, -1, 146, 1, - 148, 3, 4, 5, 6, 7, 8, 9, 10, 11, - 12, -1, -1, 15, -1, -1, -1, 19, -1, 21, - 22, 23, 24, -1, -1, -1, -1, -1, 30, 31, - 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, - -1, -1, -1, 45, -1, 47, 48, 49, 50, 51, - 52, 53, 54, 55, 56, -1, 58, 59, 60, -1, - -1, 63, -1, -1, 66, 67, -1, 69, 70, 71, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 84, 85, -1, -1, -1, -1, -1, 91, - -1, -1, 94, 95, -1, 97, 98, -1, 100, -1, - -1, -1, 104, -1, 106, 107, 108, -1, 110, 111, - 112, -1, 114, 115, -1, -1, 118, 119, -1, -1, - 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, - -1, -1, 134, 135, 136, -1, 19, -1, 21, 22, - 23, 24, -1, -1, 146, -1, 148, 30, 31, 32, - 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, - -1, -1, 45, 46, 47, 48, 49, 50, 51, 52, - 53, 54, 55, 56, -1, 58, 59, 60, -1, -1, - 63, -1, -1, 66, 67, -1, 69, 70, 71, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 84, 85, -1, -1, -1, -1, -1, 91, -1, - -1, 94, 95, -1, 97, 98, -1, 100, -1, -1, - -1, 104, -1, 106, 107, 108, -1, 110, 111, 112, - -1, 114, 115, -1, -1, 118, 119, -1, -1, 3, - 4, 5, 6, 7, 8, 9, 10, 11, 12, -1, - -1, 134, 135, 136, -1, 19, -1, 21, 22, 23, - 24, -1, -1, 146, -1, 148, 30, 31, 32, 33, - 34, 35, 36, -1, -1, 39, -1, -1, -1, -1, - -1, 45, -1, 47, 48, 49, 50, 51, 52, 53, - 54, 55, 56, -1, 58, 59, 60, -1, -1, 63, - -1, -1, 66, 67, -1, 69, 70, 71, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 84, 85, -1, -1, -1, -1, -1, 91, -1, -1, - 94, 95, -1, 97, 98, -1, 100, -1, -1, -1, - 104, -1, 106, 107, 108, -1, 110, 111, 112, -1, - 114, 115, -1, -1, 118, 119, -1, -1, 3, 4, - 5, 6, 7, 8, 9, 10, 11, -1, -1, -1, - 134, 135, 136, -1, 19, -1, 21, 22, 23, 24, - -1, -1, 146, -1, 148, 30, 31, 32, 33, 34, - 35, 36, -1, -1, 39, -1, -1, -1, -1, -1, - -1, -1, -1, 48, 49, 50, 51, 52, 53, 54, - 55, 56, -1, 58, 59, 60, -1, -1, 63, -1, - -1, 66, 67, -1, 69, 70, 71, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 84, - 85, -1, -1, -1, -1, -1, 91, -1, -1, 94, - 95, -1, 97, 98, -1, -1, -1, -1, -1, 104, - -1, 106, 107, 108, -1, 110, 111, 112, -1, 114, - 115, -1, -1, 118, 119, -1, -1, 3, 4, 5, - 6, 7, 8, 9, 10, 11, -1, -1, -1, 134, - 135, 136, -1, 19, -1, 21, 22, 23, 24, -1, - -1, 146, -1, 148, 30, 31, 32, 33, 34, 35, - 36, -1, -1, 39, -1, -1, -1, -1, -1, -1, - -1, -1, 48, 49, 50, 51, 52, 53, 54, 55, - 56, -1, 58, 59, 60, -1, -1, 63, -1, -1, - 66, 67, -1, 69, 70, 71, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 84, 85, - -1, -1, -1, -1, -1, 91, -1, -1, 94, 95, - -1, 97, 98, -1, -1, -1, -1, -1, 104, -1, - 106, 107, 108, -1, 110, 111, 112, -1, 114, 115, - -1, -1, 118, 119, -1, -1, 3, 4, 5, 6, - 7, 8, 9, 10, 11, -1, -1, -1, 134, 135, - 136, -1, 19, -1, 21, 22, 23, 24, -1, -1, - 146, -1, 148, 30, 31, 32, 33, 34, 35, 36, - -1, -1, 39, -1, -1, -1, -1, -1, -1, -1, - -1, 48, 49, 50, 51, 52, 53, 54, 55, 56, - -1, 58, 59, 60, -1, -1, 63, -1, -1, 66, - 67, -1, 69, 70, 71, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 84, 85, -1, - -1, -1, -1, -1, 91, -1, -1, 94, 95, -1, - 97, 98, -1, -1, -1, -1, -1, 104, -1, 106, - 107, 108, -1, 110, 111, 112, -1, 114, 115, -1, - -1, 118, 119, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 134, 135, 136, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 148, 3, 4, 5, 6, 7, 8, 9, 10, - 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, - 21, 22, 23, 24, 25, 26, -1, -1, -1, 30, - 31, 32, 33, 34, 35, 36, 37, 38, 39, -1, - -1, -1, -1, -1, 45, 46, 47, 48, 49, 50, - 51, 52, 53, 54, 55, 56, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 70, - 71, 72, 73, 74, 75, 76, 77, -1, -1, 80, - 81, -1, -1, -1, -1, 86, 87, 88, 89, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 100, - 101, 102, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 124, 125, 126, 127, 128, 129, 130, - 131, 132, 133, -1, 135, 136, -1, -1, -1, -1, - -1, -1, 143, 144, 3, 4, 5, 6, 7, 8, - 9, 10, 11, -1, -1, -1, -1, -1, -1, -1, - 19, -1, 21, 22, 23, 24, -1, 26, -1, -1, - -1, 30, 31, 32, 33, 34, 35, 36, -1, -1, - 39, -1, -1, -1, -1, -1, -1, -1, -1, 48, - 49, 50, 51, 52, 53, 54, 55, 56, -1, 58, - 59, 60, -1, -1, 63, -1, -1, 66, 67, -1, - 69, 70, 71, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 84, 85, -1, -1, -1, - -1, -1, 91, -1, -1, 94, 95, -1, 97, 98, - -1, 100, -1, 102, 103, 104, -1, 106, 107, 108, - -1, 110, 111, 112, -1, 114, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 134, 135, 136, -1, 138, - -1, -1, -1, -1, -1, 144, 3, 4, 5, 6, - 7, 8, 9, 10, 11, -1, -1, -1, -1, -1, - -1, -1, 19, -1, 21, 22, 23, 24, -1, 26, - -1, -1, -1, 30, 31, 32, 33, 34, 35, 36, - -1, -1, 39, -1, -1, -1, -1, -1, -1, -1, - -1, 48, 49, 50, 51, 52, 53, 54, 55, 56, - -1, 58, 59, 60, -1, -1, 63, -1, -1, 66, - 67, -1, 69, 70, 71, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 84, 85, -1, - -1, -1, -1, -1, 91, -1, -1, 94, 95, -1, - 97, 98, -1, 100, -1, 102, 103, 104, -1, 106, - 107, 108, -1, 110, 111, 112, -1, 114, -1, -1, - -1, -1, -1, -1, 3, 4, 5, 6, 7, 8, - 9, 10, 11, -1, -1, -1, -1, 134, 135, 136, - 19, 138, 21, 22, 23, 24, -1, 144, -1, -1, - -1, 30, 31, 32, 33, 34, 35, 36, -1, -1, - 39, -1, -1, -1, -1, -1, -1, -1, -1, 48, - 49, 50, 51, 52, 53, 54, 55, 56, -1, 58, - 59, 60, -1, -1, 63, -1, -1, 66, 67, -1, - 69, 70, 71, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 84, 85, -1, -1, -1, - -1, -1, 91, 92, -1, 94, 95, -1, 97, 98, - -1, 100, -1, 102, 103, 104, -1, 106, 107, 108, - -1, 110, 111, 112, -1, 114, -1, -1, -1, -1, - -1, -1, 121, 3, 4, 5, 6, 7, 8, 9, - 10, 11, -1, -1, -1, 134, 135, 136, -1, 19, - -1, 21, 22, 23, 24, 144, -1, -1, -1, -1, + -1, -1, 118, 119, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 134, 135, + 136, -1, -1, 139, -1, -1, -1, -1, -1, -1, + 146, 1, 148, 3, 4, 5, 6, 7, 8, 9, + 10, 11, 12, -1, 14, 15, -1, -1, -1, 19, + -1, 21, 22, 23, 24, -1, -1, -1, -1, -1, 30, 31, 32, 33, 34, 35, 36, -1, -1, 39, - -1, -1, -1, -1, -1, -1, -1, -1, 48, 49, + -1, -1, -1, -1, -1, 45, -1, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, -1, 58, 59, 60, -1, -1, 63, -1, -1, 66, 67, -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 84, 85, -1, -1, -1, -1, - -1, 91, 92, -1, 94, 95, -1, 97, 98, -1, - 100, -1, 102, 103, 104, -1, 106, 107, 108, -1, - 110, 111, 112, -1, 114, -1, -1, -1, -1, -1, - -1, 121, 3, 4, 5, 6, 7, 8, 9, 10, - 11, -1, -1, -1, 134, 135, 136, -1, 19, -1, - 21, 22, 23, 24, 144, -1, -1, -1, -1, 30, - 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, - -1, -1, -1, -1, -1, -1, -1, 48, 49, 50, - 51, 52, 53, 54, 55, 56, -1, 58, 59, 60, - -1, -1, 63, -1, -1, 66, 67, -1, 69, 70, - 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 84, 85, -1, -1, -1, -1, -1, - 91, -1, -1, 94, 95, -1, 97, 98, -1, 100, - -1, 102, 103, 104, -1, 106, 107, 108, -1, 110, - 111, 112, -1, 114, -1, -1, -1, -1, -1, -1, - 3, 4, 5, 6, 7, 8, 9, 10, 11, -1, - -1, -1, -1, 134, 135, 136, 19, -1, 21, 22, - 23, 24, -1, 144, -1, -1, -1, 30, 31, 32, - 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, - -1, -1, -1, -1, -1, 48, 49, 50, 51, 52, - 53, 54, 55, 56, -1, 58, 59, 60, -1, -1, - 63, -1, -1, 66, 67, -1, 69, 70, 71, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 84, 85, -1, -1, -1, -1, -1, 91, -1, - -1, 94, 95, -1, 97, 98, -1, 100, -1, 102, - 103, 104, -1, 106, 107, 108, -1, 110, 111, 112, - -1, 114, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 134, 135, 136, -1, -1, -1, -1, -1, -1, - -1, 144, 3, 4, 5, 6, 7, 8, 9, 10, - 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, - 21, 22, 23, 24, 25, 26, -1, -1, -1, 30, - 31, 32, 33, 34, 35, 36, 37, 38, 39, -1, - -1, -1, -1, -1, 45, 46, 47, 48, 49, 50, - 51, 52, 53, 54, 55, 56, -1, -1, -1, -1, - -1, -1, 63, -1, -1, -1, -1, -1, -1, 70, - 71, 72, 73, 74, 75, 76, 77, -1, -1, 80, - 81, -1, -1, -1, -1, 86, 87, 88, 89, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 100, - 101, 102, -1, -1, -1, -1, 107, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 124, 125, 126, 127, 128, 129, 130, - 131, 132, 133, -1, 135, 136, -1, -1, -1, -1, - -1, -1, 143, 3, 4, 5, 6, 7, 8, 9, - 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, - 20, 21, 22, 23, 24, 25, 26, -1, -1, -1, - 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, - -1, -1, -1, -1, -1, 45, 46, 47, 48, 49, - 50, 51, 52, 53, 54, 55, 56, -1, -1, -1, - -1, -1, -1, 63, -1, -1, -1, -1, -1, -1, - 70, 71, 72, 73, 74, 75, 76, 77, -1, -1, - 80, 81, -1, -1, -1, -1, 86, 87, 88, 89, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 100, 101, 102, -1, -1, -1, -1, 107, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 124, 125, 126, 127, 128, 129, - 130, 131, 132, 133, -1, 135, 136, -1, -1, -1, - -1, -1, -1, 143, 3, 4, 5, 6, 7, 8, - 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, - 19, 20, 21, 22, 23, 24, 25, 26, -1, -1, - -1, 30, 31, 32, 33, 34, 35, 36, 37, 38, - 39, -1, -1, -1, -1, -1, 45, 46, 47, 48, - 49, 50, 51, 52, -1, -1, 55, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 70, 71, 72, 73, 74, 75, 76, 77, -1, - -1, 80, 81, -1, -1, -1, -1, 86, 87, 88, - 89, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 100, 101, 102, -1, -1, -1, 106, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 124, 125, 126, 127, 128, - 129, 130, 131, 132, 133, -1, 135, 136, -1, -1, - -1, -1, -1, -1, 143, 3, 4, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, - 18, 19, 20, 21, 22, 23, 24, 25, 26, -1, - -1, -1, 30, 31, 32, 33, 34, 35, 36, 37, - 38, 39, -1, -1, -1, -1, -1, 45, 46, 47, - 48, 49, 50, 51, 52, -1, -1, 55, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 70, 71, 72, 73, 74, 75, 76, 77, - -1, -1, 80, 81, -1, -1, -1, -1, 86, 87, - 88, 89, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 100, 101, 102, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 124, 125, 126, 127, - 128, 129, 130, 131, 132, 133, -1, 135, 136, -1, - -1, -1, -1, -1, -1, 143, 3, 4, 5, 6, - 7, 8, 9, 10, 11, -1, -1, -1, -1, -1, - -1, -1, 19, -1, 21, 22, 23, 24, -1, -1, - -1, -1, -1, 30, 31, 32, 33, 34, 35, 36, - -1, -1, 39, -1, -1, -1, -1, -1, -1, -1, - -1, 48, 49, 50, 51, 52, 53, 54, 55, 56, - -1, 58, 59, 60, -1, -1, 63, -1, -1, 66, - 67, -1, 69, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 91, -1, -1, 94, 95, -1, - 97, 98, -1, -1, -1, -1, -1, 104, -1, 106, - 107, 108, -1, 110, 111, 112, -1, 114, -1, -1, - 3, 4, 5, 6, 7, 8, 9, 10, 11, -1, - -1, -1, -1, -1, -1, -1, 19, 134, 21, 22, - 23, 24, -1, -1, -1, 142, -1, 30, 31, 32, - 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, - -1, -1, -1, -1, -1, 48, 49, 50, 51, 52, - 53, 54, 55, 56, -1, 58, 59, 60, -1, -1, - 63, -1, -1, 66, 67, -1, 69, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 91, -1, - -1, 94, 95, -1, 97, 98, -1, -1, -1, -1, - -1, 104, -1, 106, 107, 108, -1, 110, 111, 112, - -1, 114, -1, -1, 3, 4, 5, 6, 7, 8, - 9, 10, 11, 12, -1, -1, -1, -1, -1, -1, - 19, 134, 21, 22, 23, 24, -1, -1, -1, 142, - -1, 30, 31, 32, 33, 34, 35, 36, -1, -1, - 39, -1, -1, -1, -1, -1, 45, 46, 47, 48, - 49, 50, 51, 52, 53, 54, 55, 56, -1, 58, - 59, 60, -1, -1, 63, -1, -1, 66, 67, -1, - 69, 70, 71, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 84, 85, -1, -1, -1, - -1, -1, 91, -1, -1, 94, 95, -1, 97, 98, - -1, 100, -1, -1, -1, 104, -1, 106, 107, 108, - -1, 110, 111, 112, -1, 114, -1, -1, -1, -1, - -1, -1, 3, 4, 5, 6, 7, 8, 9, 10, - 11, 12, -1, -1, -1, 134, 135, 136, 19, -1, - 21, 22, 23, 24, -1, -1, -1, -1, -1, 30, + -1, 91, -1, -1, 94, 95, -1, 97, 98, -1, + 100, -1, -1, -1, 104, -1, 106, 107, 108, -1, + 110, 111, 112, -1, 114, 115, -1, -1, 118, 119, + 1, -1, 3, 4, 5, 6, 7, 8, 9, 10, + 11, 12, -1, -1, 134, 135, 136, -1, 19, -1, + 21, 22, 23, 24, -1, -1, 146, -1, 148, 30, 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, -1, -1, 45, -1, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, -1, 58, 59, 60, @@ -5043,175 +4795,84 @@ static const yytype_int16 yycheck[] = -1, -1, -1, 84, 85, -1, -1, -1, -1, -1, 91, -1, -1, 94, 95, -1, 97, 98, -1, 100, -1, -1, -1, 104, -1, 106, 107, 108, -1, 110, - 111, 112, -1, 114, -1, -1, -1, -1, -1, -1, - 3, 4, 5, 6, 7, 8, 9, 10, 11, -1, - -1, -1, -1, 134, 135, 136, 19, -1, 21, 22, - 23, 24, -1, -1, -1, -1, -1, 30, 31, 32, - 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, - -1, -1, -1, -1, -1, 48, 49, 50, 51, 52, - 53, 54, 55, 56, -1, 58, 59, 60, -1, -1, - 63, -1, -1, 66, 67, -1, 69, 70, 71, -1, + 111, 112, -1, 114, 115, -1, -1, 118, 119, 1, + -1, 3, 4, 5, 6, 7, 8, 9, 10, 11, + 12, -1, -1, 134, 135, 136, -1, 19, -1, 21, + 22, 23, 24, -1, 145, 146, -1, 148, 30, 31, + 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, + -1, -1, -1, 45, -1, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, -1, 58, 59, 60, -1, + -1, 63, -1, -1, 66, 67, -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 84, 85, -1, -1, -1, -1, -1, 91, -1, - -1, 94, 95, -1, 97, 98, -1, 100, -1, 102, - 103, 104, -1, 106, 107, 108, -1, 110, 111, 112, - -1, 114, -1, -1, -1, -1, -1, -1, 3, 4, - 5, 6, 7, 8, 9, 10, 11, -1, -1, -1, - -1, 134, 135, 136, 19, -1, 21, 22, 23, 24, - -1, -1, -1, -1, -1, 30, 31, 32, 33, 34, - 35, 36, -1, -1, 39, -1, -1, -1, -1, -1, - -1, -1, -1, 48, 49, 50, 51, 52, 53, 54, - 55, 56, -1, 58, 59, 60, -1, -1, 63, -1, - -1, 66, 67, -1, 69, 70, 71, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 84, - 85, -1, -1, -1, -1, -1, 91, -1, -1, 94, - 95, -1, 97, 98, -1, 100, -1, 102, 103, 104, - -1, 106, 107, 108, -1, 110, 111, 112, -1, 114, - -1, -1, -1, -1, -1, -1, 3, 4, 5, 6, - 7, 8, 9, 10, 11, -1, -1, -1, -1, 134, - 135, 136, 19, -1, 21, 22, 23, 24, -1, -1, - -1, -1, -1, 30, 31, 32, 33, 34, 35, 36, - -1, -1, 39, -1, -1, -1, -1, -1, -1, -1, - -1, 48, 49, 50, 51, 52, 53, 54, 55, 56, - -1, 58, 59, 60, -1, -1, 63, -1, -1, 66, - 67, -1, 69, 70, 71, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 84, 85, -1, - -1, -1, -1, -1, 91, -1, -1, 94, 95, -1, - 97, 98, -1, 100, -1, 102, 103, 104, -1, 106, - 107, 108, -1, 110, 111, 112, -1, 114, -1, -1, - -1, -1, -1, -1, 3, 4, 5, 6, 7, 8, - 9, 10, 11, -1, -1, -1, -1, 134, 135, 136, - 19, -1, 21, 22, 23, 24, -1, -1, -1, -1, - -1, 30, 31, 32, 33, 34, 35, 36, -1, -1, - 39, -1, -1, -1, -1, -1, -1, -1, -1, 48, - 49, 50, 51, 52, 53, 54, 55, 56, -1, 58, - 59, 60, -1, -1, 63, -1, -1, 66, 67, -1, - 69, 70, 71, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 84, 85, -1, -1, -1, - -1, -1, 91, -1, -1, 94, 95, -1, 97, 98, - -1, 100, -1, 102, 103, 104, -1, 106, 107, 108, - -1, 110, 111, 112, -1, 114, -1, -1, -1, -1, - -1, -1, 3, 4, 5, 6, 7, 8, 9, 10, - 11, -1, -1, -1, -1, 134, 135, 136, 19, -1, - 21, 22, 23, 24, -1, -1, -1, -1, -1, 30, - 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, - -1, -1, -1, -1, -1, -1, -1, 48, 49, 50, - 51, 52, 53, 54, 55, 56, -1, 58, 59, 60, - -1, -1, 63, -1, -1, 66, 67, -1, 69, 70, - 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 84, 85, -1, -1, -1, -1, -1, - 91, -1, -1, 94, 95, -1, 97, 98, -1, 100, - -1, 102, -1, 104, -1, 106, 107, 108, -1, 110, - 111, 112, -1, 114, -1, -1, -1, -1, -1, -1, - 3, 4, 5, 6, 7, 8, 9, 10, 11, -1, - -1, -1, -1, 134, 135, 136, 19, -1, 21, 22, - 23, 24, -1, -1, -1, -1, -1, 30, 31, 32, + -1, -1, 84, 85, -1, -1, -1, -1, -1, 91, + -1, -1, 94, 95, -1, 97, 98, -1, 100, -1, + -1, -1, 104, -1, 106, 107, 108, -1, 110, 111, + 112, -1, 114, 115, -1, -1, 118, 119, 1, -1, + 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, + -1, -1, 134, 135, 136, -1, 19, -1, 21, 22, + 23, 24, -1, 145, 146, -1, 148, 30, 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, - -1, -1, -1, -1, -1, 48, 49, 50, 51, 52, - 53, 54, 55, 56, -1, 58, 59, 60, -1, -1, - 63, -1, -1, 66, 67, -1, 69, 70, 71, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 84, 85, -1, -1, -1, -1, -1, 91, -1, - -1, 94, 95, -1, 97, 98, -1, -1, -1, 102, - 103, 104, -1, 106, 107, 108, -1, 110, 111, 112, - -1, 114, -1, -1, -1, -1, -1, -1, 3, 4, - 5, 6, 7, 8, 9, 10, 11, -1, -1, -1, - -1, 134, 135, 136, 19, -1, 21, 22, 23, 24, - -1, -1, -1, -1, -1, 30, 31, 32, 33, 34, - 35, 36, -1, -1, 39, -1, -1, -1, -1, -1, - -1, -1, -1, 48, 49, 50, 51, 52, 53, 54, - 55, 56, -1, 58, 59, 60, -1, -1, 63, -1, - -1, 66, 67, -1, 69, 70, 71, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 84, - 85, -1, -1, -1, -1, -1, 91, -1, -1, 94, - 95, -1, 97, 98, -1, 100, -1, 102, -1, 104, - -1, 106, 107, 108, -1, 110, 111, 112, -1, 114, - -1, -1, -1, -1, -1, -1, 3, 4, 5, 6, - 7, 8, 9, 10, 11, -1, -1, -1, -1, 134, - 135, 136, 19, -1, 21, 22, 23, 24, -1, -1, - -1, -1, -1, 30, 31, 32, 33, 34, 35, 36, - -1, -1, 39, -1, -1, -1, -1, -1, -1, -1, - -1, 48, 49, 50, 51, 52, 53, 54, 55, 56, - -1, 58, 59, 60, -1, -1, 63, -1, -1, 66, - 67, -1, 69, 70, 71, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 84, 85, -1, - -1, -1, -1, -1, 91, -1, -1, 94, 95, -1, - 97, 98, -1, -1, -1, 102, -1, 104, -1, 106, - 107, 108, -1, 110, 111, 112, -1, 114, -1, -1, - -1, -1, -1, -1, 3, 4, 5, 6, 7, 8, - 9, 10, 11, -1, -1, -1, -1, 134, 135, 136, - 19, -1, 21, 22, 23, 24, -1, -1, -1, -1, - -1, 30, 31, 32, 33, 34, 35, 36, -1, -1, - 39, -1, -1, -1, -1, -1, -1, -1, -1, 48, - 49, 50, 51, 52, 53, 54, 55, 56, -1, 58, - 59, 60, -1, -1, 63, -1, -1, 66, 67, -1, - 69, 70, 71, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 84, 85, -1, -1, -1, - -1, -1, 91, -1, -1, 94, 95, -1, 97, 98, - -1, 100, -1, -1, -1, 104, -1, 106, 107, 108, - -1, 110, 111, 112, -1, 114, -1, -1, -1, -1, - -1, -1, 3, 4, 5, 6, 7, 8, 9, 10, - 11, -1, -1, -1, -1, 134, 135, 136, 19, -1, - 21, 22, 23, 24, -1, -1, -1, -1, -1, 30, - 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, - -1, -1, -1, -1, -1, -1, -1, 48, 49, 50, - 51, 52, 53, 54, 55, 56, -1, 58, 59, 60, - -1, -1, 63, -1, -1, 66, 67, -1, 69, 70, - 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 84, 85, -1, -1, -1, -1, -1, - 91, -1, -1, 94, 95, -1, 97, 98, -1, 100, - -1, -1, -1, 104, -1, 106, 107, 108, -1, 110, - 111, 112, -1, 114, -1, -1, -1, -1, -1, -1, - 3, 4, 5, 6, 7, 8, 9, 10, 11, -1, - -1, -1, -1, 134, 135, 136, 19, -1, 21, 22, - 23, 24, -1, -1, -1, -1, -1, 30, 31, 32, - 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, - -1, -1, -1, -1, -1, 48, 49, 50, 51, 52, + -1, -1, 45, -1, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, -1, 58, 59, 60, -1, -1, 63, -1, -1, 66, 67, -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 84, 85, -1, -1, -1, -1, -1, 91, -1, -1, 94, 95, -1, 97, 98, -1, 100, -1, -1, -1, 104, -1, 106, 107, 108, -1, 110, 111, 112, - -1, 114, -1, -1, -1, -1, -1, -1, 3, 4, - 5, 6, 7, 8, 9, 10, 11, -1, -1, -1, - -1, 134, 135, 136, 19, -1, 21, 22, 23, 24, - -1, -1, -1, -1, -1, 30, 31, 32, 33, 34, - 35, 36, -1, -1, 39, -1, -1, -1, -1, -1, - -1, -1, -1, 48, 49, 50, 51, 52, 53, 54, - 55, 56, -1, 58, 59, 60, -1, -1, 63, -1, - -1, 66, 67, -1, 69, 70, 71, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 84, - 85, -1, -1, -1, -1, -1, 91, -1, -1, 94, - 95, -1, 97, 98, -1, 100, -1, -1, -1, 104, - -1, 106, 107, 108, -1, 110, 111, 112, -1, 114, - -1, -1, -1, -1, -1, -1, 3, 4, 5, 6, - 7, 8, 9, 10, 11, -1, -1, -1, -1, 134, - 135, 136, 19, -1, 21, 22, 23, 24, -1, -1, + -1, 114, 115, -1, -1, 118, 119, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 134, 135, 136, -1, -1, 139, -1, -1, -1, + -1, -1, -1, 146, 1, 148, 3, 4, 5, 6, + 7, 8, 9, 10, 11, 12, -1, -1, 15, -1, + -1, -1, 19, -1, 21, 22, 23, 24, -1, -1, -1, -1, -1, 30, 31, 32, 33, 34, 35, 36, - -1, -1, 39, -1, -1, -1, -1, -1, -1, -1, - -1, 48, 49, 50, 51, 52, 53, 54, 55, 56, + -1, -1, 39, -1, -1, -1, -1, -1, 45, -1, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, -1, 58, 59, 60, -1, -1, 63, -1, -1, 66, 67, -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 84, 85, -1, -1, -1, -1, -1, 91, -1, -1, 94, 95, -1, 97, 98, -1, 100, -1, -1, -1, 104, -1, 106, - 107, 108, -1, 110, 111, 112, -1, 114, -1, -1, - -1, -1, -1, -1, 3, 4, 5, 6, 7, 8, - 9, 10, 11, -1, -1, -1, -1, 134, 135, 136, - 19, -1, 21, 22, 23, 24, -1, -1, -1, -1, - -1, 30, 31, 32, 33, 34, 35, 36, -1, -1, - 39, -1, -1, -1, -1, -1, -1, -1, -1, 48, + 107, 108, -1, 110, 111, 112, -1, 114, 115, -1, + -1, 118, 119, -1, -1, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, -1, -1, 134, 135, 136, + -1, 19, -1, 21, 22, 23, 24, -1, -1, 146, + -1, 148, 30, 31, 32, 33, 34, 35, 36, -1, + -1, 39, -1, -1, -1, -1, -1, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, -1, + 58, 59, 60, -1, -1, 63, -1, -1, 66, 67, + -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 84, 85, -1, -1, + -1, -1, -1, 91, -1, -1, 94, 95, -1, 97, + 98, -1, 100, -1, -1, -1, 104, -1, 106, 107, + 108, -1, 110, 111, 112, -1, 114, 115, -1, -1, + 118, 119, -1, -1, 3, 4, 5, 6, 7, 8, + 9, 10, 11, 12, -1, -1, 134, 135, 136, -1, + 19, -1, 21, 22, 23, 24, -1, -1, 146, -1, + 148, 30, 31, 32, 33, 34, 35, 36, -1, -1, + 39, -1, -1, -1, -1, -1, 45, -1, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, -1, 58, 59, 60, -1, -1, 63, -1, -1, 66, 67, -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 84, 85, -1, -1, -1, -1, -1, 91, -1, -1, 94, 95, -1, 97, 98, - -1, -1, -1, -1, -1, 104, -1, 106, 107, 108, - -1, 110, 111, 112, -1, 114, -1, -1, -1, -1, + -1, 100, -1, -1, -1, 104, -1, 106, 107, 108, + -1, 110, 111, 112, -1, 114, 115, -1, -1, 118, + 119, -1, -1, 3, 4, 5, 6, 7, 8, 9, + 10, 11, -1, -1, -1, 134, 135, 136, -1, 19, + -1, 21, 22, 23, 24, -1, -1, 146, -1, 148, + 30, 31, 32, 33, 34, 35, 36, -1, -1, 39, + -1, -1, -1, -1, -1, -1, -1, -1, 48, 49, + 50, 51, 52, 53, 54, 55, 56, -1, 58, 59, + 60, -1, -1, 63, -1, -1, 66, 67, -1, 69, + 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 84, 85, -1, -1, -1, -1, + -1, 91, -1, -1, 94, 95, -1, 97, 98, -1, + -1, -1, -1, -1, 104, -1, 106, 107, 108, -1, + 110, 111, 112, -1, 114, 115, -1, -1, 118, 119, -1, -1, 3, 4, 5, 6, 7, 8, 9, 10, - 11, -1, -1, -1, -1, 134, 135, 136, 19, -1, - 21, 22, 23, 24, -1, -1, -1, -1, -1, 30, + 11, -1, -1, -1, 134, 135, 136, -1, 19, -1, + 21, 22, 23, 24, -1, -1, 146, -1, 148, 30, 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, -1, -1, -1, -1, -1, 48, 49, 50, 51, 52, 53, 54, 55, 56, -1, 58, 59, 60, @@ -5220,124 +4881,160 @@ static const yytype_int16 yycheck[] = -1, -1, -1, 84, 85, -1, -1, -1, -1, -1, 91, -1, -1, 94, 95, -1, 97, 98, -1, -1, -1, -1, -1, 104, -1, 106, 107, 108, -1, 110, - 111, 112, -1, 114, -1, -1, -1, -1, -1, -1, - 3, 4, 5, 6, 7, 8, 9, 10, 11, -1, - -1, -1, -1, 134, 135, 136, 19, -1, 21, 22, - 23, 24, -1, -1, -1, -1, -1, 30, 31, 32, - 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, - -1, -1, -1, -1, -1, 48, 49, 50, 51, 52, - 53, 54, 55, 56, -1, 58, 59, 60, -1, -1, - 63, -1, -1, 66, 67, -1, 69, 70, 71, -1, + 111, 112, -1, 114, 115, -1, -1, 118, 119, -1, + -1, 3, 4, 5, 6, 7, 8, 9, 10, 11, + -1, -1, -1, 134, 135, 136, -1, 19, -1, 21, + 22, 23, 24, -1, -1, 146, -1, 148, 30, 31, + 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, + -1, -1, -1, -1, -1, -1, 48, 49, 50, 51, + 52, 53, 54, 55, 56, -1, 58, 59, 60, -1, + -1, 63, -1, -1, 66, 67, -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 84, 85, -1, -1, -1, -1, -1, 91, -1, - -1, 94, 95, -1, 97, 98, -1, -1, -1, -1, - -1, 104, -1, 106, 107, 108, -1, 110, 111, 112, - -1, 114, -1, -1, -1, -1, -1, -1, 3, 4, + -1, -1, 84, 85, -1, -1, -1, -1, -1, 91, + -1, -1, 94, 95, -1, 97, 98, -1, -1, -1, + -1, -1, 104, -1, 106, 107, 108, -1, 110, 111, + 112, -1, 114, 115, -1, -1, 118, 119, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 134, 135, 136, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 148, 3, 4, 5, + 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, + 26, -1, -1, -1, 30, 31, 32, 33, 34, 35, + 36, 37, 38, 39, -1, -1, -1, -1, -1, 45, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, + 56, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 70, 71, 72, 73, 74, 75, + 76, 77, -1, -1, 80, 81, -1, -1, -1, -1, + 86, 87, 88, 89, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 100, 101, 102, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 124, 125, + 126, 127, 128, 129, 130, 131, 132, 133, -1, 135, + 136, -1, -1, -1, -1, -1, -1, 143, 144, 3, + 4, 5, 6, 7, 8, 9, 10, 11, -1, -1, + -1, -1, -1, -1, -1, 19, -1, 21, 22, 23, + 24, -1, 26, -1, -1, -1, 30, 31, 32, 33, + 34, 35, 36, -1, -1, 39, -1, -1, -1, -1, + -1, -1, -1, -1, 48, 49, 50, 51, 52, 53, + 54, 55, 56, -1, 58, 59, 60, -1, -1, 63, + -1, -1, 66, 67, -1, 69, 70, 71, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 84, 85, -1, -1, -1, -1, -1, 91, -1, -1, + 94, 95, -1, 97, 98, -1, 100, -1, 102, 103, + 104, -1, 106, 107, 108, -1, 110, 111, 112, -1, + 114, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 134, 135, 136, -1, 138, -1, -1, -1, -1, -1, + 144, 3, 4, 5, 6, 7, 8, 9, 10, 11, + -1, -1, -1, -1, -1, -1, -1, 19, -1, 21, + 22, 23, 24, -1, 26, -1, -1, -1, 30, 31, + 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, + -1, -1, -1, -1, -1, -1, 48, 49, 50, 51, + 52, 53, 54, 55, 56, -1, 58, 59, 60, -1, + -1, 63, -1, -1, 66, 67, -1, 69, 70, 71, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 84, 85, -1, -1, -1, -1, -1, 91, + -1, -1, 94, 95, -1, 97, 98, -1, 100, -1, + 102, 103, 104, -1, 106, 107, 108, -1, 110, 111, + 112, -1, 114, -1, -1, -1, -1, -1, -1, 3, + 4, 5, 6, 7, 8, 9, 10, 11, -1, -1, + -1, -1, 134, 135, 136, 19, 138, 21, 22, 23, + 24, -1, 144, -1, -1, -1, 30, 31, 32, 33, + 34, 35, 36, -1, -1, 39, -1, -1, -1, -1, + -1, -1, -1, -1, 48, 49, 50, 51, 52, 53, + 54, 55, 56, -1, 58, 59, 60, -1, -1, 63, + -1, -1, 66, 67, -1, 69, 70, 71, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 84, 85, -1, -1, -1, -1, -1, 91, 92, -1, + 94, 95, -1, 97, 98, -1, 100, -1, 102, 103, + 104, -1, 106, 107, 108, -1, 110, 111, 112, -1, + 114, -1, -1, -1, -1, -1, -1, 121, 3, 4, 5, 6, 7, 8, 9, 10, 11, -1, -1, -1, - -1, 134, 135, 136, 19, -1, 21, 22, 23, 24, - -1, -1, -1, -1, -1, 30, 31, 32, 33, 34, + 134, 135, 136, -1, 19, -1, 21, 22, 23, 24, + 144, -1, -1, -1, -1, 30, 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, -1, -1, -1, -1, -1, 48, 49, 50, 51, 52, 53, 54, 55, 56, -1, 58, 59, 60, -1, -1, 63, -1, - -1, 66, 67, -1, 69, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 88, -1, -1, 91, -1, -1, 94, - 95, -1, 97, 98, -1, -1, -1, -1, -1, 104, + -1, 66, 67, -1, 69, 70, 71, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 84, + 85, -1, -1, -1, -1, -1, 91, 92, -1, 94, + 95, -1, 97, 98, -1, 100, -1, 102, 103, 104, -1, 106, 107, 108, -1, 110, 111, 112, -1, 114, - -1, -1, 3, 4, 5, 6, 7, 8, 9, 10, - 11, -1, -1, -1, -1, -1, -1, -1, 19, 134, - 21, 22, 23, 24, -1, -1, -1, -1, -1, 30, - 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, - -1, -1, -1, -1, -1, -1, -1, 48, 49, 50, - 51, 52, 53, 54, 55, 56, -1, 58, 59, 60, - -1, -1, 63, -1, -1, 66, 67, -1, 69, -1, + -1, -1, -1, -1, -1, -1, 121, 3, 4, 5, + 6, 7, 8, 9, 10, 11, -1, -1, -1, 134, + 135, 136, -1, 19, -1, 21, 22, 23, 24, 144, + -1, -1, -1, -1, 30, 31, 32, 33, 34, 35, + 36, -1, -1, 39, -1, -1, -1, -1, -1, -1, + -1, -1, 48, 49, 50, 51, 52, 53, 54, 55, + 56, -1, 58, 59, 60, -1, -1, 63, -1, -1, + 66, 67, -1, 69, 70, 71, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 84, 85, + -1, -1, -1, -1, -1, 91, -1, -1, 94, 95, + -1, 97, 98, -1, 100, -1, 102, 103, 104, -1, + 106, 107, 108, -1, 110, 111, 112, -1, 114, -1, + -1, -1, -1, -1, -1, 3, 4, 5, 6, 7, + 8, 9, 10, 11, -1, -1, -1, -1, 134, 135, + 136, 19, -1, 21, 22, 23, 24, -1, 144, -1, + -1, -1, 30, 31, 32, 33, 34, 35, 36, -1, + -1, 39, -1, -1, -1, -1, -1, -1, -1, -1, + 48, 49, 50, 51, 52, 53, 54, 55, 56, -1, + 58, 59, 60, -1, -1, 63, -1, -1, 66, 67, + -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 84, 85, -1, -1, + -1, -1, -1, 91, -1, -1, 94, 95, -1, 97, + 98, -1, 100, -1, 102, 103, 104, -1, 106, 107, + 108, -1, 110, 111, 112, -1, 114, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 91, -1, -1, 94, 95, -1, 97, 98, -1, 100, - -1, -1, -1, 104, -1, 106, 107, 108, -1, 110, - 111, 112, -1, 114, -1, -1, 3, 4, 5, 6, - 7, 8, 9, 10, 11, -1, -1, -1, -1, -1, - -1, -1, 19, 134, 21, 22, 23, 24, -1, -1, - -1, -1, -1, 30, 31, 32, 33, 34, 35, 36, - -1, -1, 39, -1, -1, -1, -1, -1, -1, -1, - -1, 48, 49, 50, 51, 52, 53, 54, 55, 56, - -1, 58, 59, 60, -1, -1, 63, -1, -1, 66, - 67, -1, 69, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 91, -1, -1, 94, 95, -1, - 97, 98, -1, 100, -1, -1, -1, 104, -1, 106, - 107, 108, -1, 110, 111, 112, -1, 114, -1, -1, - 3, 4, 5, 6, 7, 8, 9, 10, 11, -1, - -1, -1, -1, -1, -1, -1, 19, 134, 21, 22, - 23, 24, -1, -1, -1, -1, -1, 30, 31, 32, - 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, - -1, -1, -1, -1, -1, 48, 49, 50, 51, 52, - 53, 54, 55, 56, -1, 58, 59, 60, -1, -1, - 63, -1, -1, 66, 67, -1, 69, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 91, -1, - -1, 94, 95, -1, 97, 98, -1, -1, -1, -1, - -1, 104, -1, 106, 107, 108, -1, 110, 111, 112, - -1, 114, -1, -1, 3, 4, 5, 6, 7, 8, - 9, 10, 11, -1, -1, -1, -1, -1, -1, -1, - 19, 134, 21, 22, 23, 24, -1, -1, -1, -1, - -1, 30, 31, 32, 33, 34, 35, 36, -1, -1, - 39, -1, -1, -1, -1, -1, -1, -1, -1, 48, - 49, 50, 51, 52, 53, 54, 55, 56, -1, 58, - 59, 60, -1, -1, 63, -1, -1, 66, 67, -1, - 69, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 91, -1, -1, 94, 95, -1, 97, 98, - -1, -1, -1, -1, -1, 104, -1, 106, 107, 108, - -1, 110, 111, 112, -1, 114, -1, -1, 3, 4, - 5, 6, 7, 8, 9, 10, 11, -1, -1, -1, - -1, -1, -1, -1, 19, 134, 21, 22, 23, 24, - -1, -1, -1, -1, -1, 30, 31, 32, 33, 34, - 35, 36, -1, -1, 39, -1, -1, -1, -1, -1, - -1, -1, -1, 48, 49, 50, 51, 52, 53, 54, - 55, 56, -1, 58, 59, 60, -1, -1, 63, -1, - -1, 66, 67, -1, 69, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 91, -1, -1, 94, - 95, -1, 97, 98, -1, -1, -1, -1, -1, 104, - -1, 106, 107, 108, -1, 110, 111, 112, -1, 114, - -1, -1, 3, 4, 5, 6, 7, 8, 9, 10, - 11, -1, -1, -1, -1, -1, -1, -1, 19, 134, - 21, 22, 23, 24, -1, -1, -1, -1, -1, 30, - 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, - -1, -1, -1, -1, -1, -1, -1, 48, 49, 50, - 51, 52, 53, 54, 55, 56, -1, 58, 59, 60, - -1, -1, 63, -1, -1, 66, 67, -1, 69, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 91, -1, -1, 94, 95, -1, 97, 98, -1, -1, - 51, 52, -1, 104, 55, 106, 107, 108, -1, 110, - 111, 112, -1, 114, -1, -1, -1, -1, -1, 70, - 71, 72, 73, 74, 75, 76, 77, -1, -1, 80, - 81, -1, -1, 134, -1, 86, 87, 88, 89, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 100, - 101, 102, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 124, 125, 126, 127, 128, 129, 130, - 131, 132, 133, -1, 135, 136, 51, 52, -1, -1, - 55, -1, 143, 144, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 134, 135, 136, -1, + -1, -1, -1, -1, -1, -1, 144, 3, 4, 5, + 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, + 26, -1, -1, -1, 30, 31, 32, 33, 34, 35, + 36, 37, 38, 39, -1, -1, -1, -1, -1, 45, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, + 56, -1, -1, -1, -1, -1, -1, 63, -1, -1, + -1, -1, -1, -1, 70, 71, 72, 73, 74, 75, + 76, 77, -1, -1, 80, 81, -1, -1, -1, -1, + 86, 87, 88, 89, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 100, 101, 102, -1, -1, -1, + -1, 107, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 124, 125, + 126, 127, 128, 129, 130, 131, 132, 133, -1, 135, + 136, -1, -1, -1, -1, -1, -1, 143, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, -1, -1, -1, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, -1, -1, -1, -1, -1, + 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, + 55, 56, -1, -1, -1, -1, -1, -1, 63, -1, -1, -1, -1, -1, -1, 70, 71, 72, 73, 74, 75, 76, 77, -1, -1, 80, 81, -1, -1, -1, -1, 86, 87, 88, 89, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 100, 101, 102, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 107, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, -1, - 135, 136, 51, 52, -1, -1, 55, -1, 143, 144, + 135, 136, -1, -1, -1, -1, -1, -1, 143, 3, + 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, + 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, -1, -1, -1, 30, 31, 32, 33, + 34, 35, 36, 37, 38, 39, -1, -1, -1, -1, + -1, 45, 46, 47, 48, 49, 50, 51, 52, -1, + -1, 55, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 70, 71, 72, 73, + 74, 75, 76, 77, -1, -1, 80, 81, -1, -1, + -1, -1, 86, 87, 88, 89, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 100, 101, 102, -1, + -1, -1, 106, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 70, 71, 72, 73, 74, 75, 76, 77, -1, - -1, 80, 81, -1, -1, -1, -1, 86, 87, 88, - 89, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 100, 101, 102, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 124, 125, 126, 127, 128, - 129, 130, 131, 132, 133, -1, 135, 136, 51, 52, - -1, -1, 55, -1, 143, 144, -1, -1, -1, -1, + 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, + -1, 135, 136, -1, -1, -1, -1, -1, -1, 143, + 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, + 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, + 23, 24, 25, 26, -1, -1, -1, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, -1, -1, -1, + -1, -1, 45, 46, 47, 48, 49, 50, 51, 52, + -1, -1, 55, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 70, 71, 72, 73, 74, 75, 76, 77, -1, -1, 80, 81, -1, -1, -1, -1, 86, 87, 88, 89, -1, -1, -1, @@ -5345,187 +5042,535 @@ static const yytype_int16 yycheck[] = -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 124, 125, 126, 127, 128, 129, 130, 131, 132, - 133, -1, 135, 136, 51, 52, -1, -1, 55, -1, - 143, 144, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 70, 71, 72, 73, 74, 75, 76, - 77, -1, -1, 80, 81, -1, -1, -1, -1, 86, - 87, 88, 89, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 100, 101, 102, -1, -1, -1, -1, + 133, -1, 135, 136, -1, -1, -1, -1, -1, -1, + 143, 3, 4, 5, 6, 7, 8, 9, 10, 11, + -1, -1, -1, -1, -1, -1, -1, 19, -1, 21, + 22, 23, 24, -1, -1, -1, -1, -1, 30, 31, + 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, + -1, -1, -1, -1, -1, -1, 48, 49, 50, 51, + 52, 53, 54, 55, 56, -1, 58, 59, 60, -1, + -1, 63, -1, -1, 66, 67, -1, 69, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 124, 125, 126, - 127, 128, 129, 130, 131, 132, 133, -1, 135, 136, - 51, 52, -1, -1, 55, -1, 143, 144, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 70, - 71, 72, 73, 74, 75, 76, 77, -1, -1, 80, - 81, -1, -1, -1, -1, 86, 87, 88, 89, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 100, - 101, 102, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 91, + -1, -1, 94, 95, -1, 97, 98, -1, -1, -1, + -1, -1, 104, -1, 106, 107, 108, -1, 110, 111, + 112, -1, 114, -1, -1, 3, 4, 5, 6, 7, + 8, 9, 10, 11, -1, -1, -1, -1, -1, -1, + -1, 19, 134, 21, 22, 23, 24, -1, -1, -1, + 142, -1, 30, 31, 32, 33, 34, 35, 36, -1, + -1, 39, -1, -1, -1, -1, -1, -1, -1, -1, + 48, 49, 50, 51, 52, 53, 54, 55, 56, -1, + 58, 59, 60, -1, -1, 63, -1, -1, 66, 67, + -1, 69, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 124, 125, 126, 127, 128, 129, 130, - 131, 132, 133, -1, 135, 136, 51, 52, -1, -1, - 55, -1, 143, 144, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 70, 71, 72, 73, 74, - 75, 76, 77, -1, -1, 80, 81, -1, -1, -1, - -1, 86, 87, 88, 89, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 100, 101, 102, -1, -1, + -1, -1, -1, 91, -1, -1, 94, 95, -1, 97, + 98, -1, -1, -1, -1, -1, 104, -1, 106, 107, + 108, -1, 110, 111, 112, -1, 114, -1, -1, 3, + 4, 5, 6, 7, 8, 9, 10, 11, 12, -1, + -1, -1, -1, -1, -1, 19, 134, 21, 22, 23, + 24, -1, -1, -1, 142, -1, 30, 31, 32, 33, + 34, 35, 36, -1, -1, 39, -1, -1, -1, -1, + -1, 45, 46, 47, 48, 49, 50, 51, 52, 53, + 54, 55, 56, -1, 58, 59, 60, -1, -1, 63, + -1, -1, 66, 67, -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 124, - 125, 126, 127, 128, 129, 130, 131, 132, 133, -1, - 135, 136, 51, 52, -1, -1, 55, -1, 143, 144, + 84, 85, -1, -1, -1, -1, -1, 91, -1, -1, + 94, 95, -1, 97, 98, -1, 100, -1, -1, -1, + 104, -1, 106, 107, 108, -1, 110, 111, 112, -1, + 114, -1, -1, -1, -1, -1, -1, 3, 4, 5, + 6, 7, 8, 9, 10, 11, 12, -1, -1, -1, + 134, 135, 136, 19, -1, 21, 22, 23, 24, -1, + -1, -1, -1, -1, 30, 31, 32, 33, 34, 35, + 36, -1, -1, 39, -1, -1, -1, -1, -1, 45, + -1, 47, 48, 49, 50, 51, 52, 53, 54, 55, + 56, -1, 58, 59, 60, -1, -1, 63, -1, -1, + 66, 67, -1, 69, 70, 71, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 84, 85, + -1, -1, -1, -1, -1, 91, -1, -1, 94, 95, + -1, 97, 98, -1, 100, -1, -1, -1, 104, -1, + 106, 107, 108, -1, 110, 111, 112, -1, 114, -1, + -1, -1, -1, -1, -1, 3, 4, 5, 6, 7, + 8, 9, 10, 11, -1, -1, -1, -1, 134, 135, + 136, 19, -1, 21, 22, 23, 24, -1, -1, -1, + -1, -1, 30, 31, 32, 33, 34, 35, 36, -1, + -1, 39, -1, -1, -1, -1, -1, -1, -1, -1, + 48, 49, 50, 51, 52, 53, 54, 55, 56, -1, + 58, 59, 60, -1, -1, 63, -1, -1, 66, 67, + -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 84, 85, -1, -1, + -1, -1, -1, 91, -1, -1, 94, 95, -1, 97, + 98, -1, 100, -1, 102, 103, 104, -1, 106, 107, + 108, -1, 110, 111, 112, -1, 114, -1, -1, -1, + -1, -1, -1, 3, 4, 5, 6, 7, 8, 9, + 10, 11, -1, -1, -1, -1, 134, 135, 136, 19, + -1, 21, 22, 23, 24, -1, -1, -1, -1, -1, + 30, 31, 32, 33, 34, 35, 36, -1, -1, 39, + -1, -1, -1, -1, -1, -1, -1, -1, 48, 49, + 50, 51, 52, 53, 54, 55, 56, -1, 58, 59, + 60, -1, -1, 63, -1, -1, 66, 67, -1, 69, + 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 84, 85, -1, -1, -1, -1, + -1, 91, -1, -1, 94, 95, -1, 97, 98, -1, + 100, -1, 102, 103, 104, -1, 106, 107, 108, -1, + 110, 111, 112, -1, 114, -1, -1, -1, -1, -1, + -1, 3, 4, 5, 6, 7, 8, 9, 10, 11, + -1, -1, -1, -1, 134, 135, 136, 19, -1, 21, + 22, 23, 24, -1, -1, -1, -1, -1, 30, 31, + 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, + -1, -1, -1, -1, -1, -1, 48, 49, 50, 51, + 52, 53, 54, 55, 56, -1, 58, 59, 60, -1, + -1, 63, -1, -1, 66, 67, -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 70, 71, 72, 73, 74, 75, 76, 77, -1, - -1, 80, 81, -1, -1, -1, -1, 86, 87, 88, - 89, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 100, 101, 102, -1, -1, -1, -1, -1, -1, + -1, -1, 84, 85, -1, -1, -1, -1, -1, 91, + -1, -1, 94, 95, -1, 97, 98, -1, 100, -1, + 102, 103, 104, -1, 106, 107, 108, -1, 110, 111, + 112, -1, 114, -1, -1, -1, -1, -1, -1, 3, + 4, 5, 6, 7, 8, 9, 10, 11, -1, -1, + -1, -1, 134, 135, 136, 19, -1, 21, 22, 23, + 24, -1, -1, -1, -1, -1, 30, 31, 32, 33, + 34, 35, 36, -1, -1, 39, -1, -1, -1, -1, + -1, -1, -1, -1, 48, 49, 50, 51, 52, 53, + 54, 55, 56, -1, 58, 59, 60, -1, -1, 63, + -1, -1, 66, 67, -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 124, 125, 126, 127, 128, - 129, 130, 131, 132, 133, -1, 135, 136, 51, 52, - -1, -1, 55, -1, 143, 144, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 70, 71, 72, - 73, 74, 75, 76, 77, -1, -1, 80, 81, -1, - -1, -1, -1, 86, 87, 88, 89, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 100, 101, 102, + 84, 85, -1, -1, -1, -1, -1, 91, -1, -1, + 94, 95, -1, 97, 98, -1, 100, -1, 102, 103, + 104, -1, 106, 107, 108, -1, 110, 111, 112, -1, + 114, -1, -1, -1, -1, -1, -1, 3, 4, 5, + 6, 7, 8, 9, 10, 11, -1, -1, -1, -1, + 134, 135, 136, 19, -1, 21, 22, 23, 24, -1, + -1, -1, -1, -1, 30, 31, 32, 33, 34, 35, + 36, -1, -1, 39, -1, -1, -1, -1, -1, -1, + -1, -1, 48, 49, 50, 51, 52, 53, 54, 55, + 56, -1, 58, 59, 60, -1, -1, 63, -1, -1, + 66, 67, -1, 69, 70, 71, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 84, 85, + -1, -1, -1, -1, -1, 91, -1, -1, 94, 95, + -1, 97, 98, -1, 100, -1, 102, -1, 104, -1, + 106, 107, 108, -1, 110, 111, 112, -1, 114, -1, + -1, -1, -1, -1, -1, 3, 4, 5, 6, 7, + 8, 9, 10, 11, -1, -1, -1, -1, 134, 135, + 136, 19, -1, 21, 22, 23, 24, -1, -1, -1, + -1, -1, 30, 31, 32, 33, 34, 35, 36, -1, + -1, 39, -1, -1, -1, -1, -1, -1, -1, -1, + 48, 49, 50, 51, 52, 53, 54, 55, 56, -1, + 58, 59, 60, -1, -1, 63, -1, -1, 66, 67, + -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 84, 85, -1, -1, + -1, -1, -1, 91, -1, -1, 94, 95, -1, 97, + 98, -1, -1, -1, 102, 103, 104, -1, 106, 107, + 108, -1, 110, 111, 112, -1, 114, -1, -1, -1, + -1, -1, -1, 3, 4, 5, 6, 7, 8, 9, + 10, 11, -1, -1, -1, -1, 134, 135, 136, 19, + -1, 21, 22, 23, 24, -1, -1, -1, -1, -1, + 30, 31, 32, 33, 34, 35, 36, -1, -1, 39, + -1, -1, -1, -1, -1, -1, -1, -1, 48, 49, + 50, 51, 52, 53, 54, 55, 56, -1, 58, 59, + 60, -1, -1, 63, -1, -1, 66, 67, -1, 69, + 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 84, 85, -1, -1, -1, -1, + -1, 91, -1, -1, 94, 95, -1, 97, 98, -1, + 100, -1, 102, -1, 104, -1, 106, 107, 108, -1, + 110, 111, 112, -1, 114, -1, -1, -1, -1, -1, + -1, 3, 4, 5, 6, 7, 8, 9, 10, 11, + -1, -1, -1, -1, 134, 135, 136, 19, -1, 21, + 22, 23, 24, -1, -1, -1, -1, -1, 30, 31, + 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, + -1, -1, -1, -1, -1, -1, 48, 49, 50, 51, + 52, 53, 54, 55, 56, -1, 58, 59, 60, -1, + -1, 63, -1, -1, 66, 67, -1, 69, 70, 71, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 84, 85, -1, -1, -1, -1, -1, 91, + -1, -1, 94, 95, -1, 97, 98, -1, -1, -1, + 102, -1, 104, -1, 106, 107, 108, -1, 110, 111, + 112, -1, 114, -1, -1, -1, -1, -1, -1, 3, + 4, 5, 6, 7, 8, 9, 10, 11, -1, -1, + -1, -1, 134, 135, 136, 19, -1, 21, 22, 23, + 24, -1, -1, -1, -1, -1, 30, 31, 32, 33, + 34, 35, 36, -1, -1, 39, -1, -1, -1, -1, + -1, -1, -1, -1, 48, 49, 50, 51, 52, 53, + 54, 55, 56, -1, 58, 59, 60, -1, -1, 63, + -1, -1, 66, 67, -1, 69, 70, 71, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 84, 85, -1, -1, -1, -1, -1, 91, -1, -1, + 94, 95, -1, 97, 98, -1, 100, -1, -1, -1, + 104, -1, 106, 107, 108, -1, 110, 111, 112, -1, + 114, -1, -1, -1, -1, -1, -1, 3, 4, 5, + 6, 7, 8, 9, 10, 11, -1, -1, -1, -1, + 134, 135, 136, 19, -1, 21, 22, 23, 24, -1, + -1, -1, -1, -1, 30, 31, 32, 33, 34, 35, + 36, -1, -1, 39, -1, -1, -1, -1, -1, -1, + -1, -1, 48, 49, 50, 51, 52, 53, 54, 55, + 56, -1, 58, 59, 60, -1, -1, 63, -1, -1, + 66, 67, -1, 69, 70, 71, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 84, 85, + -1, -1, -1, -1, -1, 91, -1, -1, 94, 95, + -1, 97, 98, -1, 100, -1, -1, -1, 104, -1, + 106, 107, 108, -1, 110, 111, 112, -1, 114, -1, + -1, -1, -1, -1, -1, 3, 4, 5, 6, 7, + 8, 9, 10, 11, -1, -1, -1, -1, 134, 135, + 136, 19, -1, 21, 22, 23, 24, -1, -1, -1, + -1, -1, 30, 31, 32, 33, 34, 35, 36, -1, + -1, 39, -1, -1, -1, -1, -1, -1, -1, -1, + 48, 49, 50, 51, 52, 53, 54, 55, 56, -1, + 58, 59, 60, -1, -1, 63, -1, -1, 66, 67, + -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 84, 85, -1, -1, + -1, -1, -1, 91, -1, -1, 94, 95, -1, 97, + 98, -1, 100, -1, -1, -1, 104, -1, 106, 107, + 108, -1, 110, 111, 112, -1, 114, -1, -1, -1, + -1, -1, -1, 3, 4, 5, 6, 7, 8, 9, + 10, 11, -1, -1, -1, -1, 134, 135, 136, 19, + -1, 21, 22, 23, 24, -1, -1, -1, -1, -1, + 30, 31, 32, 33, 34, 35, 36, -1, -1, 39, + -1, -1, -1, -1, -1, -1, -1, -1, 48, 49, + 50, 51, 52, 53, 54, 55, 56, -1, 58, 59, + 60, -1, -1, 63, -1, -1, 66, 67, -1, 69, + 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 84, 85, -1, -1, -1, -1, + -1, 91, -1, -1, 94, 95, -1, 97, 98, -1, + 100, -1, -1, -1, 104, -1, 106, 107, 108, -1, + 110, 111, 112, -1, 114, -1, -1, -1, -1, -1, + -1, 3, 4, 5, 6, 7, 8, 9, 10, 11, + -1, -1, -1, -1, 134, 135, 136, 19, -1, 21, + 22, 23, 24, -1, -1, -1, -1, -1, 30, 31, + 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, + -1, -1, -1, -1, -1, -1, 48, 49, 50, 51, + 52, 53, 54, 55, 56, -1, 58, 59, 60, -1, + -1, 63, -1, -1, 66, 67, -1, 69, 70, 71, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 84, 85, -1, -1, -1, -1, -1, 91, + -1, -1, 94, 95, -1, 97, 98, -1, 100, -1, + -1, -1, 104, -1, 106, 107, 108, -1, 110, 111, + 112, -1, 114, -1, -1, -1, -1, -1, -1, 3, + 4, 5, 6, 7, 8, 9, 10, 11, -1, -1, + -1, -1, 134, 135, 136, 19, -1, 21, 22, 23, + 24, -1, -1, -1, -1, -1, 30, 31, 32, 33, + 34, 35, 36, -1, -1, 39, -1, -1, -1, -1, + -1, -1, -1, -1, 48, 49, 50, 51, 52, 53, + 54, 55, 56, -1, 58, 59, 60, -1, -1, 63, + -1, -1, 66, 67, -1, 69, 70, 71, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 84, 85, -1, -1, -1, -1, -1, 91, -1, -1, + 94, 95, -1, 97, 98, -1, -1, -1, -1, -1, + 104, -1, 106, 107, 108, -1, 110, 111, 112, -1, + 114, -1, -1, -1, -1, -1, -1, 3, 4, 5, + 6, 7, 8, 9, 10, 11, -1, -1, -1, -1, + 134, 135, 136, 19, -1, 21, 22, 23, 24, -1, + -1, -1, -1, -1, 30, 31, 32, 33, 34, 35, + 36, -1, -1, 39, -1, -1, -1, -1, -1, -1, + -1, -1, 48, 49, 50, 51, 52, 53, 54, 55, + 56, -1, 58, 59, 60, -1, -1, 63, -1, -1, + 66, 67, -1, 69, 70, 71, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 84, 85, + -1, -1, -1, -1, -1, 91, -1, -1, 94, 95, + -1, 97, 98, -1, -1, -1, -1, -1, 104, -1, + 106, 107, 108, -1, 110, 111, 112, -1, 114, -1, + -1, -1, -1, -1, -1, 3, 4, 5, 6, 7, + 8, 9, 10, 11, -1, -1, -1, -1, 134, 135, + 136, 19, -1, 21, 22, 23, 24, -1, -1, -1, + -1, -1, 30, 31, 32, 33, 34, 35, 36, -1, + -1, 39, -1, -1, -1, -1, -1, -1, -1, -1, + 48, 49, 50, 51, 52, 53, 54, 55, 56, -1, + 58, 59, 60, -1, -1, 63, -1, -1, 66, 67, + -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 84, 85, -1, -1, + -1, -1, -1, 91, -1, -1, 94, 95, -1, 97, + 98, -1, -1, -1, -1, -1, 104, -1, 106, 107, + 108, -1, 110, 111, 112, -1, 114, -1, -1, -1, + -1, -1, -1, 3, 4, 5, 6, 7, 8, 9, + 10, 11, -1, -1, -1, -1, 134, 135, 136, 19, + -1, 21, 22, 23, 24, -1, -1, -1, -1, -1, + 30, 31, 32, 33, 34, 35, 36, -1, -1, 39, + -1, -1, -1, -1, -1, -1, -1, -1, 48, 49, + 50, 51, 52, 53, 54, 55, 56, -1, 58, 59, + 60, -1, -1, 63, -1, -1, 66, 67, -1, 69, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 88, -1, + -1, 91, -1, -1, 94, 95, -1, 97, 98, -1, + -1, -1, -1, -1, 104, -1, 106, 107, 108, -1, + 110, 111, 112, -1, 114, -1, -1, 3, 4, 5, + 6, 7, 8, 9, 10, 11, -1, -1, -1, -1, + -1, -1, -1, 19, 134, 21, 22, 23, 24, -1, + -1, -1, -1, -1, 30, 31, 32, 33, 34, 35, + 36, -1, -1, 39, -1, -1, -1, -1, -1, -1, + -1, -1, 48, 49, 50, 51, 52, 53, 54, 55, + 56, -1, 58, 59, 60, -1, -1, 63, -1, -1, + 66, 67, -1, 69, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 91, -1, -1, 94, 95, + -1, 97, 98, -1, 100, -1, -1, -1, 104, -1, + 106, 107, 108, -1, 110, 111, 112, -1, 114, -1, + -1, 3, 4, 5, 6, 7, 8, 9, 10, 11, + -1, -1, -1, -1, -1, -1, -1, 19, 134, 21, + 22, 23, 24, -1, -1, -1, -1, -1, 30, 31, + 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, + -1, -1, -1, -1, -1, -1, 48, 49, 50, 51, + 52, 53, 54, 55, 56, -1, 58, 59, 60, -1, + -1, 63, -1, -1, 66, 67, -1, 69, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 91, + -1, -1, 94, 95, -1, 97, 98, -1, 100, -1, + -1, -1, 104, -1, 106, 107, 108, -1, 110, 111, + 112, -1, 114, -1, -1, 3, 4, 5, 6, 7, + 8, 9, 10, 11, -1, -1, -1, -1, -1, -1, + -1, 19, 134, 21, 22, 23, 24, -1, -1, -1, + -1, -1, 30, 31, 32, 33, 34, 35, 36, -1, + -1, 39, -1, -1, -1, -1, -1, -1, -1, -1, + 48, 49, 50, 51, 52, 53, 54, 55, 56, -1, + 58, 59, 60, -1, -1, 63, -1, -1, 66, 67, + -1, 69, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 91, -1, -1, 94, 95, -1, 97, + 98, -1, -1, -1, -1, -1, 104, -1, 106, 107, + 108, -1, 110, 111, 112, -1, 114, -1, -1, 3, + 4, 5, 6, 7, 8, 9, 10, 11, -1, -1, + -1, -1, -1, -1, -1, 19, 134, 21, 22, 23, + 24, -1, -1, -1, -1, -1, 30, 31, 32, 33, + 34, 35, 36, -1, -1, 39, -1, -1, -1, -1, + -1, -1, -1, -1, 48, 49, 50, 51, 52, 53, + 54, 55, 56, -1, 58, 59, 60, -1, -1, 63, + -1, -1, 66, 67, -1, 69, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 91, -1, -1, + 94, 95, -1, 97, 98, -1, -1, -1, -1, -1, + 104, -1, 106, 107, 108, -1, 110, 111, 112, -1, + 114, -1, -1, 3, 4, 5, 6, 7, 8, 9, + 10, 11, -1, -1, -1, -1, -1, -1, -1, 19, + 134, 21, 22, 23, 24, -1, -1, -1, -1, -1, + 30, 31, 32, 33, 34, 35, 36, -1, -1, 39, + -1, -1, -1, -1, -1, -1, -1, -1, 48, 49, + 50, 51, 52, 53, 54, 55, 56, -1, 58, 59, + 60, -1, -1, 63, -1, -1, 66, 67, -1, 69, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 124, 125, 126, 127, 128, 129, 130, 131, 132, - 133, -1, 135, 136, 51, 52, -1, -1, 55, -1, - 143, 144, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 70, 71, 72, 73, 74, 75, 76, - 77, -1, -1, 80, 81, -1, -1, -1, -1, 86, - 87, 88, 89, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 100, 101, 102, -1, -1, -1, -1, + -1, 91, -1, -1, 94, 95, -1, 97, 98, -1, + -1, -1, -1, -1, 104, -1, 106, 107, 108, -1, + 110, 111, 112, -1, 114, -1, -1, 3, 4, 5, + 6, 7, 8, 9, 10, 11, -1, -1, -1, -1, + -1, -1, -1, 19, 134, 21, 22, 23, 24, -1, + -1, -1, -1, -1, 30, 31, 32, 33, 34, 35, + 36, -1, -1, 39, -1, -1, -1, -1, -1, -1, + -1, -1, 48, 49, 50, 51, 52, 53, 54, 55, + 56, -1, 58, 59, 60, -1, -1, 63, -1, -1, + 66, 67, -1, 69, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 124, 125, 126, - 127, 128, 129, 130, 131, 132, 133, -1, 135, 136, - 51, 52, -1, -1, 55, -1, 143, 144, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 70, - 71, 72, 73, 74, 75, 76, 77, -1, -1, 80, - 81, -1, -1, -1, -1, 86, 87, 88, 89, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 100, - 101, 102, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 91, -1, -1, 94, 95, + -1, 97, 98, -1, -1, 51, 52, -1, 104, 55, + 106, 107, 108, -1, 110, 111, 112, -1, 114, -1, + -1, -1, -1, -1, 70, 71, 72, 73, 74, 75, + 76, 77, -1, -1, 80, 81, -1, -1, 134, -1, + 86, 87, 88, 89, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 100, 101, 102, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 124, 125, 126, 127, 128, 129, 130, - 131, 132, 133, -1, 135, 136, 51, 52, -1, -1, - 55, -1, 143, 144, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 70, 71, 72, 73, 74, - 75, 76, 77, -1, -1, 80, 81, -1, -1, -1, - -1, 86, 87, 88, 89, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 100, 101, 102, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 124, 125, + 126, 127, 128, 129, 130, 131, 132, 133, -1, 135, + 136, 51, 52, -1, -1, 55, -1, 143, 144, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 124, - 125, 126, 127, 128, 129, 130, 131, 132, 133, -1, - 135, 136, 51, 52, -1, -1, 55, -1, 143, 144, + 70, 71, 72, 73, 74, 75, 76, 77, -1, -1, + 80, 81, -1, -1, -1, -1, 86, 87, 88, 89, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 70, 71, 72, 73, 74, 75, 76, 77, -1, - -1, 80, 81, -1, -1, -1, -1, 86, 87, 88, - 89, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 100, 101, 102, -1, -1, -1, -1, -1, -1, + 100, 101, 102, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 124, 125, 126, 127, 128, - 129, 130, 131, 132, 133, -1, 135, 136, 51, 52, - -1, -1, 55, -1, 143, 144, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 70, 71, 72, - 73, 74, 75, 76, 77, -1, -1, 80, 81, -1, - -1, -1, -1, 86, 87, 88, 89, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 100, 101, 102, + -1, -1, -1, -1, 124, 125, 126, 127, 128, 129, + 130, 131, 132, 133, -1, 135, 136, 51, 52, -1, + -1, 55, -1, 143, 144, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 70, 71, 72, 73, + 74, 75, 76, 77, -1, -1, 80, 81, -1, -1, + -1, -1, 86, 87, 88, 89, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 100, 101, 102, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 124, 125, 126, 127, 128, 129, 130, 131, 132, - 133, -1, 135, 136, 51, 52, -1, -1, 55, -1, - 143, 144, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 70, 71, 72, 73, 74, 75, 76, - 77, -1, -1, 80, 81, -1, -1, -1, -1, 86, - 87, 88, 89, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 100, 101, 102, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 44, - -1, -1, -1, -1, -1, -1, -1, 124, 125, 126, - 127, 128, 129, 130, 131, 132, 133, -1, 135, 136, - -1, -1, -1, -1, -1, -1, 143, 72, 73, 74, - 75, 76, 77, 78, 79, 80, 81, 82, 83, -1, - -1, -1, -1, 88, 89, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 101, -1, -1, -1, - -1, 44, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 122, -1, 124, - 125, 126, 127, 128, 129, 130, 131, 132, 133, 72, - 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, - 83, -1, -1, -1, -1, 88, 89, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 101, -1, + 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, + -1, 135, 136, 51, 52, -1, -1, 55, -1, 143, + 144, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 70, 71, 72, 73, 74, 75, 76, 77, + -1, -1, 80, 81, -1, -1, -1, -1, 86, 87, + 88, 89, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 100, 101, 102, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 122, - -1, 124, 125, 126, 127, 128, 129, 130, 131, 132, - 133, 72, 73, 74, 75, 76, 77, 78, 79, 80, - 81, 82, 83, -1, -1, -1, -1, 88, 89, -1, + -1, -1, -1, -1, -1, -1, 124, 125, 126, 127, + 128, 129, 130, 131, 132, 133, -1, 135, 136, 51, + 52, -1, -1, 55, -1, 143, 144, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 70, 71, + 72, 73, 74, 75, 76, 77, -1, -1, 80, 81, + -1, -1, -1, -1, 86, 87, 88, 89, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 100, 101, + 102, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 101, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 124, 125, 126, 127, 128, 129, 130, 131, + 132, 133, -1, 135, 136, 51, 52, -1, -1, 55, + -1, 143, 144, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 70, 71, 72, 73, 74, 75, + 76, 77, -1, -1, 80, 81, -1, -1, -1, -1, + 86, 87, 88, 89, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 100, 101, 102, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 122, -1, 124, 125, 126, 127, 128, 129, 130, - 131, 132, 133, -1, -1, -1, -1, -1, -1, -1, - -1, 142, 72, 73, 74, 75, 76, 77, 78, 79, + -1, -1, -1, -1, -1, -1, -1, -1, 124, 125, + 126, 127, 128, 129, 130, 131, 132, 133, -1, 135, + 136, 51, 52, -1, -1, 55, -1, 143, 144, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 70, 71, 72, 73, 74, 75, 76, 77, -1, -1, + 80, 81, -1, -1, -1, -1, 86, 87, 88, 89, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 100, 101, 102, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 124, 125, 126, 127, 128, 129, + 130, 131, 132, 133, -1, 135, 136, 51, 52, -1, + -1, 55, -1, 143, 144, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 70, 71, 72, 73, + 74, 75, 76, 77, -1, -1, 80, 81, -1, -1, + -1, -1, 86, 87, 88, 89, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 100, 101, 102, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, + -1, 135, 136, 51, 52, -1, -1, 55, -1, 143, + 144, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 70, 71, 72, 73, 74, 75, 76, 77, + -1, -1, 80, 81, -1, -1, -1, -1, 86, 87, + 88, 89, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 100, 101, 102, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 124, 125, 126, 127, + 128, 129, 130, 131, 132, 133, -1, 135, 136, 51, + 52, -1, -1, 55, -1, 143, 144, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 70, 71, + 72, 73, 74, 75, 76, 77, -1, -1, 80, 81, + -1, -1, -1, -1, 86, 87, 88, 89, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 100, 101, + 102, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 124, 125, 126, 127, 128, 129, 130, 131, + 132, 133, -1, 135, 136, 51, 52, -1, -1, 55, + -1, 143, 144, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 70, 71, 72, 73, 74, 75, + 76, 77, -1, -1, 80, 81, -1, -1, -1, -1, + 86, 87, 88, 89, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 100, 101, 102, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 124, 125, + 126, 127, 128, 129, 130, 131, 132, 133, -1, 135, + 136, 51, 52, -1, -1, 55, -1, 143, 144, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 70, 71, 72, 73, 74, 75, 76, 77, -1, -1, + 80, 81, -1, -1, -1, -1, 86, 87, 88, 89, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 100, 101, 102, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 124, 125, 126, 127, 128, 129, + 130, 131, 132, 133, -1, 135, 136, 51, 52, -1, + -1, 55, -1, 143, 144, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 70, 71, 72, 73, + 74, 75, 76, 77, -1, -1, 80, 81, -1, -1, + -1, -1, 86, 87, 88, 89, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 100, 101, 102, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, + -1, 135, 136, 51, 52, -1, -1, 55, -1, 143, + 144, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 70, 71, 72, 73, 74, 75, 76, 77, + -1, -1, 80, 81, -1, -1, -1, -1, 86, 87, + 88, 89, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 100, 101, 102, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 124, 125, 126, 127, + 128, 129, 130, 131, 132, 133, -1, 135, 136, 51, + 52, -1, -1, 55, -1, 143, 144, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 70, 71, + 72, 73, 74, 75, 76, 77, -1, -1, 80, 81, + -1, -1, -1, -1, 86, 87, 88, 89, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 100, 101, + 102, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 44, -1, -1, -1, -1, -1, + -1, -1, 124, 125, 126, 127, 128, 129, 130, 131, + 132, 133, -1, 135, 136, -1, -1, -1, -1, -1, + -1, 143, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, -1, -1, -1, -1, 88, 89, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 101, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 101, -1, -1, -1, -1, 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 122, -1, 124, 125, 126, 127, 128, 129, - 130, 131, 132, 133, -1, -1, -1, -1, -1, -1, - -1, -1, 142, 72, 73, 74, 75, 76, 77, 78, - 79, 80, 81, 82, 83, -1, -1, -1, -1, 88, - 89, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 101, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 122, -1, 124, 125, 126, 127, 128, - 129, 130, 131, 132, 133, -1, -1, -1, -1, -1, - -1, -1, -1, 142, 72, 73, 74, 75, 76, 77, + 130, 131, 132, 133, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, -1, -1, -1, -1, 88, 89, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 101, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 122, -1, 124, 125, 126, 127, - 128, 129, 130, 131, 132, 133, -1, -1, -1, -1, - -1, -1, -1, -1, 142, 72, 73, 74, 75, 76, - 77, 78, 79, 80, 81, 82, 83, -1, -1, -1, - -1, 88, 89, -1, -1, -1, 93, -1, -1, -1, - -1, -1, -1, -1, 101, -1, -1, -1, -1, -1, + 128, 129, 130, 131, 132, 133, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 81, 82, 83, -1, -1, + -1, -1, 88, 89, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 101, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 122, -1, 124, 125, 126, - 127, 128, 129, 130, 131, 132, 133, 72, 73, 74, + -1, -1, -1, -1, -1, -1, 122, -1, 124, 125, + 126, 127, 128, 129, 130, 131, 132, 133, -1, -1, + -1, -1, -1, -1, -1, -1, 142, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, -1, - -1, -1, -1, 88, 89, -1, -1, -1, 93, -1, + -1, -1, -1, 88, 89, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 101, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 122, -1, 124, - 125, 126, 127, 128, 129, 130, 131, 132, 133, 72, + 125, 126, 127, 128, 129, 130, 131, 132, 133, -1, + -1, -1, -1, -1, -1, -1, -1, 142, 72, 73, + 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, + -1, -1, -1, -1, 88, 89, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 101, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 122, -1, + 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, + -1, -1, -1, -1, -1, -1, -1, -1, 142, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, -1, -1, -1, -1, 88, 89, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 101, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 122, -1, 124, 125, 126, 127, 128, 129, 130, 131, 132, - 133, 72, 73, 74, 75, 76, 77, 78, 79, 80, - 81, 82, 83, -1, -1, -1, -1, 88, 89, -1, + 133, -1, -1, -1, -1, -1, -1, -1, -1, 142, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, + 82, 83, -1, -1, -1, -1, 88, 89, -1, -1, + -1, 93, -1, -1, -1, -1, -1, -1, -1, 101, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 101, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 124, 125, 126, 127, 128, 129, 130, - 131, 132, 133 + 122, -1, 124, 125, 126, 127, 128, 129, 130, 131, + 132, 133, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, -1, -1, -1, -1, 88, 89, + -1, -1, -1, 93, -1, -1, -1, -1, -1, -1, + -1, 101, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 122, -1, 124, 125, 126, 127, 128, 129, + 130, 131, 132, 133, 72, 73, 74, 75, 76, 77, + 78, 79, 80, 81, 82, 83, -1, -1, -1, -1, + 88, 89, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 101, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 122, -1, 124, 125, 126, 127, + 128, 129, 130, 131, 132, 133, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 81, 82, 83, -1, -1, + -1, -1, 88, 89, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 101, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 124, 125, + 126, 127, 128, 129, 130, 131, 132, 133 }; /* YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of state STATE-NUM. */ static const yytype_int16 yystos[] = { - 0, 150, 151, 0, 1, 3, 4, 5, 6, 7, - 8, 9, 10, 11, 12, 19, 21, 22, 23, 24, - 30, 31, 32, 33, 34, 35, 36, 39, 45, 46, - 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, - 58, 59, 60, 63, 66, 67, 69, 70, 71, 84, - 85, 91, 94, 95, 97, 98, 100, 104, 106, 107, - 108, 110, 111, 112, 114, 134, 135, 136, 152, 153, - 154, 159, 161, 163, 164, 165, 168, 169, 172, 173, - 175, 176, 177, 179, 180, 189, 203, 220, 241, 242, - 252, 253, 254, 258, 259, 260, 266, 267, 268, 270, - 271, 272, 273, 274, 275, 311, 324, 154, 21, 22, + 0, 150, 151, 1, 3, 4, 5, 6, 7, 8, + 9, 10, 11, 12, 19, 21, 22, 23, 24, 30, + 31, 32, 33, 34, 35, 36, 39, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 58, + 59, 60, 63, 66, 67, 69, 70, 71, 84, 85, + 91, 94, 95, 97, 98, 100, 104, 106, 107, 108, + 110, 111, 112, 114, 134, 135, 136, 152, 153, 154, + 160, 161, 163, 164, 166, 168, 169, 172, 173, 175, + 176, 177, 179, 180, 189, 203, 220, 241, 242, 252, + 253, 254, 258, 259, 260, 266, 267, 268, 270, 271, + 272, 273, 274, 275, 311, 324, 0, 154, 21, 22, 30, 31, 32, 39, 51, 55, 69, 88, 91, 94, - 134, 164, 165, 181, 182, 203, 220, 272, 275, 311, + 134, 164, 166, 181, 182, 203, 220, 272, 275, 311, 182, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 30, 31, 32, 33, 34, @@ -5534,15 +5579,15 @@ static const yytype_int16 yystos[] = 76, 77, 80, 81, 86, 87, 88, 89, 100, 101, 102, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 135, 136, 143, 144, 183, 187, 188, 274, 306, - 204, 91, 163, 164, 165, 167, 180, 189, 220, 272, + 204, 91, 163, 164, 166, 167, 180, 189, 220, 272, 273, 275, 167, 210, 212, 69, 91, 173, 180, 220, 225, 272, 275, 33, 34, 35, 36, 48, 49, 50, 51, 55, 106, 183, 184, 185, 268, 115, 118, 119, 146, 148, 167, 262, 263, 264, 317, 321, 322, 323, 51, 69, 100, 102, 103, 135, 172, 189, 195, 198, 201, 254, 309, 310, 195, 195, 144, 192, 193, 196, - 197, 324, 192, 196, 144, 318, 184, 155, 138, 189, - 220, 189, 189, 189, 55, 1, 94, 157, 158, 159, + 197, 324, 192, 197, 144, 318, 184, 155, 138, 189, + 220, 189, 189, 189, 55, 1, 94, 157, 158, 160, 174, 175, 324, 205, 207, 190, 201, 309, 324, 189, 308, 309, 324, 91, 142, 179, 220, 272, 275, 208, 53, 54, 56, 63, 107, 183, 269, 63, 64, 65, @@ -5552,12 +5597,12 @@ static const yytype_int16 yystos[] = 56, 69, 83, 94, 100, 101, 102, 103, 128, 131, 144, 278, 279, 280, 281, 282, 285, 286, 287, 288, 290, 291, 292, 293, 295, 296, 297, 300, 301, 302, - 303, 304, 324, 278, 280, 28, 239, 121, 142, 94, + 303, 304, 324, 278, 280, 28, 240, 121, 142, 94, 100, 176, 121, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 88, 89, 93, 101, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 90, 105, 140, 147, 315, 90, 315, 316, 26, 138, - 243, 254, 92, 92, 192, 196, 243, 163, 51, 55, + 244, 254, 92, 92, 192, 197, 244, 163, 51, 55, 181, 58, 59, 279, 125, 276, 90, 140, 315, 219, 307, 90, 147, 314, 156, 157, 55, 278, 278, 16, 221, 321, 121, 90, 140, 315, 92, 92, 221, 167, @@ -5565,47 +5610,47 @@ static const yytype_int16 yystos[] = 115, 264, 20, 246, 321, 57, 57, 189, 189, 189, 93, 142, 199, 200, 324, 57, 199, 200, 85, 194, 195, 201, 309, 324, 195, 163, 317, 319, 163, 322, - 160, 138, 157, 90, 315, 92, 159, 174, 145, 317, - 323, 319, 159, 319, 141, 200, 320, 323, 200, 320, + 159, 138, 157, 90, 315, 92, 160, 174, 145, 317, + 323, 319, 160, 319, 141, 200, 320, 323, 200, 320, 139, 320, 55, 176, 177, 178, 142, 90, 140, 315, 144, 237, 290, 295, 63, 255, 257, 261, 262, 63, 256, 61, 62, 63, 63, 101, 101, 154, 167, 167, - 167, 167, 159, 163, 163, 57, 121, 57, 321, 294, + 167, 167, 160, 163, 163, 57, 121, 57, 321, 294, 85, 290, 295, 121, 156, 189, 142, 305, 324, 51, 142, 305, 321, 142, 289, 189, 142, 289, 51, 142, - 289, 51, 121, 156, 240, 100, 168, 189, 201, 202, + 289, 51, 121, 156, 239, 100, 168, 189, 201, 202, 174, 142, 179, 142, 161, 162, 168, 180, 189, 191, 202, 220, 275, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 51, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 51, 52, 55, 187, 192, 312, 313, 194, 201, 51, - 52, 55, 187, 192, 312, 51, 55, 312, 245, 244, - 162, 189, 191, 162, 191, 99, 170, 217, 277, 216, - 51, 55, 181, 312, 194, 312, 156, 163, 166, 15, + 52, 55, 187, 192, 312, 51, 55, 312, 245, 243, + 162, 189, 191, 162, 191, 99, 171, 217, 277, 216, + 51, 55, 181, 312, 194, 312, 156, 163, 165, 15, 13, 248, 324, 121, 121, 157, 16, 51, 55, 194, 51, 55, 157, 27, 222, 321, 222, 51, 55, 194, 51, 55, 214, 186, 157, 246, 189, 201, 15, 189, 189, 189, 318, 100, 189, 198, 309, 189, 310, 319, 145, 317, 200, 200, 319, 145, 184, 152, 139, 191, - 319, 159, 206, 309, 176, 178, 51, 55, 194, 51, + 319, 160, 206, 309, 176, 178, 51, 55, 194, 51, 55, 290, 209, 142, 63, 157, 262, 189, 189, 51, 69, 100, 226, 295, 319, 319, 142, 172, 189, 15, 51, 69, 282, 287, 304, 85, 288, 293, 300, 302, 295, 297, 302, 51, 295, 172, 189, 15, 79, 126, - 231, 232, 324, 189, 200, 319, 178, 142, 44, 121, - 44, 90, 140, 315, 318, 92, 92, 192, 196, 141, - 200, 92, 92, 193, 196, 193, 196, 231, 231, 171, + 231, 233, 324, 189, 200, 319, 178, 142, 44, 121, + 44, 90, 140, 315, 318, 92, 92, 192, 197, 141, + 200, 92, 92, 193, 197, 193, 197, 231, 231, 170, 321, 167, 156, 141, 15, 319, 183, 189, 202, 249, 324, 18, 224, 324, 17, 223, 224, 92, 92, 141, 92, 92, 224, 211, 213, 141, 167, 184, 139, 15, 200, 221, 189, 199, 85, 309, 139, 319, 320, 141, 234, 318, 29, 113, 238, 139, 142, 292, 319, 142, 85, 44, 44, 305, 321, 142, 289, 142, 289, 142, - 289, 142, 289, 289, 44, 44, 228, 230, 233, 281, + 289, 142, 289, 289, 44, 44, 228, 230, 232, 281, 283, 284, 287, 295, 296, 298, 299, 302, 304, 156, - 100, 189, 178, 159, 189, 51, 55, 194, 51, 55, - 57, 123, 162, 191, 168, 191, 170, 92, 162, 191, - 162, 191, 170, 243, 239, 156, 157, 231, 218, 321, + 100, 189, 178, 160, 189, 51, 55, 194, 51, 55, + 57, 123, 162, 191, 168, 191, 171, 92, 162, 191, + 162, 191, 171, 244, 240, 156, 157, 231, 218, 321, 15, 93, 250, 324, 157, 14, 251, 324, 167, 15, 92, 15, 157, 157, 222, 189, 157, 319, 200, 145, 146, 156, 157, 227, 142, 100, 319, 189, 189, 295, @@ -5627,13 +5672,13 @@ static const yytype_int16 yystos[] = /* YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM. */ static const yytype_int16 yyr1[] = { - 0, 149, 151, 150, 152, 153, 153, 153, 153, 154, - 155, 154, 156, 157, 158, 158, 158, 158, 160, 159, - 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, - 159, 159, 159, 159, 161, 161, 161, 161, 161, 161, + 0, 149, 150, 151, 152, 153, 153, 153, 153, 154, + 155, 154, 156, 157, 158, 158, 158, 158, 159, 160, + 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, + 160, 160, 160, 160, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 162, 162, 162, 163, - 163, 163, 163, 163, 163, 164, 166, 165, 167, 168, - 168, 169, 169, 171, 170, 172, 172, 172, 172, 172, + 163, 163, 163, 163, 163, 164, 165, 166, 167, 168, + 168, 169, 169, 170, 171, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 173, 173, 174, 174, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 176, 176, 177, 177, 178, 178, 179, 179, 179, 179, @@ -5654,7 +5699,7 @@ static const yytype_int16 yyr1[] = 189, 189, 189, 189, 189, 189, 189, 189, 189, 190, 190, 190, 190, 191, 191, 192, 192, 192, 193, 193, 194, 194, 194, 194, 194, 195, 195, 195, 195, 195, - 197, 196, 198, 198, 199, 199, 200, 201, 201, 201, + 196, 197, 198, 198, 199, 199, 200, 201, 201, 201, 201, 201, 201, 202, 202, 202, 203, 203, 203, 203, 203, 203, 203, 203, 203, 204, 203, 205, 206, 203, 207, 203, 203, 203, 203, 203, 203, 203, 203, 203, @@ -5665,11 +5710,11 @@ static const yytype_int16 yyr1[] = 223, 224, 224, 225, 225, 226, 226, 226, 226, 226, 226, 226, 226, 227, 226, 228, 228, 228, 228, 229, 229, 230, 230, 230, 230, 230, 230, 230, 230, 230, - 230, 230, 230, 230, 230, 230, 231, 231, 233, 232, - 232, 232, 234, 234, 235, 235, 236, 236, 237, 237, - 238, 238, 240, 239, 241, 241, 241, 241, 242, 242, - 242, 242, 242, 242, 242, 242, 242, 244, 243, 245, - 243, 246, 247, 247, 248, 248, 249, 249, 249, 250, + 230, 230, 230, 230, 230, 230, 231, 231, 232, 233, + 233, 233, 234, 234, 235, 235, 236, 236, 237, 237, + 238, 238, 239, 240, 241, 241, 241, 241, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 243, 244, 245, + 244, 246, 247, 247, 248, 248, 249, 249, 249, 250, 250, 251, 251, 252, 252, 252, 252, 253, 253, 254, 254, 254, 254, 255, 255, 256, 257, 256, 256, 256, 258, 258, 259, 259, 260, 261, 261, 262, 262, 263, @@ -5845,7 +5890,7 @@ do { \ /* Temporary convenience wrapper in case some people defined the undocumented and private YY_LOCATION_PRINT macros. */ -# define YYLOCATION_PRINT(File, Loc) YY_LOCATION_PRINT(File, *(Loc)) +# define YYLOCATION_PRINT(File, Loc, p) YY_LOCATION_PRINT(File, *(Loc), p) # elif defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL @@ -5881,11 +5926,11 @@ yy_location_print_ (FILE *yyo, YYLTYPE const * const yylocp) /* Temporary convenience wrapper in case some people defined the undocumented and private YY_LOCATION_PRINT macros. */ -# define YY_LOCATION_PRINT(File, Loc) YYLOCATION_PRINT(File, &(Loc)) +# define YY_LOCATION_PRINT(File, Loc, p) YYLOCATION_PRINT(File, &(Loc), p) # else -# define YYLOCATION_PRINT(File, Loc) ((void) 0) +# define YYLOCATION_PRINT(File, Loc, p) ((void) 0) /* Temporary convenience wrapper in case some people defined the undocumented and private YY_LOCATION_PRINT macros. */ # define YY_LOCATION_PRINT YYLOCATION_PRINT @@ -5894,13 +5939,13 @@ yy_location_print_ (FILE *yyo, YYLTYPE const * const yylocp) # endif /* !defined YYLOCATION_PRINT */ -# define YY_SYMBOL_PRINT(Title, Kind, Value, Location) \ +# define YY_SYMBOL_PRINT(Title, Kind, Value, Location, p) \ do { \ if (yydebug) \ { \ YYFPRINTF (stderr, "%s ", Title); \ yy_symbol_print (stderr, \ - Kind, Value, Location, p); \ + Kind, Value, Location, p); \ YYFPRINTF (stderr, "\n"); \ } \ } while (0) @@ -5921,7 +5966,11 @@ yy_symbol_value_print (FILE *yyo, if (!yyvaluep) return; YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN - YY_USE (yykind); +switch (yykind) + { + default: + break; + } YY_IGNORE_MAYBE_UNINITIALIZED_END } @@ -5937,7 +5986,7 @@ yy_symbol_print (FILE *yyo, YYFPRINTF (yyo, "%s %s (", yykind < YYNTOKENS ? "token" : "nterm", yysymbol_name (yykind)); - YYLOCATION_PRINT (yyo, yylocationp); + YYLOCATION_PRINT (yyo, yylocationp, p); YYFPRINTF (yyo, ": "); yy_symbol_value_print (yyo, yykind, yyvaluep, yylocationp, p); YYFPRINTF (yyo, ")"); @@ -5949,7 +5998,7 @@ yy_symbol_print (FILE *yyo, `------------------------------------------------------------------*/ static void -yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop) +yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop, parser_state *p) { YYFPRINTF (stderr, "Stack now"); for (; yybottom <= yytop; yybottom++) @@ -5960,10 +6009,10 @@ yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop) YYFPRINTF (stderr, "\n"); } -# define YY_STACK_PRINT(Bottom, Top) \ +# define YY_STACK_PRINT(Bottom, Top, p) \ do { \ if (yydebug) \ - yy_stack_print ((Bottom), (Top)); \ + yy_stack_print ((Bottom), (Top), p); \ } while (0) @@ -5992,7 +6041,7 @@ yy_reduce_print (yy_state_t *yyssp, YYSTYPE *yyvsp, YYLTYPE *yylsp, } } -# define YY_REDUCE_PRINT(Rule) \ +# define YY_REDUCE_PRINT(Rule, p) \ do { \ if (yydebug) \ yy_reduce_print (yyssp, yyvsp, yylsp, Rule, p); \ @@ -6000,12 +6049,14 @@ do { \ /* Nonzero means print parse trace. It is left uninitialized so that multiple parsers can coexist. */ +#ifndef yydebug int yydebug; +#endif #else /* !YYDEBUG */ # define YYDPRINTF(Args) ((void) 0) -# define YY_SYMBOL_PRINT(Title, Kind, Value, Location) -# define YY_STACK_PRINT(Bottom, Top) -# define YY_REDUCE_PRINT(Rule) +# define YY_SYMBOL_PRINT(Title, Kind, Value, Location, p) +# define YY_STACK_PRINT(Bottom, Top, p) +# define YY_REDUCE_PRINT(Rule, p) #endif /* !YYDEBUG */ @@ -6219,7 +6270,7 @@ yy_syntax_error_arguments (const yypcontext_t *yyctx, required number of bytes is too large to store. */ static int yysyntax_error (YYPTRDIFF_T *yymsg_alloc, char **yymsg, - const yypcontext_t *yyctx) + const yypcontext_t *yyctx, parser_state *p) { enum { YYARGS_MAX = 5 }; /* Internationalized format string. */ @@ -6311,10 +6362,14 @@ yydestruct (const char *yymsg, YY_USE (p); if (!yymsg) yymsg = "Deleting"; - YY_SYMBOL_PRINT (yymsg, yykind, yyvaluep, yylocationp); + YY_SYMBOL_PRINT (yymsg, yykind, yyvaluep, yylocationp, p); YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN - YY_USE (yykind); + switch (yykind) + { + default: + break; + } YY_IGNORE_MAYBE_UNINITIALIZED_END } @@ -6337,11 +6392,11 @@ int yychar; /* The semantic value of the lookahead symbol. */ /* Default value used for initialization, for pacifying older GCCs or non-GCC compilers. */ -YY_INITIAL_VALUE (static YYSTYPE yyval_default;) +YY_INITIAL_VALUE (static const YYSTYPE yyval_default;) YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); /* Location data for the lookahead symbol. */ -static YYLTYPE yyloc_default +static const YYLTYPE yyloc_default # if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL = { 1, 1, 1, 1 } # endif @@ -6350,6 +6405,7 @@ YYLTYPE yylloc = yyloc_default; /* Number of syntax errors so far. */ int yynerrs = 0; + YY_USE (yynerrs); /* Silence compiler warning. */ yy_state_fast_t yystate = 0; /* Number of tokens to shift before error messages enabled. */ @@ -6404,6 +6460,10 @@ YYLTYPE yylloc = yyloc_default; yychar = YYEMPTY; /* Cause a token to be read. */ + + +#line 6466 "mrbgems/mruby-compiler/core/y.tab.c" + yylsp[0] = yylloc; goto yysetstate; @@ -6426,7 +6486,7 @@ yysetstate: YY_IGNORE_USELESS_CAST_BEGIN *yyssp = YY_CAST (yy_state_t, yystate); YY_IGNORE_USELESS_CAST_END - YY_STACK_PRINT (yyss, yyssp); + YY_STACK_PRINT (yyss, yyssp, p); if (yyss + yystacksize - 1 <= yyssp) #if !defined yyoverflow && !defined YYSTACK_RELOCATE @@ -6544,7 +6604,7 @@ yybackup: else { yytoken = YYTRANSLATE (yychar); - YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); + YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc, p); } /* If the proper action on seeing token YYTOKEN is to reduce or to @@ -6567,13 +6627,14 @@ yybackup: yyerrstatus--; /* Shift the lookahead token. */ - YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); + YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc, p); yystate = yyn; YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; YY_IGNORE_MAYBE_UNINITIALIZED_END *++yylsp = yylloc; + /* Discard the shifted token. */ yychar = YYEMPTY; goto yynewstate; @@ -6606,10 +6667,11 @@ yyreduce: GCC warning that YYVAL may be used uninitialized. */ yyval = yyvsp[1-yylen]; + /* Default location. */ YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen); yyerror_range[1] = yyloc; - YY_REDUCE_PRINT (yyn); + YY_REDUCE_PRINT (yyn, p); switch (yyn) { case 2: /* $@1: %empty */ @@ -6618,7 +6680,7 @@ yyreduce: p->lstate = EXPR_BEG; if (!p->locals) p->locals = cons(0,0); } -#line 6622 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6684 "mrbgems/mruby-compiler/core/y.tab.c" break; case 3: /* program: $@1 top_compstmt */ @@ -6627,7 +6689,7 @@ yyreduce: p->tree = new_scope(p, (yyvsp[0].nd)); NODE_LINENO(p->tree, (yyvsp[0].nd)); } -#line 6631 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6693 "mrbgems/mruby-compiler/core/y.tab.c" break; case 4: /* top_compstmt: top_stmts opt_terms */ @@ -6635,7 +6697,7 @@ yyreduce: { (yyval.nd) = (yyvsp[-1].nd); } -#line 6639 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6701 "mrbgems/mruby-compiler/core/y.tab.c" break; case 5: /* top_stmts: none */ @@ -6643,7 +6705,7 @@ yyreduce: { (yyval.nd) = new_begin(p, 0); } -#line 6647 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6709 "mrbgems/mruby-compiler/core/y.tab.c" break; case 6: /* top_stmts: top_stmt */ @@ -6652,7 +6714,7 @@ yyreduce: (yyval.nd) = new_begin(p, (yyvsp[0].nd)); NODE_LINENO((yyval.nd), (yyvsp[0].nd)); } -#line 6656 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6718 "mrbgems/mruby-compiler/core/y.tab.c" break; case 7: /* top_stmts: top_stmts terms top_stmt */ @@ -6660,7 +6722,7 @@ yyreduce: { (yyval.nd) = push((yyvsp[-2].nd), newline_node((yyvsp[0].nd))); } -#line 6664 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6726 "mrbgems/mruby-compiler/core/y.tab.c" break; case 8: /* top_stmts: error top_stmt */ @@ -6668,7 +6730,7 @@ yyreduce: { (yyval.nd) = new_begin(p, 0); } -#line 6672 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6734 "mrbgems/mruby-compiler/core/y.tab.c" break; case 10: /* @2: %empty */ @@ -6677,7 +6739,7 @@ yyreduce: (yyval.nd) = local_switch(p); nvars_block(p); } -#line 6681 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6743 "mrbgems/mruby-compiler/core/y.tab.c" break; case 11: /* top_stmt: "'BEGIN'" @2 '{' top_compstmt '}' */ @@ -6688,7 +6750,7 @@ yyreduce: nvars_unnest(p); (yyval.nd) = 0; } -#line 6692 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6754 "mrbgems/mruby-compiler/core/y.tab.c" break; case 12: /* bodystmt: compstmt opt_rescue opt_else opt_ensure */ @@ -6714,7 +6776,7 @@ yyreduce: } } } -#line 6718 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6780 "mrbgems/mruby-compiler/core/y.tab.c" break; case 13: /* compstmt: stmts opt_terms */ @@ -6722,7 +6784,7 @@ yyreduce: { (yyval.nd) = (yyvsp[-1].nd); } -#line 6726 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6788 "mrbgems/mruby-compiler/core/y.tab.c" break; case 14: /* stmts: none */ @@ -6730,7 +6792,7 @@ yyreduce: { (yyval.nd) = new_begin(p, 0); } -#line 6734 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6796 "mrbgems/mruby-compiler/core/y.tab.c" break; case 15: /* stmts: stmt */ @@ -6739,7 +6801,7 @@ yyreduce: (yyval.nd) = new_begin(p, (yyvsp[0].nd)); NODE_LINENO((yyval.nd), (yyvsp[0].nd)); } -#line 6743 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6805 "mrbgems/mruby-compiler/core/y.tab.c" break; case 16: /* stmts: stmts terms stmt */ @@ -6747,7 +6809,7 @@ yyreduce: { (yyval.nd) = push((yyvsp[-2].nd), newline_node((yyvsp[0].nd))); } -#line 6751 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6813 "mrbgems/mruby-compiler/core/y.tab.c" break; case 17: /* stmts: error stmt */ @@ -6755,13 +6817,13 @@ yyreduce: { (yyval.nd) = new_begin(p, (yyvsp[0].nd)); } -#line 6759 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6821 "mrbgems/mruby-compiler/core/y.tab.c" break; case 18: /* $@3: %empty */ #line 1728 "mrbgems/mruby-compiler/core/parse.y" {p->lstate = EXPR_FNAME;} -#line 6765 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6827 "mrbgems/mruby-compiler/core/y.tab.c" break; case 19: /* stmt: "'alis'" fsym $@3 fsym */ @@ -6769,7 +6831,7 @@ yyreduce: { (yyval.nd) = new_alias(p, (yyvsp[-2].id), (yyvsp[0].id)); } -#line 6773 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6835 "mrbgems/mruby-compiler/core/y.tab.c" break; case 20: /* stmt: "'undef'" undef_list */ @@ -6777,7 +6839,7 @@ yyreduce: { (yyval.nd) = (yyvsp[0].nd); } -#line 6781 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6843 "mrbgems/mruby-compiler/core/y.tab.c" break; case 21: /* stmt: stmt "'if' modifier" expr_value */ @@ -6785,7 +6847,7 @@ yyreduce: { (yyval.nd) = new_if(p, cond((yyvsp[0].nd)), (yyvsp[-2].nd), 0); } -#line 6789 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6851 "mrbgems/mruby-compiler/core/y.tab.c" break; case 22: /* stmt: stmt "'unless' modifier" expr_value */ @@ -6793,7 +6855,7 @@ yyreduce: { (yyval.nd) = new_unless(p, cond((yyvsp[0].nd)), (yyvsp[-2].nd), 0); } -#line 6797 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6859 "mrbgems/mruby-compiler/core/y.tab.c" break; case 23: /* stmt: stmt "'while' modifier" expr_value */ @@ -6801,7 +6863,7 @@ yyreduce: { (yyval.nd) = new_while(p, cond((yyvsp[0].nd)), (yyvsp[-2].nd)); } -#line 6805 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6867 "mrbgems/mruby-compiler/core/y.tab.c" break; case 24: /* stmt: stmt "'until' modifier" expr_value */ @@ -6809,7 +6871,7 @@ yyreduce: { (yyval.nd) = new_until(p, cond((yyvsp[0].nd)), (yyvsp[-2].nd)); } -#line 6813 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6875 "mrbgems/mruby-compiler/core/y.tab.c" break; case 25: /* stmt: stmt "'rescue' modifier" stmt */ @@ -6817,7 +6879,7 @@ yyreduce: { (yyval.nd) = new_mod_rescue(p, (yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 6821 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6883 "mrbgems/mruby-compiler/core/y.tab.c" break; case 26: /* stmt: "'END'" '{' compstmt '}' */ @@ -6826,7 +6888,7 @@ yyreduce: yyerror(&(yylsp[-3]), p, "END not supported"); (yyval.nd) = new_postexe(p, (yyvsp[-1].nd)); } -#line 6830 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6892 "mrbgems/mruby-compiler/core/y.tab.c" break; case 28: /* stmt: mlhs '=' command_call */ @@ -6834,7 +6896,7 @@ yyreduce: { (yyval.nd) = new_masgn(p, (yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 6838 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6900 "mrbgems/mruby-compiler/core/y.tab.c" break; case 29: /* stmt: lhs '=' mrhs */ @@ -6842,7 +6904,7 @@ yyreduce: { (yyval.nd) = new_asgn(p, (yyvsp[-2].nd), new_array(p, (yyvsp[0].nd))); } -#line 6846 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6908 "mrbgems/mruby-compiler/core/y.tab.c" break; case 30: /* stmt: mlhs '=' arg */ @@ -6850,7 +6912,7 @@ yyreduce: { (yyval.nd) = new_masgn(p, (yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 6854 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6916 "mrbgems/mruby-compiler/core/y.tab.c" break; case 31: /* stmt: mlhs '=' mrhs */ @@ -6858,7 +6920,7 @@ yyreduce: { (yyval.nd) = new_masgn(p, (yyvsp[-2].nd), new_array(p, (yyvsp[0].nd))); } -#line 6862 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6924 "mrbgems/mruby-compiler/core/y.tab.c" break; case 32: /* stmt: arg "=>" "local variable or method" */ @@ -6868,7 +6930,7 @@ yyreduce: assignable(p, lhs); (yyval.nd) = new_asgn(p, lhs, (yyvsp[-2].nd)); } -#line 6872 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6934 "mrbgems/mruby-compiler/core/y.tab.c" break; case 34: /* command_asgn: lhs '=' command_rhs */ @@ -6876,7 +6938,7 @@ yyreduce: { (yyval.nd) = new_asgn(p, (yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 6880 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6942 "mrbgems/mruby-compiler/core/y.tab.c" break; case 35: /* command_asgn: var_lhs tOP_ASGN command_rhs */ @@ -6884,7 +6946,7 @@ yyreduce: { (yyval.nd) = new_op_asgn(p, (yyvsp[-2].nd), (yyvsp[-1].id), (yyvsp[0].nd)); } -#line 6888 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6950 "mrbgems/mruby-compiler/core/y.tab.c" break; case 36: /* command_asgn: primary_value '[' opt_call_args ']' tOP_ASGN command_rhs */ @@ -6892,7 +6954,7 @@ yyreduce: { (yyval.nd) = new_op_asgn(p, new_call(p, (yyvsp[-5].nd), intern_op(aref), (yyvsp[-3].nd), '.'), (yyvsp[-1].id), (yyvsp[0].nd)); } -#line 6896 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6958 "mrbgems/mruby-compiler/core/y.tab.c" break; case 37: /* command_asgn: primary_value call_op "local variable or method" tOP_ASGN command_rhs */ @@ -6900,7 +6962,7 @@ yyreduce: { (yyval.nd) = new_op_asgn(p, new_call(p, (yyvsp[-4].nd), (yyvsp[-2].id), 0, (yyvsp[-3].num)), (yyvsp[-1].id), (yyvsp[0].nd)); } -#line 6904 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6966 "mrbgems/mruby-compiler/core/y.tab.c" break; case 38: /* command_asgn: primary_value call_op "constant" tOP_ASGN command_rhs */ @@ -6908,7 +6970,7 @@ yyreduce: { (yyval.nd) = new_op_asgn(p, new_call(p, (yyvsp[-4].nd), (yyvsp[-2].id), 0, (yyvsp[-3].num)), (yyvsp[-1].id), (yyvsp[0].nd)); } -#line 6912 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6974 "mrbgems/mruby-compiler/core/y.tab.c" break; case 39: /* command_asgn: primary_value "::" "constant" tOP_ASGN command_call */ @@ -6917,7 +6979,7 @@ yyreduce: yyerror(&(yylsp[-4]), p, "constant re-assignment"); (yyval.nd) = 0; } -#line 6921 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6983 "mrbgems/mruby-compiler/core/y.tab.c" break; case 40: /* command_asgn: primary_value "::" "local variable or method" tOP_ASGN command_rhs */ @@ -6925,7 +6987,7 @@ yyreduce: { (yyval.nd) = new_op_asgn(p, new_call(p, (yyvsp[-4].nd), (yyvsp[-2].id), 0, tCOLON2), (yyvsp[-1].id), (yyvsp[0].nd)); } -#line 6929 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6991 "mrbgems/mruby-compiler/core/y.tab.c" break; case 41: /* command_asgn: defn_head f_opt_arglist_paren '=' command */ @@ -6938,7 +7000,7 @@ yyreduce: nvars_unnest(p); p->in_def--; } -#line 6942 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7004 "mrbgems/mruby-compiler/core/y.tab.c" break; case 42: /* command_asgn: defn_head f_opt_arglist_paren '=' command "'rescue' modifier" arg */ @@ -6951,7 +7013,7 @@ yyreduce: nvars_unnest(p); p->in_def--; } -#line 6955 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7017 "mrbgems/mruby-compiler/core/y.tab.c" break; case 43: /* command_asgn: defs_head f_opt_arglist_paren '=' command */ @@ -6964,7 +7026,7 @@ yyreduce: p->in_def--; p->in_single--; } -#line 6968 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7030 "mrbgems/mruby-compiler/core/y.tab.c" break; case 44: /* command_asgn: defs_head f_opt_arglist_paren '=' command "'rescue' modifier" arg */ @@ -6977,7 +7039,7 @@ yyreduce: p->in_def--; p->in_single--; } -#line 6981 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7043 "mrbgems/mruby-compiler/core/y.tab.c" break; case 45: /* command_asgn: backref tOP_ASGN command_rhs */ @@ -6986,7 +7048,7 @@ yyreduce: backref_error(p, (yyvsp[-2].nd)); (yyval.nd) = new_begin(p, 0); } -#line 6990 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7052 "mrbgems/mruby-compiler/core/y.tab.c" break; case 47: /* command_rhs: command_call "'rescue' modifier" stmt */ @@ -6994,7 +7056,7 @@ yyreduce: { (yyval.nd) = new_mod_rescue(p, (yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 6998 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7060 "mrbgems/mruby-compiler/core/y.tab.c" break; case 50: /* expr: expr "'and'" expr */ @@ -7002,7 +7064,7 @@ yyreduce: { (yyval.nd) = new_and(p, (yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 7006 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7068 "mrbgems/mruby-compiler/core/y.tab.c" break; case 51: /* expr: expr "'or'" expr */ @@ -7010,7 +7072,7 @@ yyreduce: { (yyval.nd) = new_or(p, (yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 7014 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7076 "mrbgems/mruby-compiler/core/y.tab.c" break; case 52: /* expr: "'not'" opt_nl expr */ @@ -7018,7 +7080,7 @@ yyreduce: { (yyval.nd) = call_uni_op(p, cond((yyvsp[0].nd)), "!"); } -#line 7022 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7084 "mrbgems/mruby-compiler/core/y.tab.c" break; case 53: /* expr: '!' command_call */ @@ -7026,7 +7088,7 @@ yyreduce: { (yyval.nd) = call_uni_op(p, cond((yyvsp[0].nd)), "!"); } -#line 7030 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7092 "mrbgems/mruby-compiler/core/y.tab.c" break; case 55: /* defn_head: "'def'" fname */ @@ -7037,7 +7099,7 @@ yyreduce: p->in_def++; nvars_block(p); } -#line 7041 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7103 "mrbgems/mruby-compiler/core/y.tab.c" break; case 56: /* $@4: %empty */ @@ -7045,7 +7107,7 @@ yyreduce: { p->lstate = EXPR_FNAME; } -#line 7049 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7111 "mrbgems/mruby-compiler/core/y.tab.c" break; case 57: /* defs_head: "'def'" singleton dot_or_colon $@4 fname */ @@ -7058,7 +7120,7 @@ yyreduce: nvars_block(p); p->lstate = EXPR_ENDFN; /* force for args */ } -#line 7062 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7124 "mrbgems/mruby-compiler/core/y.tab.c" break; case 58: /* expr_value: expr */ @@ -7069,7 +7131,7 @@ yyreduce: (yyval.nd) = (yyvsp[0].nd); } } -#line 7073 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7135 "mrbgems/mruby-compiler/core/y.tab.c" break; case 62: /* block_command: block_call call_op2 operation2 command_args */ @@ -7077,7 +7139,7 @@ yyreduce: { (yyval.nd) = new_call(p, (yyvsp[-3].nd), (yyvsp[-1].id), (yyvsp[0].nd), (yyvsp[-2].num)); } -#line 7081 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7143 "mrbgems/mruby-compiler/core/y.tab.c" break; case 63: /* $@5: %empty */ @@ -7086,7 +7148,7 @@ yyreduce: local_nest(p); nvars_nest(p); } -#line 7090 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7152 "mrbgems/mruby-compiler/core/y.tab.c" break; case 64: /* cmd_brace_block: "{" $@5 opt_block_param compstmt '}' */ @@ -7096,7 +7158,7 @@ yyreduce: local_unnest(p); nvars_unnest(p); } -#line 7100 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7162 "mrbgems/mruby-compiler/core/y.tab.c" break; case 65: /* command: operation command_args */ @@ -7104,7 +7166,7 @@ yyreduce: { (yyval.nd) = new_fcall(p, (yyvsp[-1].id), (yyvsp[0].nd)); } -#line 7108 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7170 "mrbgems/mruby-compiler/core/y.tab.c" break; case 66: /* command: operation command_args cmd_brace_block */ @@ -7113,7 +7175,7 @@ yyreduce: args_with_block(p, (yyvsp[-1].nd), (yyvsp[0].nd)); (yyval.nd) = new_fcall(p, (yyvsp[-2].id), (yyvsp[-1].nd)); } -#line 7117 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7179 "mrbgems/mruby-compiler/core/y.tab.c" break; case 67: /* command: primary_value call_op operation2 command_args */ @@ -7121,7 +7183,7 @@ yyreduce: { (yyval.nd) = new_call(p, (yyvsp[-3].nd), (yyvsp[-1].id), (yyvsp[0].nd), (yyvsp[-2].num)); } -#line 7125 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7187 "mrbgems/mruby-compiler/core/y.tab.c" break; case 68: /* command: primary_value call_op operation2 command_args cmd_brace_block */ @@ -7130,7 +7192,7 @@ yyreduce: args_with_block(p, (yyvsp[-1].nd), (yyvsp[0].nd)); (yyval.nd) = new_call(p, (yyvsp[-4].nd), (yyvsp[-2].id), (yyvsp[-1].nd), (yyvsp[-3].num)); } -#line 7134 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7196 "mrbgems/mruby-compiler/core/y.tab.c" break; case 69: /* command: primary_value "::" operation2 command_args */ @@ -7138,7 +7200,7 @@ yyreduce: { (yyval.nd) = new_call(p, (yyvsp[-3].nd), (yyvsp[-1].id), (yyvsp[0].nd), tCOLON2); } -#line 7142 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7204 "mrbgems/mruby-compiler/core/y.tab.c" break; case 70: /* command: primary_value "::" operation2 command_args cmd_brace_block */ @@ -7147,7 +7209,7 @@ yyreduce: args_with_block(p, (yyvsp[-1].nd), (yyvsp[0].nd)); (yyval.nd) = new_call(p, (yyvsp[-4].nd), (yyvsp[-2].id), (yyvsp[-1].nd), tCOLON2); } -#line 7151 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7213 "mrbgems/mruby-compiler/core/y.tab.c" break; case 71: /* command: "'super'" command_args */ @@ -7155,7 +7217,7 @@ yyreduce: { (yyval.nd) = new_super(p, (yyvsp[0].nd)); } -#line 7159 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7221 "mrbgems/mruby-compiler/core/y.tab.c" break; case 72: /* command: "'yield'" command_args */ @@ -7163,7 +7225,7 @@ yyreduce: { (yyval.nd) = new_yield(p, (yyvsp[0].nd)); } -#line 7167 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7229 "mrbgems/mruby-compiler/core/y.tab.c" break; case 73: /* command: "'return'" call_args */ @@ -7171,7 +7233,7 @@ yyreduce: { (yyval.nd) = new_return(p, ret_args(p, (yyvsp[0].nd))); } -#line 7175 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7237 "mrbgems/mruby-compiler/core/y.tab.c" break; case 74: /* command: "'break'" call_args */ @@ -7179,7 +7241,7 @@ yyreduce: { (yyval.nd) = new_break(p, ret_args(p, (yyvsp[0].nd))); } -#line 7183 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7245 "mrbgems/mruby-compiler/core/y.tab.c" break; case 75: /* command: "'next'" call_args */ @@ -7187,7 +7249,7 @@ yyreduce: { (yyval.nd) = new_next(p, ret_args(p, (yyvsp[0].nd))); } -#line 7191 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7253 "mrbgems/mruby-compiler/core/y.tab.c" break; case 76: /* mlhs: mlhs_basic */ @@ -7195,7 +7257,7 @@ yyreduce: { (yyval.nd) = (yyvsp[0].nd); } -#line 7199 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7261 "mrbgems/mruby-compiler/core/y.tab.c" break; case 77: /* mlhs: tLPAREN mlhs_inner rparen */ @@ -7203,7 +7265,7 @@ yyreduce: { (yyval.nd) = (yyvsp[-1].nd); } -#line 7207 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7269 "mrbgems/mruby-compiler/core/y.tab.c" break; case 79: /* mlhs_inner: tLPAREN mlhs_inner rparen */ @@ -7211,7 +7273,7 @@ yyreduce: { (yyval.nd) = (yyvsp[-1].nd); } -#line 7215 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7277 "mrbgems/mruby-compiler/core/y.tab.c" break; case 80: /* mlhs_basic: mlhs_list */ @@ -7219,7 +7281,7 @@ yyreduce: { (yyval.nd) = list1((yyvsp[0].nd)); } -#line 7223 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7285 "mrbgems/mruby-compiler/core/y.tab.c" break; case 81: /* mlhs_basic: mlhs_list mlhs_item */ @@ -7227,7 +7289,7 @@ yyreduce: { (yyval.nd) = list1(push((yyvsp[-1].nd),(yyvsp[0].nd))); } -#line 7231 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7293 "mrbgems/mruby-compiler/core/y.tab.c" break; case 82: /* mlhs_basic: mlhs_list "*" mlhs_node */ @@ -7235,7 +7297,7 @@ yyreduce: { (yyval.nd) = list2((yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 7239 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7301 "mrbgems/mruby-compiler/core/y.tab.c" break; case 83: /* mlhs_basic: mlhs_list "*" mlhs_node ',' mlhs_post */ @@ -7243,7 +7305,7 @@ yyreduce: { (yyval.nd) = list3((yyvsp[-4].nd), (yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 7247 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7309 "mrbgems/mruby-compiler/core/y.tab.c" break; case 84: /* mlhs_basic: mlhs_list "*" */ @@ -7251,7 +7313,7 @@ yyreduce: { (yyval.nd) = list2((yyvsp[-1].nd), new_nil(p)); } -#line 7255 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7317 "mrbgems/mruby-compiler/core/y.tab.c" break; case 85: /* mlhs_basic: mlhs_list "*" ',' mlhs_post */ @@ -7259,7 +7321,7 @@ yyreduce: { (yyval.nd) = list3((yyvsp[-3].nd), new_nil(p), (yyvsp[0].nd)); } -#line 7263 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7325 "mrbgems/mruby-compiler/core/y.tab.c" break; case 86: /* mlhs_basic: "*" mlhs_node */ @@ -7267,7 +7329,7 @@ yyreduce: { (yyval.nd) = list2(0, (yyvsp[0].nd)); } -#line 7271 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7333 "mrbgems/mruby-compiler/core/y.tab.c" break; case 87: /* mlhs_basic: "*" mlhs_node ',' mlhs_post */ @@ -7275,7 +7337,7 @@ yyreduce: { (yyval.nd) = list3(0, (yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 7279 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7341 "mrbgems/mruby-compiler/core/y.tab.c" break; case 88: /* mlhs_basic: "*" */ @@ -7283,7 +7345,7 @@ yyreduce: { (yyval.nd) = list2(0, new_nil(p)); } -#line 7287 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7349 "mrbgems/mruby-compiler/core/y.tab.c" break; case 89: /* mlhs_basic: "*" ',' mlhs_post */ @@ -7291,7 +7353,7 @@ yyreduce: { (yyval.nd) = list3(0, new_nil(p), (yyvsp[0].nd)); } -#line 7295 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7357 "mrbgems/mruby-compiler/core/y.tab.c" break; case 91: /* mlhs_item: tLPAREN mlhs_inner rparen */ @@ -7299,7 +7361,7 @@ yyreduce: { (yyval.nd) = new_masgn(p, (yyvsp[-1].nd), NULL); } -#line 7303 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7365 "mrbgems/mruby-compiler/core/y.tab.c" break; case 92: /* mlhs_list: mlhs_item ',' */ @@ -7307,7 +7369,7 @@ yyreduce: { (yyval.nd) = list1((yyvsp[-1].nd)); } -#line 7311 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7373 "mrbgems/mruby-compiler/core/y.tab.c" break; case 93: /* mlhs_list: mlhs_list mlhs_item ',' */ @@ -7315,7 +7377,7 @@ yyreduce: { (yyval.nd) = push((yyvsp[-2].nd), (yyvsp[-1].nd)); } -#line 7319 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7381 "mrbgems/mruby-compiler/core/y.tab.c" break; case 94: /* mlhs_post: mlhs_item */ @@ -7323,7 +7385,7 @@ yyreduce: { (yyval.nd) = list1((yyvsp[0].nd)); } -#line 7327 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7389 "mrbgems/mruby-compiler/core/y.tab.c" break; case 95: /* mlhs_post: mlhs_list mlhs_item */ @@ -7331,7 +7393,7 @@ yyreduce: { (yyval.nd) = push((yyvsp[-1].nd), (yyvsp[0].nd)); } -#line 7335 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7397 "mrbgems/mruby-compiler/core/y.tab.c" break; case 96: /* mlhs_node: variable */ @@ -7339,7 +7401,7 @@ yyreduce: { assignable(p, (yyvsp[0].nd)); } -#line 7343 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7405 "mrbgems/mruby-compiler/core/y.tab.c" break; case 97: /* mlhs_node: primary_value '[' opt_call_args ']' */ @@ -7347,7 +7409,7 @@ yyreduce: { (yyval.nd) = new_call(p, (yyvsp[-3].nd), intern_op(aref), (yyvsp[-1].nd), '.'); } -#line 7351 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7413 "mrbgems/mruby-compiler/core/y.tab.c" break; case 98: /* mlhs_node: primary_value call_op "local variable or method" */ @@ -7355,7 +7417,7 @@ yyreduce: { (yyval.nd) = new_call(p, (yyvsp[-2].nd), (yyvsp[0].id), 0, (yyvsp[-1].num)); } -#line 7359 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7421 "mrbgems/mruby-compiler/core/y.tab.c" break; case 99: /* mlhs_node: primary_value "::" "local variable or method" */ @@ -7363,7 +7425,7 @@ yyreduce: { (yyval.nd) = new_call(p, (yyvsp[-2].nd), (yyvsp[0].id), 0, tCOLON2); } -#line 7367 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7429 "mrbgems/mruby-compiler/core/y.tab.c" break; case 100: /* mlhs_node: primary_value call_op "constant" */ @@ -7371,7 +7433,7 @@ yyreduce: { (yyval.nd) = new_call(p, (yyvsp[-2].nd), (yyvsp[0].id), 0, (yyvsp[-1].num)); } -#line 7375 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7437 "mrbgems/mruby-compiler/core/y.tab.c" break; case 101: /* mlhs_node: primary_value "::" "constant" */ @@ -7381,7 +7443,7 @@ yyreduce: yyerror(&(yylsp[-2]), p, "dynamic constant assignment"); (yyval.nd) = new_colon2(p, (yyvsp[-2].nd), (yyvsp[0].id)); } -#line 7385 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7447 "mrbgems/mruby-compiler/core/y.tab.c" break; case 102: /* mlhs_node: tCOLON3 "constant" */ @@ -7391,7 +7453,7 @@ yyreduce: yyerror(&(yylsp[-1]), p, "dynamic constant assignment"); (yyval.nd) = new_colon3(p, (yyvsp[0].id)); } -#line 7395 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7457 "mrbgems/mruby-compiler/core/y.tab.c" break; case 103: /* mlhs_node: backref */ @@ -7400,7 +7462,7 @@ yyreduce: backref_error(p, (yyvsp[0].nd)); (yyval.nd) = 0; } -#line 7404 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7466 "mrbgems/mruby-compiler/core/y.tab.c" break; case 104: /* lhs: variable */ @@ -7408,7 +7470,7 @@ yyreduce: { assignable(p, (yyvsp[0].nd)); } -#line 7412 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7474 "mrbgems/mruby-compiler/core/y.tab.c" break; case 105: /* lhs: primary_value '[' opt_call_args ']' */ @@ -7416,7 +7478,7 @@ yyreduce: { (yyval.nd) = new_call(p, (yyvsp[-3].nd), intern_op(aref), (yyvsp[-1].nd), '.'); } -#line 7420 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7482 "mrbgems/mruby-compiler/core/y.tab.c" break; case 106: /* lhs: primary_value call_op "local variable or method" */ @@ -7424,7 +7486,7 @@ yyreduce: { (yyval.nd) = new_call(p, (yyvsp[-2].nd), (yyvsp[0].id), 0, (yyvsp[-1].num)); } -#line 7428 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7490 "mrbgems/mruby-compiler/core/y.tab.c" break; case 107: /* lhs: primary_value "::" "local variable or method" */ @@ -7432,7 +7494,7 @@ yyreduce: { (yyval.nd) = new_call(p, (yyvsp[-2].nd), (yyvsp[0].id), 0, tCOLON2); } -#line 7436 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7498 "mrbgems/mruby-compiler/core/y.tab.c" break; case 108: /* lhs: primary_value call_op "constant" */ @@ -7440,7 +7502,7 @@ yyreduce: { (yyval.nd) = new_call(p, (yyvsp[-2].nd), (yyvsp[0].id), 0, (yyvsp[-1].num)); } -#line 7444 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7506 "mrbgems/mruby-compiler/core/y.tab.c" break; case 109: /* lhs: primary_value "::" "constant" */ @@ -7450,7 +7512,7 @@ yyreduce: yyerror(&(yylsp[-2]), p, "dynamic constant assignment"); (yyval.nd) = new_colon2(p, (yyvsp[-2].nd), (yyvsp[0].id)); } -#line 7454 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7516 "mrbgems/mruby-compiler/core/y.tab.c" break; case 110: /* lhs: tCOLON3 "constant" */ @@ -7460,7 +7522,7 @@ yyreduce: yyerror(&(yylsp[-1]), p, "dynamic constant assignment"); (yyval.nd) = new_colon3(p, (yyvsp[0].id)); } -#line 7464 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7526 "mrbgems/mruby-compiler/core/y.tab.c" break; case 111: /* lhs: backref */ @@ -7469,7 +7531,7 @@ yyreduce: backref_error(p, (yyvsp[0].nd)); (yyval.nd) = 0; } -#line 7473 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7535 "mrbgems/mruby-compiler/core/y.tab.c" break; case 112: /* lhs: "numbered parameter" */ @@ -7477,7 +7539,7 @@ yyreduce: { yyerror(&(yylsp[0]), p, "can't assign to numbered parameter"); } -#line 7481 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7543 "mrbgems/mruby-compiler/core/y.tab.c" break; case 113: /* cname: "local variable or method" */ @@ -7485,7 +7547,7 @@ yyreduce: { yyerror(&(yylsp[0]), p, "class/module name must be CONSTANT"); } -#line 7489 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7551 "mrbgems/mruby-compiler/core/y.tab.c" break; case 115: /* cpath: tCOLON3 cname */ @@ -7493,7 +7555,7 @@ yyreduce: { (yyval.nd) = cons(nint(1), nsym((yyvsp[0].id))); } -#line 7497 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7559 "mrbgems/mruby-compiler/core/y.tab.c" break; case 116: /* cpath: cname */ @@ -7501,7 +7563,7 @@ yyreduce: { (yyval.nd) = cons(nint(0), nsym((yyvsp[0].id))); } -#line 7505 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7567 "mrbgems/mruby-compiler/core/y.tab.c" break; case 117: /* cpath: primary_value "::" cname */ @@ -7510,7 +7572,7 @@ yyreduce: void_expr_error(p, (yyvsp[-2].nd)); (yyval.nd) = cons((yyvsp[-2].nd), nsym((yyvsp[0].id))); } -#line 7514 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7576 "mrbgems/mruby-compiler/core/y.tab.c" break; case 121: /* fname: op */ @@ -7519,7 +7581,7 @@ yyreduce: p->lstate = EXPR_ENDFN; (yyval.id) = (yyvsp[0].id); } -#line 7523 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7585 "mrbgems/mruby-compiler/core/y.tab.c" break; case 122: /* fname: reswords */ @@ -7528,7 +7590,7 @@ yyreduce: p->lstate = EXPR_ENDFN; (yyval.id) = (yyvsp[0].id); } -#line 7532 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7594 "mrbgems/mruby-compiler/core/y.tab.c" break; case 125: /* undef_list: fsym */ @@ -7536,13 +7598,13 @@ yyreduce: { (yyval.nd) = new_undef(p, (yyvsp[0].id)); } -#line 7540 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7602 "mrbgems/mruby-compiler/core/y.tab.c" break; case 126: /* $@6: %empty */ #line 2210 "mrbgems/mruby-compiler/core/parse.y" {p->lstate = EXPR_FNAME;} -#line 7546 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7608 "mrbgems/mruby-compiler/core/y.tab.c" break; case 127: /* undef_list: undef_list ',' $@6 fsym */ @@ -7550,187 +7612,187 @@ yyreduce: { (yyval.nd) = push((yyvsp[-3].nd), nsym((yyvsp[0].id))); } -#line 7554 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7616 "mrbgems/mruby-compiler/core/y.tab.c" break; case 128: /* op: '|' */ #line 2216 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(or); } -#line 7560 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7622 "mrbgems/mruby-compiler/core/y.tab.c" break; case 129: /* op: '^' */ #line 2217 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(xor); } -#line 7566 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7628 "mrbgems/mruby-compiler/core/y.tab.c" break; case 130: /* op: '&' */ #line 2218 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(and); } -#line 7572 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7634 "mrbgems/mruby-compiler/core/y.tab.c" break; case 131: /* op: "<=>" */ #line 2219 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(cmp); } -#line 7578 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7640 "mrbgems/mruby-compiler/core/y.tab.c" break; case 132: /* op: "==" */ #line 2220 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(eq); } -#line 7584 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7646 "mrbgems/mruby-compiler/core/y.tab.c" break; case 133: /* op: "===" */ #line 2221 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(eqq); } -#line 7590 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7652 "mrbgems/mruby-compiler/core/y.tab.c" break; case 134: /* op: "=~" */ #line 2222 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(match); } -#line 7596 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7658 "mrbgems/mruby-compiler/core/y.tab.c" break; case 135: /* op: "!~" */ #line 2223 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(nmatch); } -#line 7602 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7664 "mrbgems/mruby-compiler/core/y.tab.c" break; case 136: /* op: '>' */ #line 2224 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(gt); } -#line 7608 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7670 "mrbgems/mruby-compiler/core/y.tab.c" break; case 137: /* op: ">=" */ #line 2225 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(ge); } -#line 7614 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7676 "mrbgems/mruby-compiler/core/y.tab.c" break; case 138: /* op: '<' */ #line 2226 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(lt); } -#line 7620 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7682 "mrbgems/mruby-compiler/core/y.tab.c" break; case 139: /* op: "<=" */ #line 2227 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(le); } -#line 7626 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7688 "mrbgems/mruby-compiler/core/y.tab.c" break; case 140: /* op: "!=" */ #line 2228 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(neq); } -#line 7632 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7694 "mrbgems/mruby-compiler/core/y.tab.c" break; case 141: /* op: "<<" */ #line 2229 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(lshift); } -#line 7638 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7700 "mrbgems/mruby-compiler/core/y.tab.c" break; case 142: /* op: ">>" */ #line 2230 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(rshift); } -#line 7644 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7706 "mrbgems/mruby-compiler/core/y.tab.c" break; case 143: /* op: '+' */ #line 2231 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(add); } -#line 7650 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7712 "mrbgems/mruby-compiler/core/y.tab.c" break; case 144: /* op: '-' */ #line 2232 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(sub); } -#line 7656 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7718 "mrbgems/mruby-compiler/core/y.tab.c" break; case 145: /* op: '*' */ #line 2233 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(mul); } -#line 7662 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7724 "mrbgems/mruby-compiler/core/y.tab.c" break; case 146: /* op: "*" */ #line 2234 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(mul); } -#line 7668 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7730 "mrbgems/mruby-compiler/core/y.tab.c" break; case 147: /* op: '/' */ #line 2235 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(div); } -#line 7674 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7736 "mrbgems/mruby-compiler/core/y.tab.c" break; case 148: /* op: '%' */ #line 2236 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(mod); } -#line 7680 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7742 "mrbgems/mruby-compiler/core/y.tab.c" break; case 149: /* op: tPOW */ #line 2237 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(pow); } -#line 7686 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7748 "mrbgems/mruby-compiler/core/y.tab.c" break; case 150: /* op: "**" */ #line 2238 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(pow); } -#line 7692 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7754 "mrbgems/mruby-compiler/core/y.tab.c" break; case 151: /* op: '!' */ #line 2239 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(not); } -#line 7698 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7760 "mrbgems/mruby-compiler/core/y.tab.c" break; case 152: /* op: '~' */ #line 2240 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(neg); } -#line 7704 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7766 "mrbgems/mruby-compiler/core/y.tab.c" break; case 153: /* op: "unary plus" */ #line 2241 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(plus); } -#line 7710 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7772 "mrbgems/mruby-compiler/core/y.tab.c" break; case 154: /* op: "unary minus" */ #line 2242 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(minus); } -#line 7716 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7778 "mrbgems/mruby-compiler/core/y.tab.c" break; case 155: /* op: tAREF */ #line 2243 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(aref); } -#line 7722 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7784 "mrbgems/mruby-compiler/core/y.tab.c" break; case 156: /* op: tASET */ #line 2244 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(aset); } -#line 7728 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7790 "mrbgems/mruby-compiler/core/y.tab.c" break; case 157: /* op: '`' */ #line 2245 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(tick); } -#line 7734 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7796 "mrbgems/mruby-compiler/core/y.tab.c" break; case 198: /* arg: lhs '=' arg_rhs */ @@ -7738,7 +7800,7 @@ yyreduce: { (yyval.nd) = new_asgn(p, (yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 7742 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7804 "mrbgems/mruby-compiler/core/y.tab.c" break; case 199: /* arg: var_lhs tOP_ASGN arg_rhs */ @@ -7746,7 +7808,7 @@ yyreduce: { (yyval.nd) = new_op_asgn(p, (yyvsp[-2].nd), (yyvsp[-1].id), (yyvsp[0].nd)); } -#line 7750 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7812 "mrbgems/mruby-compiler/core/y.tab.c" break; case 200: /* arg: primary_value '[' opt_call_args ']' tOP_ASGN arg_rhs */ @@ -7754,7 +7816,7 @@ yyreduce: { (yyval.nd) = new_op_asgn(p, new_call(p, (yyvsp[-5].nd), intern_op(aref), (yyvsp[-3].nd), '.'), (yyvsp[-1].id), (yyvsp[0].nd)); } -#line 7758 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7820 "mrbgems/mruby-compiler/core/y.tab.c" break; case 201: /* arg: primary_value call_op "local variable or method" tOP_ASGN arg_rhs */ @@ -7762,7 +7824,7 @@ yyreduce: { (yyval.nd) = new_op_asgn(p, new_call(p, (yyvsp[-4].nd), (yyvsp[-2].id), 0, (yyvsp[-3].num)), (yyvsp[-1].id), (yyvsp[0].nd)); } -#line 7766 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7828 "mrbgems/mruby-compiler/core/y.tab.c" break; case 202: /* arg: primary_value call_op "constant" tOP_ASGN arg_rhs */ @@ -7770,7 +7832,7 @@ yyreduce: { (yyval.nd) = new_op_asgn(p, new_call(p, (yyvsp[-4].nd), (yyvsp[-2].id), 0, (yyvsp[-3].num)), (yyvsp[-1].id), (yyvsp[0].nd)); } -#line 7774 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7836 "mrbgems/mruby-compiler/core/y.tab.c" break; case 203: /* arg: primary_value "::" "local variable or method" tOP_ASGN arg_rhs */ @@ -7778,7 +7840,7 @@ yyreduce: { (yyval.nd) = new_op_asgn(p, new_call(p, (yyvsp[-4].nd), (yyvsp[-2].id), 0, tCOLON2), (yyvsp[-1].id), (yyvsp[0].nd)); } -#line 7782 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7844 "mrbgems/mruby-compiler/core/y.tab.c" break; case 204: /* arg: primary_value "::" "constant" tOP_ASGN arg_rhs */ @@ -7787,7 +7849,7 @@ yyreduce: yyerror(&(yylsp[-4]), p, "constant re-assignment"); (yyval.nd) = new_begin(p, 0); } -#line 7791 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7853 "mrbgems/mruby-compiler/core/y.tab.c" break; case 205: /* arg: tCOLON3 "constant" tOP_ASGN arg_rhs */ @@ -7796,7 +7858,7 @@ yyreduce: yyerror(&(yylsp[-3]), p, "constant re-assignment"); (yyval.nd) = new_begin(p, 0); } -#line 7800 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7862 "mrbgems/mruby-compiler/core/y.tab.c" break; case 206: /* arg: backref tOP_ASGN arg_rhs */ @@ -7805,7 +7867,7 @@ yyreduce: backref_error(p, (yyvsp[-2].nd)); (yyval.nd) = new_begin(p, 0); } -#line 7809 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7871 "mrbgems/mruby-compiler/core/y.tab.c" break; case 207: /* arg: arg ".." arg */ @@ -7813,7 +7875,7 @@ yyreduce: { (yyval.nd) = new_dot2(p, (yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 7817 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7879 "mrbgems/mruby-compiler/core/y.tab.c" break; case 208: /* arg: arg ".." */ @@ -7821,7 +7883,7 @@ yyreduce: { (yyval.nd) = new_dot2(p, (yyvsp[-1].nd), new_nil(p)); } -#line 7825 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7887 "mrbgems/mruby-compiler/core/y.tab.c" break; case 209: /* arg: tBDOT2 arg */ @@ -7829,7 +7891,7 @@ yyreduce: { (yyval.nd) = new_dot2(p, new_nil(p), (yyvsp[0].nd)); } -#line 7833 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7895 "mrbgems/mruby-compiler/core/y.tab.c" break; case 210: /* arg: arg "..." arg */ @@ -7837,7 +7899,7 @@ yyreduce: { (yyval.nd) = new_dot3(p, (yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 7841 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7903 "mrbgems/mruby-compiler/core/y.tab.c" break; case 211: /* arg: arg "..." */ @@ -7845,7 +7907,7 @@ yyreduce: { (yyval.nd) = new_dot3(p, (yyvsp[-1].nd), new_nil(p)); } -#line 7849 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7911 "mrbgems/mruby-compiler/core/y.tab.c" break; case 212: /* arg: tBDOT3 arg */ @@ -7853,7 +7915,7 @@ yyreduce: { (yyval.nd) = new_dot3(p, new_nil(p), (yyvsp[0].nd)); } -#line 7857 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7919 "mrbgems/mruby-compiler/core/y.tab.c" break; case 213: /* arg: arg '+' arg */ @@ -7861,7 +7923,7 @@ yyreduce: { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "+", (yyvsp[0].nd)); } -#line 7865 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7927 "mrbgems/mruby-compiler/core/y.tab.c" break; case 214: /* arg: arg '-' arg */ @@ -7869,7 +7931,7 @@ yyreduce: { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "-", (yyvsp[0].nd)); } -#line 7873 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7935 "mrbgems/mruby-compiler/core/y.tab.c" break; case 215: /* arg: arg '*' arg */ @@ -7877,7 +7939,7 @@ yyreduce: { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "*", (yyvsp[0].nd)); } -#line 7881 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7943 "mrbgems/mruby-compiler/core/y.tab.c" break; case 216: /* arg: arg '/' arg */ @@ -7885,7 +7947,7 @@ yyreduce: { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "/", (yyvsp[0].nd)); } -#line 7889 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7951 "mrbgems/mruby-compiler/core/y.tab.c" break; case 217: /* arg: arg '%' arg */ @@ -7893,7 +7955,7 @@ yyreduce: { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "%", (yyvsp[0].nd)); } -#line 7897 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7959 "mrbgems/mruby-compiler/core/y.tab.c" break; case 218: /* arg: arg tPOW arg */ @@ -7901,7 +7963,7 @@ yyreduce: { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "**", (yyvsp[0].nd)); } -#line 7905 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7967 "mrbgems/mruby-compiler/core/y.tab.c" break; case 219: /* arg: tUMINUS_NUM "integer literal" tPOW arg */ @@ -7909,7 +7971,7 @@ yyreduce: { (yyval.nd) = new_negate(p, call_bin_op(p, (yyvsp[-2].nd), "**", (yyvsp[0].nd))); } -#line 7913 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7975 "mrbgems/mruby-compiler/core/y.tab.c" break; case 220: /* arg: tUMINUS_NUM "float literal" tPOW arg */ @@ -7917,7 +7979,7 @@ yyreduce: { (yyval.nd) = new_negate(p, call_bin_op(p, (yyvsp[-2].nd), "**", (yyvsp[0].nd))); } -#line 7921 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7983 "mrbgems/mruby-compiler/core/y.tab.c" break; case 221: /* arg: "unary plus" arg */ @@ -7925,7 +7987,7 @@ yyreduce: { (yyval.nd) = call_uni_op(p, (yyvsp[0].nd), "+@"); } -#line 7929 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7991 "mrbgems/mruby-compiler/core/y.tab.c" break; case 222: /* arg: "unary minus" arg */ @@ -7933,7 +7995,7 @@ yyreduce: { (yyval.nd) = new_negate(p, (yyvsp[0].nd)); } -#line 7937 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7999 "mrbgems/mruby-compiler/core/y.tab.c" break; case 223: /* arg: arg '|' arg */ @@ -7941,7 +8003,7 @@ yyreduce: { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "|", (yyvsp[0].nd)); } -#line 7945 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8007 "mrbgems/mruby-compiler/core/y.tab.c" break; case 224: /* arg: arg '^' arg */ @@ -7949,7 +8011,7 @@ yyreduce: { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "^", (yyvsp[0].nd)); } -#line 7953 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8015 "mrbgems/mruby-compiler/core/y.tab.c" break; case 225: /* arg: arg '&' arg */ @@ -7957,7 +8019,7 @@ yyreduce: { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "&", (yyvsp[0].nd)); } -#line 7961 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8023 "mrbgems/mruby-compiler/core/y.tab.c" break; case 226: /* arg: arg "<=>" arg */ @@ -7965,7 +8027,7 @@ yyreduce: { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "<=>", (yyvsp[0].nd)); } -#line 7969 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8031 "mrbgems/mruby-compiler/core/y.tab.c" break; case 227: /* arg: arg '>' arg */ @@ -7973,7 +8035,7 @@ yyreduce: { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), ">", (yyvsp[0].nd)); } -#line 7977 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8039 "mrbgems/mruby-compiler/core/y.tab.c" break; case 228: /* arg: arg ">=" arg */ @@ -7981,7 +8043,7 @@ yyreduce: { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), ">=", (yyvsp[0].nd)); } -#line 7985 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8047 "mrbgems/mruby-compiler/core/y.tab.c" break; case 229: /* arg: arg '<' arg */ @@ -7989,7 +8051,7 @@ yyreduce: { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "<", (yyvsp[0].nd)); } -#line 7993 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8055 "mrbgems/mruby-compiler/core/y.tab.c" break; case 230: /* arg: arg "<=" arg */ @@ -7997,7 +8059,7 @@ yyreduce: { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "<=", (yyvsp[0].nd)); } -#line 8001 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8063 "mrbgems/mruby-compiler/core/y.tab.c" break; case 231: /* arg: arg "==" arg */ @@ -8005,7 +8067,7 @@ yyreduce: { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "==", (yyvsp[0].nd)); } -#line 8009 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8071 "mrbgems/mruby-compiler/core/y.tab.c" break; case 232: /* arg: arg "===" arg */ @@ -8013,7 +8075,7 @@ yyreduce: { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "===", (yyvsp[0].nd)); } -#line 8017 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8079 "mrbgems/mruby-compiler/core/y.tab.c" break; case 233: /* arg: arg "!=" arg */ @@ -8021,7 +8083,7 @@ yyreduce: { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "!=", (yyvsp[0].nd)); } -#line 8025 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8087 "mrbgems/mruby-compiler/core/y.tab.c" break; case 234: /* arg: arg "=~" arg */ @@ -8029,7 +8091,7 @@ yyreduce: { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "=~", (yyvsp[0].nd)); } -#line 8033 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8095 "mrbgems/mruby-compiler/core/y.tab.c" break; case 235: /* arg: arg "!~" arg */ @@ -8037,7 +8099,7 @@ yyreduce: { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "!~", (yyvsp[0].nd)); } -#line 8041 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8103 "mrbgems/mruby-compiler/core/y.tab.c" break; case 236: /* arg: '!' arg */ @@ -8045,7 +8107,7 @@ yyreduce: { (yyval.nd) = call_uni_op(p, cond((yyvsp[0].nd)), "!"); } -#line 8049 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8111 "mrbgems/mruby-compiler/core/y.tab.c" break; case 237: /* arg: '~' arg */ @@ -8053,7 +8115,7 @@ yyreduce: { (yyval.nd) = call_uni_op(p, cond((yyvsp[0].nd)), "~"); } -#line 8057 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8119 "mrbgems/mruby-compiler/core/y.tab.c" break; case 238: /* arg: arg "<<" arg */ @@ -8061,7 +8123,7 @@ yyreduce: { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "<<", (yyvsp[0].nd)); } -#line 8065 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8127 "mrbgems/mruby-compiler/core/y.tab.c" break; case 239: /* arg: arg ">>" arg */ @@ -8069,7 +8131,7 @@ yyreduce: { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), ">>", (yyvsp[0].nd)); } -#line 8073 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8135 "mrbgems/mruby-compiler/core/y.tab.c" break; case 240: /* arg: arg "&&" arg */ @@ -8077,7 +8139,7 @@ yyreduce: { (yyval.nd) = new_and(p, (yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 8081 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8143 "mrbgems/mruby-compiler/core/y.tab.c" break; case 241: /* arg: arg "||" arg */ @@ -8085,7 +8147,7 @@ yyreduce: { (yyval.nd) = new_or(p, (yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 8089 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8151 "mrbgems/mruby-compiler/core/y.tab.c" break; case 242: /* arg: arg '?' arg opt_nl ':' arg */ @@ -8093,7 +8155,7 @@ yyreduce: { (yyval.nd) = new_if(p, cond((yyvsp[-5].nd)), (yyvsp[-3].nd), (yyvsp[0].nd)); } -#line 8097 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8159 "mrbgems/mruby-compiler/core/y.tab.c" break; case 243: /* arg: arg '?' arg opt_nl "label" arg */ @@ -8101,7 +8163,7 @@ yyreduce: { (yyval.nd) = new_if(p, cond((yyvsp[-5].nd)), (yyvsp[-3].nd), (yyvsp[0].nd)); } -#line 8105 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8167 "mrbgems/mruby-compiler/core/y.tab.c" break; case 244: /* arg: defn_head f_opt_arglist_paren '=' arg */ @@ -8114,7 +8176,7 @@ yyreduce: nvars_unnest(p); p->in_def--; } -#line 8118 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8180 "mrbgems/mruby-compiler/core/y.tab.c" break; case 245: /* arg: defn_head f_opt_arglist_paren '=' arg "'rescue' modifier" arg */ @@ -8127,7 +8189,7 @@ yyreduce: nvars_unnest(p); p->in_def--; } -#line 8131 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8193 "mrbgems/mruby-compiler/core/y.tab.c" break; case 246: /* arg: defs_head f_opt_arglist_paren '=' arg */ @@ -8140,7 +8202,7 @@ yyreduce: p->in_def--; p->in_single--; } -#line 8144 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8206 "mrbgems/mruby-compiler/core/y.tab.c" break; case 247: /* arg: defs_head f_opt_arglist_paren '=' arg "'rescue' modifier" arg */ @@ -8153,7 +8215,7 @@ yyreduce: p->in_def--; p->in_single--; } -#line 8157 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8219 "mrbgems/mruby-compiler/core/y.tab.c" break; case 248: /* arg: primary */ @@ -8161,7 +8223,7 @@ yyreduce: { (yyval.nd) = (yyvsp[0].nd); } -#line 8165 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8227 "mrbgems/mruby-compiler/core/y.tab.c" break; case 250: /* aref_args: args trailer */ @@ -8170,7 +8232,7 @@ yyreduce: (yyval.nd) = (yyvsp[-1].nd); NODE_LINENO((yyval.nd), (yyvsp[-1].nd)); } -#line 8174 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8236 "mrbgems/mruby-compiler/core/y.tab.c" break; case 251: /* aref_args: args comma assocs trailer */ @@ -8178,7 +8240,7 @@ yyreduce: { (yyval.nd) = push((yyvsp[-3].nd), new_hash(p, (yyvsp[-1].nd))); } -#line 8182 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8244 "mrbgems/mruby-compiler/core/y.tab.c" break; case 252: /* aref_args: assocs trailer */ @@ -8187,7 +8249,7 @@ yyreduce: (yyval.nd) = cons(new_kw_hash(p, (yyvsp[-1].nd)), 0); NODE_LINENO((yyval.nd), (yyvsp[-1].nd)); } -#line 8191 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8253 "mrbgems/mruby-compiler/core/y.tab.c" break; case 253: /* arg_rhs: arg */ @@ -8195,7 +8257,7 @@ yyreduce: { (yyval.nd) = (yyvsp[0].nd); } -#line 8199 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8261 "mrbgems/mruby-compiler/core/y.tab.c" break; case 254: /* arg_rhs: arg "'rescue' modifier" arg */ @@ -8204,7 +8266,7 @@ yyreduce: void_expr_error(p, (yyvsp[-2].nd)); (yyval.nd) = new_mod_rescue(p, (yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 8208 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8270 "mrbgems/mruby-compiler/core/y.tab.c" break; case 255: /* paren_args: '(' opt_call_args ')' */ @@ -8212,7 +8274,7 @@ yyreduce: { (yyval.nd) = (yyvsp[-1].nd); } -#line 8216 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8278 "mrbgems/mruby-compiler/core/y.tab.c" break; case 256: /* paren_args: '(' args comma tBDOT3 rparen */ @@ -8225,7 +8287,7 @@ yyreduce: new_kw_hash(p, list1(cons(new_kw_rest_args(p, 0), new_lvar(p, k)))), new_block_arg(p, new_lvar(p, b))); } -#line 8229 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8291 "mrbgems/mruby-compiler/core/y.tab.c" break; case 257: /* paren_args: '(' tBDOT3 rparen */ @@ -8244,7 +8306,7 @@ yyreduce: (yyval.nd) = 0; } } -#line 8248 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8310 "mrbgems/mruby-compiler/core/y.tab.c" break; case 262: /* opt_call_args: args comma */ @@ -8253,7 +8315,7 @@ yyreduce: (yyval.nd) = new_callargs(p,(yyvsp[-1].nd),0,0); NODE_LINENO((yyval.nd), (yyvsp[-1].nd)); } -#line 8257 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8319 "mrbgems/mruby-compiler/core/y.tab.c" break; case 263: /* opt_call_args: args comma assocs comma */ @@ -8262,7 +8324,7 @@ yyreduce: (yyval.nd) = new_callargs(p,(yyvsp[-3].nd),new_kw_hash(p,(yyvsp[-1].nd)),0); NODE_LINENO((yyval.nd), (yyvsp[-3].nd)); } -#line 8266 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8328 "mrbgems/mruby-compiler/core/y.tab.c" break; case 264: /* opt_call_args: assocs comma */ @@ -8271,7 +8333,7 @@ yyreduce: (yyval.nd) = new_callargs(p,0,new_kw_hash(p,(yyvsp[-1].nd)),0); NODE_LINENO((yyval.nd), (yyvsp[-1].nd)); } -#line 8275 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8337 "mrbgems/mruby-compiler/core/y.tab.c" break; case 265: /* call_args: command */ @@ -8281,7 +8343,7 @@ yyreduce: (yyval.nd) = new_callargs(p, list1((yyvsp[0].nd)), 0, 0); NODE_LINENO((yyval.nd), (yyvsp[0].nd)); } -#line 8285 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8347 "mrbgems/mruby-compiler/core/y.tab.c" break; case 266: /* call_args: args opt_block_arg */ @@ -8290,7 +8352,7 @@ yyreduce: (yyval.nd) = new_callargs(p, (yyvsp[-1].nd), 0, (yyvsp[0].nd)); NODE_LINENO((yyval.nd), (yyvsp[-1].nd)); } -#line 8294 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8356 "mrbgems/mruby-compiler/core/y.tab.c" break; case 267: /* call_args: assocs opt_block_arg */ @@ -8299,7 +8361,7 @@ yyreduce: (yyval.nd) = new_callargs(p, 0, new_kw_hash(p, (yyvsp[-1].nd)), (yyvsp[0].nd)); NODE_LINENO((yyval.nd), (yyvsp[-1].nd)); } -#line 8303 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8365 "mrbgems/mruby-compiler/core/y.tab.c" break; case 268: /* call_args: args comma assocs opt_block_arg */ @@ -8308,7 +8370,7 @@ yyreduce: (yyval.nd) = new_callargs(p, (yyvsp[-3].nd), new_kw_hash(p, (yyvsp[-1].nd)), (yyvsp[0].nd)); NODE_LINENO((yyval.nd), (yyvsp[-3].nd)); } -#line 8312 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8374 "mrbgems/mruby-compiler/core/y.tab.c" break; case 269: /* call_args: block_arg */ @@ -8317,7 +8379,7 @@ yyreduce: (yyval.nd) = new_callargs(p, 0, 0, (yyvsp[0].nd)); NODE_LINENO((yyval.nd), (yyvsp[0].nd)); } -#line 8321 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8383 "mrbgems/mruby-compiler/core/y.tab.c" break; case 270: /* @7: %empty */ @@ -8326,7 +8388,7 @@ yyreduce: (yyval.stack) = p->cmdarg_stack; CMDARG_PUSH(1); } -#line 8330 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8392 "mrbgems/mruby-compiler/core/y.tab.c" break; case 271: /* command_args: @7 call_args */ @@ -8335,7 +8397,7 @@ yyreduce: p->cmdarg_stack = (yyvsp[-1].stack); (yyval.nd) = (yyvsp[0].nd); } -#line 8339 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8401 "mrbgems/mruby-compiler/core/y.tab.c" break; case 272: /* block_arg: "&" arg */ @@ -8343,7 +8405,7 @@ yyreduce: { (yyval.nd) = new_block_arg(p, (yyvsp[0].nd)); } -#line 8347 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8409 "mrbgems/mruby-compiler/core/y.tab.c" break; case 273: /* block_arg: "&" */ @@ -8351,7 +8413,7 @@ yyreduce: { (yyval.nd) = new_block_arg(p, 0); } -#line 8355 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8417 "mrbgems/mruby-compiler/core/y.tab.c" break; case 274: /* opt_block_arg: comma block_arg */ @@ -8359,7 +8421,7 @@ yyreduce: { (yyval.nd) = (yyvsp[0].nd); } -#line 8363 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8425 "mrbgems/mruby-compiler/core/y.tab.c" break; case 275: /* opt_block_arg: none */ @@ -8367,7 +8429,7 @@ yyreduce: { (yyval.nd) = 0; } -#line 8371 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8433 "mrbgems/mruby-compiler/core/y.tab.c" break; case 277: /* args: arg */ @@ -8377,7 +8439,7 @@ yyreduce: (yyval.nd) = list1((yyvsp[0].nd)); NODE_LINENO((yyval.nd), (yyvsp[0].nd)); } -#line 8381 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8443 "mrbgems/mruby-compiler/core/y.tab.c" break; case 278: /* args: "*" */ @@ -8385,7 +8447,7 @@ yyreduce: { (yyval.nd) = list1(new_splat(p, new_lvar(p, intern_op(mul)))); } -#line 8389 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8451 "mrbgems/mruby-compiler/core/y.tab.c" break; case 279: /* args: "*" arg */ @@ -8394,7 +8456,7 @@ yyreduce: (yyval.nd) = list1(new_splat(p, (yyvsp[0].nd))); NODE_LINENO((yyval.nd), (yyvsp[0].nd)); } -#line 8398 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8460 "mrbgems/mruby-compiler/core/y.tab.c" break; case 280: /* args: args comma arg */ @@ -8403,7 +8465,7 @@ yyreduce: void_expr_error(p, (yyvsp[0].nd)); (yyval.nd) = push((yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 8407 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8469 "mrbgems/mruby-compiler/core/y.tab.c" break; case 281: /* args: args comma "*" */ @@ -8411,7 +8473,7 @@ yyreduce: { (yyval.nd) = push((yyvsp[-2].nd), new_splat(p, new_lvar(p, intern_op(mul)))); } -#line 8415 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8477 "mrbgems/mruby-compiler/core/y.tab.c" break; case 282: /* args: args comma "*" arg */ @@ -8419,7 +8481,7 @@ yyreduce: { (yyval.nd) = push((yyvsp[-3].nd), new_splat(p, (yyvsp[0].nd))); } -#line 8423 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8485 "mrbgems/mruby-compiler/core/y.tab.c" break; case 283: /* mrhs: args comma arg */ @@ -8428,7 +8490,7 @@ yyreduce: void_expr_error(p, (yyvsp[0].nd)); (yyval.nd) = push((yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 8432 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8494 "mrbgems/mruby-compiler/core/y.tab.c" break; case 284: /* mrhs: args comma "*" arg */ @@ -8436,7 +8498,7 @@ yyreduce: { (yyval.nd) = push((yyvsp[-3].nd), new_splat(p, (yyvsp[0].nd))); } -#line 8440 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8502 "mrbgems/mruby-compiler/core/y.tab.c" break; case 285: /* mrhs: "*" arg */ @@ -8444,7 +8506,7 @@ yyreduce: { (yyval.nd) = list1(new_splat(p, (yyvsp[0].nd))); } -#line 8448 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8510 "mrbgems/mruby-compiler/core/y.tab.c" break; case 293: /* primary: "numbered parameter" */ @@ -8452,7 +8514,7 @@ yyreduce: { (yyval.nd) = new_nvar(p, (yyvsp[0].num)); } -#line 8456 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8518 "mrbgems/mruby-compiler/core/y.tab.c" break; case 294: /* primary: "method" */ @@ -8460,7 +8522,7 @@ yyreduce: { (yyval.nd) = new_fcall(p, (yyvsp[0].id), 0); } -#line 8464 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8526 "mrbgems/mruby-compiler/core/y.tab.c" break; case 295: /* @8: %empty */ @@ -8469,7 +8531,7 @@ yyreduce: (yyval.stack) = p->cmdarg_stack; p->cmdarg_stack = 0; } -#line 8473 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8535 "mrbgems/mruby-compiler/core/y.tab.c" break; case 296: /* primary: "'begin'" @8 bodystmt "'end'" */ @@ -8478,7 +8540,7 @@ yyreduce: p->cmdarg_stack = (yyvsp[-2].stack); (yyval.nd) = (yyvsp[-1].nd); } -#line 8482 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8544 "mrbgems/mruby-compiler/core/y.tab.c" break; case 297: /* @9: %empty */ @@ -8487,13 +8549,13 @@ yyreduce: (yyval.stack) = p->cmdarg_stack; p->cmdarg_stack = 0; } -#line 8491 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8553 "mrbgems/mruby-compiler/core/y.tab.c" break; case 298: /* $@10: %empty */ #line 2710 "mrbgems/mruby-compiler/core/parse.y" {p->lstate = EXPR_ENDARG;} -#line 8497 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8559 "mrbgems/mruby-compiler/core/y.tab.c" break; case 299: /* primary: "(" @9 stmt $@10 rparen */ @@ -8502,13 +8564,13 @@ yyreduce: p->cmdarg_stack = (yyvsp[-3].stack); (yyval.nd) = (yyvsp[-2].nd); } -#line 8506 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8568 "mrbgems/mruby-compiler/core/y.tab.c" break; case 300: /* $@11: %empty */ #line 2715 "mrbgems/mruby-compiler/core/parse.y" {p->lstate = EXPR_ENDARG;} -#line 8512 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8574 "mrbgems/mruby-compiler/core/y.tab.c" break; case 301: /* primary: "(" $@11 rparen */ @@ -8516,7 +8578,7 @@ yyreduce: { (yyval.nd) = new_nil(p); } -#line 8520 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8582 "mrbgems/mruby-compiler/core/y.tab.c" break; case 302: /* primary: tLPAREN compstmt ')' */ @@ -8524,7 +8586,7 @@ yyreduce: { (yyval.nd) = (yyvsp[-1].nd); } -#line 8528 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8590 "mrbgems/mruby-compiler/core/y.tab.c" break; case 303: /* primary: primary_value "::" "constant" */ @@ -8532,7 +8594,7 @@ yyreduce: { (yyval.nd) = new_colon2(p, (yyvsp[-2].nd), (yyvsp[0].id)); } -#line 8536 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8598 "mrbgems/mruby-compiler/core/y.tab.c" break; case 304: /* primary: tCOLON3 "constant" */ @@ -8540,7 +8602,7 @@ yyreduce: { (yyval.nd) = new_colon3(p, (yyvsp[0].id)); } -#line 8544 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8606 "mrbgems/mruby-compiler/core/y.tab.c" break; case 305: /* primary: "[" aref_args ']' */ @@ -8549,7 +8611,7 @@ yyreduce: (yyval.nd) = new_array(p, (yyvsp[-1].nd)); NODE_LINENO((yyval.nd), (yyvsp[-1].nd)); } -#line 8553 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8615 "mrbgems/mruby-compiler/core/y.tab.c" break; case 306: /* primary: tLBRACE assoc_list '}' */ @@ -8558,7 +8620,7 @@ yyreduce: (yyval.nd) = new_hash(p, (yyvsp[-1].nd)); NODE_LINENO((yyval.nd), (yyvsp[-1].nd)); } -#line 8562 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8624 "mrbgems/mruby-compiler/core/y.tab.c" break; case 307: /* primary: "'return'" */ @@ -8566,7 +8628,7 @@ yyreduce: { (yyval.nd) = new_return(p, 0); } -#line 8570 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8632 "mrbgems/mruby-compiler/core/y.tab.c" break; case 308: /* primary: "'yield'" opt_paren_args */ @@ -8574,7 +8636,7 @@ yyreduce: { (yyval.nd) = new_yield(p, (yyvsp[0].nd)); } -#line 8578 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8640 "mrbgems/mruby-compiler/core/y.tab.c" break; case 309: /* primary: "'not'" '(' expr rparen */ @@ -8582,7 +8644,7 @@ yyreduce: { (yyval.nd) = call_uni_op(p, cond((yyvsp[-1].nd)), "!"); } -#line 8586 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8648 "mrbgems/mruby-compiler/core/y.tab.c" break; case 310: /* primary: "'not'" '(' rparen */ @@ -8590,7 +8652,7 @@ yyreduce: { (yyval.nd) = call_uni_op(p, new_nil(p), "!"); } -#line 8594 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8656 "mrbgems/mruby-compiler/core/y.tab.c" break; case 311: /* primary: operation brace_block */ @@ -8598,7 +8660,7 @@ yyreduce: { (yyval.nd) = new_fcall(p, (yyvsp[-1].id), new_callargs(p, 0, 0, (yyvsp[0].nd))); } -#line 8602 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8664 "mrbgems/mruby-compiler/core/y.tab.c" break; case 313: /* primary: method_call brace_block */ @@ -8607,7 +8669,7 @@ yyreduce: call_with_block(p, (yyvsp[-1].nd), (yyvsp[0].nd)); (yyval.nd) = (yyvsp[-1].nd); } -#line 8611 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8673 "mrbgems/mruby-compiler/core/y.tab.c" break; case 314: /* @12: %empty */ @@ -8618,7 +8680,7 @@ yyreduce: (yyval.num) = p->lpar_beg; p->lpar_beg = ++p->paren_nest; } -#line 8622 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8684 "mrbgems/mruby-compiler/core/y.tab.c" break; case 315: /* @13: %empty */ @@ -8627,7 +8689,7 @@ yyreduce: (yyval.stack) = p->cmdarg_stack; p->cmdarg_stack = 0; } -#line 8631 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8693 "mrbgems/mruby-compiler/core/y.tab.c" break; case 316: /* primary: "->" @12 f_larglist @13 lambda_body */ @@ -8640,7 +8702,7 @@ yyreduce: p->cmdarg_stack = (yyvsp[-1].stack); CMDARG_LEXPOP(); } -#line 8644 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8706 "mrbgems/mruby-compiler/core/y.tab.c" break; case 317: /* primary: "'if'" expr_value then compstmt if_tail "'end'" */ @@ -8649,7 +8711,7 @@ yyreduce: (yyval.nd) = new_if(p, cond((yyvsp[-4].nd)), (yyvsp[-2].nd), (yyvsp[-1].nd)); SET_LINENO((yyval.nd), (yyvsp[-5].num)); } -#line 8653 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8715 "mrbgems/mruby-compiler/core/y.tab.c" break; case 318: /* primary: "'unless'" expr_value then compstmt opt_else "'end'" */ @@ -8658,19 +8720,19 @@ yyreduce: (yyval.nd) = new_unless(p, cond((yyvsp[-4].nd)), (yyvsp[-2].nd), (yyvsp[-1].nd)); SET_LINENO((yyval.nd), (yyvsp[-5].num)); } -#line 8662 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8724 "mrbgems/mruby-compiler/core/y.tab.c" break; case 319: /* $@14: %empty */ #line 2804 "mrbgems/mruby-compiler/core/parse.y" {COND_PUSH(1);} -#line 8668 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8730 "mrbgems/mruby-compiler/core/y.tab.c" break; case 320: /* $@15: %empty */ #line 2804 "mrbgems/mruby-compiler/core/parse.y" {COND_POP();} -#line 8674 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8736 "mrbgems/mruby-compiler/core/y.tab.c" break; case 321: /* primary: "'while'" $@14 expr_value do $@15 compstmt "'end'" */ @@ -8679,19 +8741,19 @@ yyreduce: (yyval.nd) = new_while(p, cond((yyvsp[-4].nd)), (yyvsp[-1].nd)); SET_LINENO((yyval.nd), (yyvsp[-6].num)); } -#line 8683 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8745 "mrbgems/mruby-compiler/core/y.tab.c" break; case 322: /* $@16: %empty */ #line 2811 "mrbgems/mruby-compiler/core/parse.y" {COND_PUSH(1);} -#line 8689 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8751 "mrbgems/mruby-compiler/core/y.tab.c" break; case 323: /* $@17: %empty */ #line 2811 "mrbgems/mruby-compiler/core/parse.y" {COND_POP();} -#line 8695 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8757 "mrbgems/mruby-compiler/core/y.tab.c" break; case 324: /* primary: "'until'" $@16 expr_value do $@17 compstmt "'end'" */ @@ -8700,7 +8762,7 @@ yyreduce: (yyval.nd) = new_until(p, cond((yyvsp[-4].nd)), (yyvsp[-1].nd)); SET_LINENO((yyval.nd), (yyvsp[-6].num)); } -#line 8704 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8766 "mrbgems/mruby-compiler/core/y.tab.c" break; case 325: /* primary: "'case'" expr_value opt_terms case_body "'end'" */ @@ -8708,7 +8770,7 @@ yyreduce: { (yyval.nd) = new_case(p, (yyvsp[-3].nd), (yyvsp[-1].nd)); } -#line 8712 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8774 "mrbgems/mruby-compiler/core/y.tab.c" break; case 326: /* primary: "'case'" opt_terms case_body "'end'" */ @@ -8716,19 +8778,19 @@ yyreduce: { (yyval.nd) = new_case(p, 0, (yyvsp[-1].nd)); } -#line 8720 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8782 "mrbgems/mruby-compiler/core/y.tab.c" break; case 327: /* $@18: %empty */ #line 2829 "mrbgems/mruby-compiler/core/parse.y" {COND_PUSH(1);} -#line 8726 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8788 "mrbgems/mruby-compiler/core/y.tab.c" break; case 328: /* $@19: %empty */ #line 2831 "mrbgems/mruby-compiler/core/parse.y" {COND_POP();} -#line 8732 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8794 "mrbgems/mruby-compiler/core/y.tab.c" break; case 329: /* primary: "'for'" for_var "'in'" $@18 expr_value do $@19 compstmt "'end'" */ @@ -8737,7 +8799,7 @@ yyreduce: (yyval.nd) = new_for(p, (yyvsp[-7].nd), (yyvsp[-4].nd), (yyvsp[-1].nd)); SET_LINENO((yyval.nd), (yyvsp[-8].num)); } -#line 8741 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8803 "mrbgems/mruby-compiler/core/y.tab.c" break; case 330: /* @20: %empty */ @@ -8748,7 +8810,7 @@ yyreduce: (yyval.nd) = local_switch(p); nvars_block(p); } -#line 8752 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8814 "mrbgems/mruby-compiler/core/y.tab.c" break; case 331: /* primary: "'class'" cpath superclass @20 bodystmt "'end'" */ @@ -8759,7 +8821,7 @@ yyreduce: local_resume(p, (yyvsp[-2].nd)); nvars_unnest(p); } -#line 8763 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8825 "mrbgems/mruby-compiler/core/y.tab.c" break; case 332: /* @21: %empty */ @@ -8768,7 +8830,7 @@ yyreduce: (yyval.num) = p->in_def; p->in_def = 0; } -#line 8772 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8834 "mrbgems/mruby-compiler/core/y.tab.c" break; case 333: /* @22: %empty */ @@ -8778,7 +8840,7 @@ yyreduce: nvars_block(p); p->in_single = 0; } -#line 8782 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8844 "mrbgems/mruby-compiler/core/y.tab.c" break; case 334: /* primary: "'class'" "<<" expr @21 term @22 bodystmt "'end'" */ @@ -8791,7 +8853,7 @@ yyreduce: p->in_def = (yyvsp[-4].num); p->in_single = intn((yyvsp[-2].nd)->cdr); } -#line 8795 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8857 "mrbgems/mruby-compiler/core/y.tab.c" break; case 335: /* @23: %empty */ @@ -8802,7 +8864,7 @@ yyreduce: (yyval.nd) = local_switch(p); nvars_block(p); } -#line 8806 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8868 "mrbgems/mruby-compiler/core/y.tab.c" break; case 336: /* primary: "'module'" cpath @23 bodystmt "'end'" */ @@ -8813,7 +8875,7 @@ yyreduce: local_resume(p, (yyvsp[-2].nd)); nvars_unnest(p); } -#line 8817 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8879 "mrbgems/mruby-compiler/core/y.tab.c" break; case 337: /* primary: defn_head f_arglist bodystmt "'end'" */ @@ -8824,7 +8886,7 @@ yyreduce: nvars_unnest(p); p->in_def--; } -#line 8828 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8890 "mrbgems/mruby-compiler/core/y.tab.c" break; case 338: /* primary: defs_head f_arglist bodystmt "'end'" */ @@ -8836,7 +8898,7 @@ yyreduce: p->in_def--; p->in_single--; } -#line 8840 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8902 "mrbgems/mruby-compiler/core/y.tab.c" break; case 339: /* primary: "'break'" */ @@ -8844,7 +8906,7 @@ yyreduce: { (yyval.nd) = new_break(p, 0); } -#line 8848 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8910 "mrbgems/mruby-compiler/core/y.tab.c" break; case 340: /* primary: "'next'" */ @@ -8852,7 +8914,7 @@ yyreduce: { (yyval.nd) = new_next(p, 0); } -#line 8856 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8918 "mrbgems/mruby-compiler/core/y.tab.c" break; case 341: /* primary: "'redo'" */ @@ -8860,7 +8922,7 @@ yyreduce: { (yyval.nd) = new_redo(p); } -#line 8864 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8926 "mrbgems/mruby-compiler/core/y.tab.c" break; case 342: /* primary: "'retry'" */ @@ -8868,7 +8930,7 @@ yyreduce: { (yyval.nd) = new_retry(p); } -#line 8872 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8934 "mrbgems/mruby-compiler/core/y.tab.c" break; case 343: /* primary_value: primary */ @@ -8877,7 +8939,7 @@ yyreduce: (yyval.nd) = (yyvsp[0].nd); if (!(yyval.nd)) (yyval.nd) = new_nil(p); } -#line 8881 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8943 "mrbgems/mruby-compiler/core/y.tab.c" break; case 350: /* if_tail: "'elsif'" expr_value then compstmt if_tail */ @@ -8885,7 +8947,7 @@ yyreduce: { (yyval.nd) = new_if(p, cond((yyvsp[-3].nd)), (yyvsp[-1].nd), (yyvsp[0].nd)); } -#line 8889 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8951 "mrbgems/mruby-compiler/core/y.tab.c" break; case 352: /* opt_else: "'else'" compstmt */ @@ -8893,7 +8955,7 @@ yyreduce: { (yyval.nd) = (yyvsp[0].nd); } -#line 8897 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8959 "mrbgems/mruby-compiler/core/y.tab.c" break; case 353: /* for_var: lhs */ @@ -8901,7 +8963,7 @@ yyreduce: { (yyval.nd) = list1(list1((yyvsp[0].nd))); } -#line 8905 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8967 "mrbgems/mruby-compiler/core/y.tab.c" break; case 355: /* f_margs: f_arg */ @@ -8909,7 +8971,7 @@ yyreduce: { (yyval.nd) = list3((yyvsp[0].nd),0,0); } -#line 8913 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8975 "mrbgems/mruby-compiler/core/y.tab.c" break; case 356: /* f_margs: f_arg ',' "*" f_norm_arg */ @@ -8917,7 +8979,7 @@ yyreduce: { (yyval.nd) = list3((yyvsp[-3].nd), new_arg(p, (yyvsp[0].id)), 0); } -#line 8921 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8983 "mrbgems/mruby-compiler/core/y.tab.c" break; case 357: /* f_margs: f_arg ',' "*" f_norm_arg ',' f_arg */ @@ -8925,7 +8987,7 @@ yyreduce: { (yyval.nd) = list3((yyvsp[-5].nd), new_arg(p, (yyvsp[-2].id)), (yyvsp[0].nd)); } -#line 8929 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8991 "mrbgems/mruby-compiler/core/y.tab.c" break; case 358: /* f_margs: f_arg ',' "*" */ @@ -8934,7 +8996,7 @@ yyreduce: local_add_f(p, intern_op(mul)); (yyval.nd) = list3((yyvsp[-2].nd), nint(-1), 0); } -#line 8938 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9000 "mrbgems/mruby-compiler/core/y.tab.c" break; case 359: /* f_margs: f_arg ',' "*" ',' f_arg */ @@ -8942,7 +9004,7 @@ yyreduce: { (yyval.nd) = list3((yyvsp[-4].nd), nint(-1), (yyvsp[0].nd)); } -#line 8946 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9008 "mrbgems/mruby-compiler/core/y.tab.c" break; case 360: /* f_margs: "*" f_norm_arg */ @@ -8950,7 +9012,7 @@ yyreduce: { (yyval.nd) = list3(0, new_arg(p, (yyvsp[0].id)), 0); } -#line 8954 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9016 "mrbgems/mruby-compiler/core/y.tab.c" break; case 361: /* f_margs: "*" f_norm_arg ',' f_arg */ @@ -8958,7 +9020,7 @@ yyreduce: { (yyval.nd) = list3(0, new_arg(p, (yyvsp[-2].id)), (yyvsp[0].nd)); } -#line 8962 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9024 "mrbgems/mruby-compiler/core/y.tab.c" break; case 362: /* f_margs: "*" */ @@ -8967,7 +9029,7 @@ yyreduce: local_add_f(p, intern_op(mul)); (yyval.nd) = list3(0, nint(-1), 0); } -#line 8971 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9033 "mrbgems/mruby-compiler/core/y.tab.c" break; case 363: /* $@24: %empty */ @@ -8975,7 +9037,7 @@ yyreduce: { local_add_f(p, intern_op(mul)); } -#line 8979 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9041 "mrbgems/mruby-compiler/core/y.tab.c" break; case 364: /* f_margs: "*" ',' $@24 f_arg */ @@ -8983,7 +9045,7 @@ yyreduce: { (yyval.nd) = list3(0, nint(-1), (yyvsp[0].nd)); } -#line 8987 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9049 "mrbgems/mruby-compiler/core/y.tab.c" break; case 365: /* block_args_tail: f_block_kwarg ',' f_kwrest opt_f_block_arg */ @@ -8991,7 +9053,7 @@ yyreduce: { (yyval.nd) = new_args_tail(p, (yyvsp[-3].nd), (yyvsp[-1].nd), (yyvsp[0].id)); } -#line 8995 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9057 "mrbgems/mruby-compiler/core/y.tab.c" break; case 366: /* block_args_tail: f_block_kwarg opt_f_block_arg */ @@ -8999,7 +9061,7 @@ yyreduce: { (yyval.nd) = new_args_tail(p, (yyvsp[-1].nd), 0, (yyvsp[0].id)); } -#line 9003 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9065 "mrbgems/mruby-compiler/core/y.tab.c" break; case 367: /* block_args_tail: f_kwrest opt_f_block_arg */ @@ -9007,7 +9069,7 @@ yyreduce: { (yyval.nd) = new_args_tail(p, 0, (yyvsp[-1].nd), (yyvsp[0].id)); } -#line 9011 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9073 "mrbgems/mruby-compiler/core/y.tab.c" break; case 368: /* block_args_tail: f_block_arg */ @@ -9015,7 +9077,7 @@ yyreduce: { (yyval.nd) = new_args_tail(p, 0, 0, (yyvsp[0].id)); } -#line 9019 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9081 "mrbgems/mruby-compiler/core/y.tab.c" break; case 369: /* opt_block_args_tail: ',' block_args_tail */ @@ -9023,7 +9085,7 @@ yyreduce: { (yyval.nd) = (yyvsp[0].nd); } -#line 9027 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9089 "mrbgems/mruby-compiler/core/y.tab.c" break; case 370: /* opt_block_args_tail: %empty */ @@ -9031,7 +9093,7 @@ yyreduce: { (yyval.nd) = new_args_tail(p, 0, 0, 0); } -#line 9035 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9097 "mrbgems/mruby-compiler/core/y.tab.c" break; case 371: /* block_param: f_arg ',' f_block_optarg ',' f_rest_arg opt_block_args_tail */ @@ -9039,7 +9101,7 @@ yyreduce: { (yyval.nd) = new_args(p, (yyvsp[-5].nd), (yyvsp[-3].nd), (yyvsp[-1].id), 0, (yyvsp[0].nd)); } -#line 9043 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9105 "mrbgems/mruby-compiler/core/y.tab.c" break; case 372: /* block_param: f_arg ',' f_block_optarg ',' f_rest_arg ',' f_arg opt_block_args_tail */ @@ -9047,7 +9109,7 @@ yyreduce: { (yyval.nd) = new_args(p, (yyvsp[-7].nd), (yyvsp[-5].nd), (yyvsp[-3].id), (yyvsp[-1].nd), (yyvsp[0].nd)); } -#line 9051 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9113 "mrbgems/mruby-compiler/core/y.tab.c" break; case 373: /* block_param: f_arg ',' f_block_optarg opt_block_args_tail */ @@ -9055,7 +9117,7 @@ yyreduce: { (yyval.nd) = new_args(p, (yyvsp[-3].nd), (yyvsp[-1].nd), 0, 0, (yyvsp[0].nd)); } -#line 9059 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9121 "mrbgems/mruby-compiler/core/y.tab.c" break; case 374: /* block_param: f_arg ',' f_block_optarg ',' f_arg opt_block_args_tail */ @@ -9063,7 +9125,7 @@ yyreduce: { (yyval.nd) = new_args(p, (yyvsp[-5].nd), (yyvsp[-3].nd), 0, (yyvsp[-1].nd), (yyvsp[0].nd)); } -#line 9067 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9129 "mrbgems/mruby-compiler/core/y.tab.c" break; case 375: /* block_param: f_arg ',' f_rest_arg opt_block_args_tail */ @@ -9071,7 +9133,7 @@ yyreduce: { (yyval.nd) = new_args(p, (yyvsp[-3].nd), 0, (yyvsp[-1].id), 0, (yyvsp[0].nd)); } -#line 9075 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9137 "mrbgems/mruby-compiler/core/y.tab.c" break; case 376: /* block_param: f_arg ',' opt_block_args_tail */ @@ -9079,7 +9141,7 @@ yyreduce: { (yyval.nd) = new_args(p, (yyvsp[-2].nd), 0, 0, 0, (yyvsp[0].nd)); } -#line 9083 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9145 "mrbgems/mruby-compiler/core/y.tab.c" break; case 377: /* block_param: f_arg ',' f_rest_arg ',' f_arg opt_block_args_tail */ @@ -9087,7 +9149,7 @@ yyreduce: { (yyval.nd) = new_args(p, (yyvsp[-5].nd), 0, (yyvsp[-3].id), (yyvsp[-1].nd), (yyvsp[0].nd)); } -#line 9091 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9153 "mrbgems/mruby-compiler/core/y.tab.c" break; case 378: /* block_param: f_arg opt_block_args_tail */ @@ -9095,7 +9157,7 @@ yyreduce: { (yyval.nd) = new_args(p, (yyvsp[-1].nd), 0, 0, 0, (yyvsp[0].nd)); } -#line 9099 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9161 "mrbgems/mruby-compiler/core/y.tab.c" break; case 379: /* block_param: f_block_optarg ',' f_rest_arg opt_block_args_tail */ @@ -9103,7 +9165,7 @@ yyreduce: { (yyval.nd) = new_args(p, 0, (yyvsp[-3].nd), (yyvsp[-1].id), 0, (yyvsp[0].nd)); } -#line 9107 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9169 "mrbgems/mruby-compiler/core/y.tab.c" break; case 380: /* block_param: f_block_optarg ',' f_rest_arg ',' f_arg opt_block_args_tail */ @@ -9111,7 +9173,7 @@ yyreduce: { (yyval.nd) = new_args(p, 0, (yyvsp[-5].nd), (yyvsp[-3].id), (yyvsp[-1].nd), (yyvsp[0].nd)); } -#line 9115 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9177 "mrbgems/mruby-compiler/core/y.tab.c" break; case 381: /* block_param: f_block_optarg opt_block_args_tail */ @@ -9119,7 +9181,7 @@ yyreduce: { (yyval.nd) = new_args(p, 0, (yyvsp[-1].nd), 0, 0, (yyvsp[0].nd)); } -#line 9123 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9185 "mrbgems/mruby-compiler/core/y.tab.c" break; case 382: /* block_param: f_block_optarg ',' f_arg opt_block_args_tail */ @@ -9127,7 +9189,7 @@ yyreduce: { (yyval.nd) = new_args(p, 0, (yyvsp[-3].nd), 0, (yyvsp[-1].nd), (yyvsp[0].nd)); } -#line 9131 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9193 "mrbgems/mruby-compiler/core/y.tab.c" break; case 383: /* block_param: f_rest_arg opt_block_args_tail */ @@ -9135,7 +9197,7 @@ yyreduce: { (yyval.nd) = new_args(p, 0, 0, (yyvsp[-1].id), 0, (yyvsp[0].nd)); } -#line 9139 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9201 "mrbgems/mruby-compiler/core/y.tab.c" break; case 384: /* block_param: f_rest_arg ',' f_arg opt_block_args_tail */ @@ -9143,7 +9205,7 @@ yyreduce: { (yyval.nd) = new_args(p, 0, 0, (yyvsp[-3].id), (yyvsp[-1].nd), (yyvsp[0].nd)); } -#line 9147 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9209 "mrbgems/mruby-compiler/core/y.tab.c" break; case 385: /* block_param: block_args_tail */ @@ -9151,7 +9213,7 @@ yyreduce: { (yyval.nd) = new_args(p, 0, 0, 0, 0, (yyvsp[0].nd)); } -#line 9155 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9217 "mrbgems/mruby-compiler/core/y.tab.c" break; case 386: /* opt_block_param: none */ @@ -9160,7 +9222,7 @@ yyreduce: local_add_blk(p, 0); (yyval.nd) = 0; } -#line 9164 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9226 "mrbgems/mruby-compiler/core/y.tab.c" break; case 387: /* opt_block_param: block_param_def */ @@ -9169,13 +9231,13 @@ yyreduce: p->cmd_start = TRUE; (yyval.nd) = (yyvsp[0].nd); } -#line 9173 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9235 "mrbgems/mruby-compiler/core/y.tab.c" break; case 388: /* $@25: %empty */ #line 3116 "mrbgems/mruby-compiler/core/parse.y" {local_add_blk(p, 0);} -#line 9179 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9241 "mrbgems/mruby-compiler/core/y.tab.c" break; case 389: /* block_param_def: '|' $@25 opt_bv_decl '|' */ @@ -9183,7 +9245,7 @@ yyreduce: { (yyval.nd) = 0; } -#line 9187 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9249 "mrbgems/mruby-compiler/core/y.tab.c" break; case 390: /* block_param_def: "||" */ @@ -9192,7 +9254,7 @@ yyreduce: local_add_blk(p, 0); (yyval.nd) = 0; } -#line 9196 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9258 "mrbgems/mruby-compiler/core/y.tab.c" break; case 391: /* block_param_def: '|' block_param opt_bv_decl '|' */ @@ -9200,7 +9262,7 @@ yyreduce: { (yyval.nd) = (yyvsp[-2].nd); } -#line 9204 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9266 "mrbgems/mruby-compiler/core/y.tab.c" break; case 392: /* opt_bv_decl: opt_nl */ @@ -9208,7 +9270,7 @@ yyreduce: { (yyval.nd) = 0; } -#line 9212 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9274 "mrbgems/mruby-compiler/core/y.tab.c" break; case 393: /* opt_bv_decl: opt_nl ';' bv_decls opt_nl */ @@ -9216,7 +9278,7 @@ yyreduce: { (yyval.nd) = 0; } -#line 9220 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9282 "mrbgems/mruby-compiler/core/y.tab.c" break; case 396: /* bvar: "local variable or method" */ @@ -9225,7 +9287,7 @@ yyreduce: local_add_f(p, (yyvsp[0].id)); new_bv(p, (yyvsp[0].id)); } -#line 9229 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9291 "mrbgems/mruby-compiler/core/y.tab.c" break; case 398: /* f_larglist: '(' f_args opt_bv_decl ')' */ @@ -9233,7 +9295,7 @@ yyreduce: { (yyval.nd) = (yyvsp[-2].nd); } -#line 9237 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9299 "mrbgems/mruby-compiler/core/y.tab.c" break; case 399: /* f_larglist: f_args */ @@ -9241,7 +9303,7 @@ yyreduce: { (yyval.nd) = (yyvsp[0].nd); } -#line 9245 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9307 "mrbgems/mruby-compiler/core/y.tab.c" break; case 400: /* lambda_body: tLAMBEG compstmt '}' */ @@ -9249,7 +9311,7 @@ yyreduce: { (yyval.nd) = (yyvsp[-1].nd); } -#line 9253 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9315 "mrbgems/mruby-compiler/core/y.tab.c" break; case 401: /* lambda_body: "'do' for lambda" bodystmt "'end'" */ @@ -9257,7 +9319,7 @@ yyreduce: { (yyval.nd) = (yyvsp[-1].nd); } -#line 9261 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9323 "mrbgems/mruby-compiler/core/y.tab.c" break; case 402: /* @26: %empty */ @@ -9267,7 +9329,7 @@ yyreduce: nvars_nest(p); (yyval.num) = p->lineno; } -#line 9271 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9333 "mrbgems/mruby-compiler/core/y.tab.c" break; case 403: /* do_block: "'do' for block" @26 opt_block_param bodystmt "'end'" */ @@ -9278,7 +9340,7 @@ yyreduce: local_unnest(p); nvars_unnest(p); } -#line 9282 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9344 "mrbgems/mruby-compiler/core/y.tab.c" break; case 404: /* block_call: command do_block */ @@ -9292,7 +9354,7 @@ yyreduce: } (yyval.nd) = (yyvsp[-1].nd); } -#line 9296 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9358 "mrbgems/mruby-compiler/core/y.tab.c" break; case 405: /* block_call: block_call call_op2 operation2 opt_paren_args */ @@ -9300,7 +9362,7 @@ yyreduce: { (yyval.nd) = new_call(p, (yyvsp[-3].nd), (yyvsp[-1].id), (yyvsp[0].nd), (yyvsp[-2].num)); } -#line 9304 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9366 "mrbgems/mruby-compiler/core/y.tab.c" break; case 406: /* block_call: block_call call_op2 operation2 opt_paren_args brace_block */ @@ -9309,7 +9371,7 @@ yyreduce: (yyval.nd) = new_call(p, (yyvsp[-4].nd), (yyvsp[-2].id), (yyvsp[-1].nd), (yyvsp[-3].num)); call_with_block(p, (yyval.nd), (yyvsp[0].nd)); } -#line 9313 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9375 "mrbgems/mruby-compiler/core/y.tab.c" break; case 407: /* block_call: block_call call_op2 operation2 command_args do_block */ @@ -9318,7 +9380,7 @@ yyreduce: (yyval.nd) = new_call(p, (yyvsp[-4].nd), (yyvsp[-2].id), (yyvsp[-1].nd), (yyvsp[-3].num)); call_with_block(p, (yyval.nd), (yyvsp[0].nd)); } -#line 9322 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9384 "mrbgems/mruby-compiler/core/y.tab.c" break; case 408: /* method_call: operation paren_args */ @@ -9326,7 +9388,7 @@ yyreduce: { (yyval.nd) = new_fcall(p, (yyvsp[-1].id), (yyvsp[0].nd)); } -#line 9330 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9392 "mrbgems/mruby-compiler/core/y.tab.c" break; case 409: /* method_call: primary_value call_op operation2 opt_paren_args */ @@ -9334,7 +9396,7 @@ yyreduce: { (yyval.nd) = new_call(p, (yyvsp[-3].nd), (yyvsp[-1].id), (yyvsp[0].nd), (yyvsp[-2].num)); } -#line 9338 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9400 "mrbgems/mruby-compiler/core/y.tab.c" break; case 410: /* method_call: primary_value "::" operation2 paren_args */ @@ -9342,7 +9404,7 @@ yyreduce: { (yyval.nd) = new_call(p, (yyvsp[-3].nd), (yyvsp[-1].id), (yyvsp[0].nd), tCOLON2); } -#line 9346 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9408 "mrbgems/mruby-compiler/core/y.tab.c" break; case 411: /* method_call: primary_value "::" operation3 */ @@ -9350,7 +9412,7 @@ yyreduce: { (yyval.nd) = new_call(p, (yyvsp[-2].nd), (yyvsp[0].id), 0, tCOLON2); } -#line 9354 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9416 "mrbgems/mruby-compiler/core/y.tab.c" break; case 412: /* method_call: primary_value call_op paren_args */ @@ -9358,7 +9420,7 @@ yyreduce: { (yyval.nd) = new_call(p, (yyvsp[-2].nd), MRB_SYM_2(p->mrb, call), (yyvsp[0].nd), (yyvsp[-1].num)); } -#line 9362 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9424 "mrbgems/mruby-compiler/core/y.tab.c" break; case 413: /* method_call: primary_value "::" paren_args */ @@ -9366,7 +9428,7 @@ yyreduce: { (yyval.nd) = new_call(p, (yyvsp[-2].nd), MRB_SYM_2(p->mrb, call), (yyvsp[0].nd), tCOLON2); } -#line 9370 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9432 "mrbgems/mruby-compiler/core/y.tab.c" break; case 414: /* method_call: "'super'" paren_args */ @@ -9374,7 +9436,7 @@ yyreduce: { (yyval.nd) = new_super(p, (yyvsp[0].nd)); } -#line 9378 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9440 "mrbgems/mruby-compiler/core/y.tab.c" break; case 415: /* method_call: "'super'" */ @@ -9382,7 +9444,7 @@ yyreduce: { (yyval.nd) = new_zsuper(p); } -#line 9386 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9448 "mrbgems/mruby-compiler/core/y.tab.c" break; case 416: /* method_call: primary_value '[' opt_call_args ']' */ @@ -9390,7 +9452,7 @@ yyreduce: { (yyval.nd) = new_call(p, (yyvsp[-3].nd), intern_op(aref), (yyvsp[-1].nd), '.'); } -#line 9394 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9456 "mrbgems/mruby-compiler/core/y.tab.c" break; case 417: /* @27: %empty */ @@ -9400,7 +9462,7 @@ yyreduce: nvars_nest(p); (yyval.num) = p->lineno; } -#line 9404 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9466 "mrbgems/mruby-compiler/core/y.tab.c" break; case 418: /* brace_block: '{' @27 opt_block_param compstmt '}' */ @@ -9411,7 +9473,7 @@ yyreduce: local_unnest(p); nvars_unnest(p); } -#line 9415 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9477 "mrbgems/mruby-compiler/core/y.tab.c" break; case 419: /* @28: %empty */ @@ -9421,7 +9483,7 @@ yyreduce: nvars_nest(p); (yyval.num) = p->lineno; } -#line 9425 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9487 "mrbgems/mruby-compiler/core/y.tab.c" break; case 420: /* brace_block: "'do'" @28 opt_block_param bodystmt "'end'" */ @@ -9432,7 +9494,7 @@ yyreduce: local_unnest(p); nvars_unnest(p); } -#line 9436 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9498 "mrbgems/mruby-compiler/core/y.tab.c" break; case 421: /* case_body: "'when'" args then compstmt cases */ @@ -9440,7 +9502,7 @@ yyreduce: { (yyval.nd) = cons(cons((yyvsp[-3].nd), (yyvsp[-1].nd)), (yyvsp[0].nd)); } -#line 9444 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9506 "mrbgems/mruby-compiler/core/y.tab.c" break; case 422: /* cases: opt_else */ @@ -9453,7 +9515,7 @@ yyreduce: (yyval.nd) = 0; } } -#line 9457 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9519 "mrbgems/mruby-compiler/core/y.tab.c" break; case 424: /* opt_rescue: "'rescue'" exc_list exc_var then compstmt opt_rescue */ @@ -9462,7 +9524,7 @@ yyreduce: (yyval.nd) = list1(list3((yyvsp[-4].nd), (yyvsp[-3].nd), (yyvsp[-1].nd))); if ((yyvsp[0].nd)) (yyval.nd) = append((yyval.nd), (yyvsp[0].nd)); } -#line 9466 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9528 "mrbgems/mruby-compiler/core/y.tab.c" break; case 426: /* exc_list: arg */ @@ -9470,7 +9532,7 @@ yyreduce: { (yyval.nd) = list1((yyvsp[0].nd)); } -#line 9474 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9536 "mrbgems/mruby-compiler/core/y.tab.c" break; case 429: /* exc_var: "=>" lhs */ @@ -9478,7 +9540,7 @@ yyreduce: { (yyval.nd) = (yyvsp[0].nd); } -#line 9482 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9544 "mrbgems/mruby-compiler/core/y.tab.c" break; case 431: /* opt_ensure: "'ensure'" compstmt */ @@ -9486,7 +9548,7 @@ yyreduce: { (yyval.nd) = (yyvsp[0].nd); } -#line 9490 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9552 "mrbgems/mruby-compiler/core/y.tab.c" break; case 438: /* string: string string_fragment */ @@ -9494,7 +9556,7 @@ yyreduce: { (yyval.nd) = concat_string(p, (yyvsp[-1].nd), (yyvsp[0].nd)); } -#line 9498 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9560 "mrbgems/mruby-compiler/core/y.tab.c" break; case 441: /* string_fragment: "string literal" tSTRING */ @@ -9502,7 +9564,7 @@ yyreduce: { (yyval.nd) = (yyvsp[0].nd); } -#line 9506 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9568 "mrbgems/mruby-compiler/core/y.tab.c" break; case 442: /* string_fragment: "string literal" string_rep tSTRING */ @@ -9517,7 +9579,7 @@ yyreduce: } (yyval.nd) = new_dstr(p, n); } -#line 9521 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9583 "mrbgems/mruby-compiler/core/y.tab.c" break; case 444: /* string_rep: string_rep string_interp */ @@ -9525,7 +9587,7 @@ yyreduce: { (yyval.nd) = append((yyvsp[-1].nd), (yyvsp[0].nd)); } -#line 9529 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9591 "mrbgems/mruby-compiler/core/y.tab.c" break; case 445: /* string_interp: tSTRING_MID */ @@ -9533,7 +9595,7 @@ yyreduce: { (yyval.nd) = list1((yyvsp[0].nd)); } -#line 9537 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9599 "mrbgems/mruby-compiler/core/y.tab.c" break; case 446: /* @29: %empty */ @@ -9541,7 +9603,7 @@ yyreduce: { (yyval.nd) = push_strterm(p); } -#line 9545 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9607 "mrbgems/mruby-compiler/core/y.tab.c" break; case 447: /* string_interp: tSTRING_PART @29 compstmt '}' */ @@ -9550,7 +9612,7 @@ yyreduce: pop_strterm(p,(yyvsp[-2].nd)); (yyval.nd) = list2((yyvsp[-3].nd), (yyvsp[-1].nd)); } -#line 9554 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9616 "mrbgems/mruby-compiler/core/y.tab.c" break; case 448: /* string_interp: tLITERAL_DELIM */ @@ -9558,7 +9620,7 @@ yyreduce: { (yyval.nd) = list1(new_literal_delim(p)); } -#line 9562 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9624 "mrbgems/mruby-compiler/core/y.tab.c" break; case 449: /* string_interp: tHD_LITERAL_DELIM heredoc_bodies */ @@ -9566,7 +9628,7 @@ yyreduce: { (yyval.nd) = list1(new_literal_delim(p)); } -#line 9570 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9632 "mrbgems/mruby-compiler/core/y.tab.c" break; case 450: /* xstring: tXSTRING_BEG tXSTRING */ @@ -9574,7 +9636,7 @@ yyreduce: { (yyval.nd) = (yyvsp[0].nd); } -#line 9578 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9640 "mrbgems/mruby-compiler/core/y.tab.c" break; case 451: /* xstring: tXSTRING_BEG string_rep tXSTRING */ @@ -9589,7 +9651,7 @@ yyreduce: } (yyval.nd) = new_dxstr(p, n); } -#line 9593 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9655 "mrbgems/mruby-compiler/core/y.tab.c" break; case 452: /* regexp: tREGEXP_BEG tREGEXP */ @@ -9597,7 +9659,7 @@ yyreduce: { (yyval.nd) = (yyvsp[0].nd); } -#line 9601 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9663 "mrbgems/mruby-compiler/core/y.tab.c" break; case 453: /* regexp: tREGEXP_BEG string_rep tREGEXP */ @@ -9605,7 +9667,7 @@ yyreduce: { (yyval.nd) = new_dregx(p, (yyvsp[-1].nd), (yyvsp[0].nd)); } -#line 9609 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9671 "mrbgems/mruby-compiler/core/y.tab.c" break; case 457: /* heredoc_body: tHEREDOC_END */ @@ -9615,7 +9677,7 @@ yyreduce: info->doc = push(info->doc, new_str(p, "", 0)); heredoc_end(p); } -#line 9619 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9681 "mrbgems/mruby-compiler/core/y.tab.c" break; case 458: /* heredoc_body: heredoc_string_rep tHEREDOC_END */ @@ -9623,7 +9685,7 @@ yyreduce: { heredoc_end(p); } -#line 9627 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9689 "mrbgems/mruby-compiler/core/y.tab.c" break; case 461: /* heredoc_string_interp: tHD_STRING_MID */ @@ -9633,7 +9695,7 @@ yyreduce: info->doc = push(info->doc, (yyvsp[0].nd)); heredoc_treat_nextline(p); } -#line 9637 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9699 "mrbgems/mruby-compiler/core/y.tab.c" break; case 462: /* @30: %empty */ @@ -9641,7 +9703,7 @@ yyreduce: { (yyval.nd) = push_strterm(p); } -#line 9645 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9707 "mrbgems/mruby-compiler/core/y.tab.c" break; case 463: /* heredoc_string_interp: tHD_STRING_PART @30 compstmt '}' */ @@ -9651,7 +9713,7 @@ yyreduce: parser_heredoc_info *info = parsing_heredoc_info(p); info->doc = push(push(info->doc, (yyvsp[-3].nd)), (yyvsp[-1].nd)); } -#line 9655 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9717 "mrbgems/mruby-compiler/core/y.tab.c" break; case 464: /* words: tWORDS_BEG tSTRING */ @@ -9659,7 +9721,7 @@ yyreduce: { (yyval.nd) = new_words(p, list1((yyvsp[0].nd))); } -#line 9663 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9725 "mrbgems/mruby-compiler/core/y.tab.c" break; case 465: /* words: tWORDS_BEG string_rep tSTRING */ @@ -9674,7 +9736,7 @@ yyreduce: } (yyval.nd) = new_words(p, n); } -#line 9678 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9740 "mrbgems/mruby-compiler/core/y.tab.c" break; case 466: /* symbol: basic_symbol */ @@ -9683,7 +9745,7 @@ yyreduce: p->lstate = EXPR_ENDARG; (yyval.nd) = new_sym(p, (yyvsp[0].id)); } -#line 9687 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9749 "mrbgems/mruby-compiler/core/y.tab.c" break; case 467: /* symbol: "symbol" "string literal" string_rep tSTRING */ @@ -9699,7 +9761,7 @@ yyreduce: } (yyval.nd) = new_dsym(p, new_dstr(p, n)); } -#line 9703 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9765 "mrbgems/mruby-compiler/core/y.tab.c" break; case 468: /* basic_symbol: "symbol" sym */ @@ -9707,7 +9769,7 @@ yyreduce: { (yyval.id) = (yyvsp[0].id); } -#line 9711 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9773 "mrbgems/mruby-compiler/core/y.tab.c" break; case 473: /* sym: tSTRING */ @@ -9715,7 +9777,7 @@ yyreduce: { (yyval.id) = new_strsym(p, (yyvsp[0].nd)); } -#line 9719 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9781 "mrbgems/mruby-compiler/core/y.tab.c" break; case 474: /* sym: "string literal" tSTRING */ @@ -9723,7 +9785,7 @@ yyreduce: { (yyval.id) = new_strsym(p, (yyvsp[0].nd)); } -#line 9727 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9789 "mrbgems/mruby-compiler/core/y.tab.c" break; case 475: /* symbols: tSYMBOLS_BEG tSTRING */ @@ -9731,7 +9793,7 @@ yyreduce: { (yyval.nd) = new_symbols(p, list1((yyvsp[0].nd))); } -#line 9735 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9797 "mrbgems/mruby-compiler/core/y.tab.c" break; case 476: /* symbols: tSYMBOLS_BEG string_rep tSTRING */ @@ -9743,7 +9805,7 @@ yyreduce: } (yyval.nd) = new_symbols(p, n); } -#line 9747 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9809 "mrbgems/mruby-compiler/core/y.tab.c" break; case 479: /* numeric: tUMINUS_NUM "integer literal" */ @@ -9751,7 +9813,7 @@ yyreduce: { (yyval.nd) = new_negate(p, (yyvsp[0].nd)); } -#line 9755 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9817 "mrbgems/mruby-compiler/core/y.tab.c" break; case 480: /* numeric: tUMINUS_NUM "float literal" */ @@ -9759,7 +9821,7 @@ yyreduce: { (yyval.nd) = new_negate(p, (yyvsp[0].nd)); } -#line 9763 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9825 "mrbgems/mruby-compiler/core/y.tab.c" break; case 481: /* variable: "local variable or method" */ @@ -9767,7 +9829,7 @@ yyreduce: { (yyval.nd) = new_lvar(p, (yyvsp[0].id)); } -#line 9771 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9833 "mrbgems/mruby-compiler/core/y.tab.c" break; case 482: /* variable: "instance variable" */ @@ -9775,7 +9837,7 @@ yyreduce: { (yyval.nd) = new_ivar(p, (yyvsp[0].id)); } -#line 9779 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9841 "mrbgems/mruby-compiler/core/y.tab.c" break; case 483: /* variable: "global variable" */ @@ -9783,7 +9845,7 @@ yyreduce: { (yyval.nd) = new_gvar(p, (yyvsp[0].id)); } -#line 9787 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9849 "mrbgems/mruby-compiler/core/y.tab.c" break; case 484: /* variable: "class variable" */ @@ -9791,7 +9853,7 @@ yyreduce: { (yyval.nd) = new_cvar(p, (yyvsp[0].id)); } -#line 9795 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9857 "mrbgems/mruby-compiler/core/y.tab.c" break; case 485: /* variable: "constant" */ @@ -9799,7 +9861,7 @@ yyreduce: { (yyval.nd) = new_const(p, (yyvsp[0].id)); } -#line 9803 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9865 "mrbgems/mruby-compiler/core/y.tab.c" break; case 486: /* var_lhs: variable */ @@ -9807,7 +9869,7 @@ yyreduce: { assignable(p, (yyvsp[0].nd)); } -#line 9811 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9873 "mrbgems/mruby-compiler/core/y.tab.c" break; case 487: /* var_lhs: "numbered parameter" */ @@ -9815,7 +9877,7 @@ yyreduce: { yyerror(&(yylsp[0]), p, "can't assign to numbered parameter"); } -#line 9819 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9881 "mrbgems/mruby-compiler/core/y.tab.c" break; case 488: /* var_ref: variable */ @@ -9823,7 +9885,7 @@ yyreduce: { (yyval.nd) = var_reference(p, (yyvsp[0].nd)); } -#line 9827 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9889 "mrbgems/mruby-compiler/core/y.tab.c" break; case 489: /* var_ref: "'nil'" */ @@ -9831,7 +9893,7 @@ yyreduce: { (yyval.nd) = new_nil(p); } -#line 9835 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9897 "mrbgems/mruby-compiler/core/y.tab.c" break; case 490: /* var_ref: "'self'" */ @@ -9839,7 +9901,7 @@ yyreduce: { (yyval.nd) = new_self(p); } -#line 9843 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9905 "mrbgems/mruby-compiler/core/y.tab.c" break; case 491: /* var_ref: "'true'" */ @@ -9847,7 +9909,7 @@ yyreduce: { (yyval.nd) = new_true(p); } -#line 9851 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9913 "mrbgems/mruby-compiler/core/y.tab.c" break; case 492: /* var_ref: "'false'" */ @@ -9855,7 +9917,7 @@ yyreduce: { (yyval.nd) = new_false(p); } -#line 9859 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9921 "mrbgems/mruby-compiler/core/y.tab.c" break; case 493: /* var_ref: "'__FILE__'" */ @@ -9867,7 +9929,7 @@ yyreduce: } (yyval.nd) = new_str(p, fn, strlen(fn)); } -#line 9871 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9933 "mrbgems/mruby-compiler/core/y.tab.c" break; case 494: /* var_ref: "'__LINE__'" */ @@ -9878,7 +9940,7 @@ yyreduce: dump_int(p->lineno, buf); (yyval.nd) = new_int(p, buf, 10, 0); } -#line 9882 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9944 "mrbgems/mruby-compiler/core/y.tab.c" break; case 495: /* var_ref: "'__ENCODING__'" */ @@ -9886,7 +9948,7 @@ yyreduce: { (yyval.nd) = new_fcall(p, MRB_SYM_2(p->mrb, __ENCODING__), 0); } -#line 9890 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9952 "mrbgems/mruby-compiler/core/y.tab.c" break; case 498: /* superclass: %empty */ @@ -9894,7 +9956,7 @@ yyreduce: { (yyval.nd) = 0; } -#line 9898 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9960 "mrbgems/mruby-compiler/core/y.tab.c" break; case 499: /* $@31: %empty */ @@ -9903,7 +9965,7 @@ yyreduce: p->lstate = EXPR_BEG; p->cmd_start = TRUE; } -#line 9907 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9969 "mrbgems/mruby-compiler/core/y.tab.c" break; case 500: /* superclass: '<' $@31 expr_value term */ @@ -9911,7 +9973,7 @@ yyreduce: { (yyval.nd) = (yyvsp[-1].nd); } -#line 9915 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9977 "mrbgems/mruby-compiler/core/y.tab.c" break; case 503: /* f_arglist_paren: '(' f_args rparen */ @@ -9921,7 +9983,7 @@ yyreduce: p->lstate = EXPR_BEG; p->cmd_start = TRUE; } -#line 9925 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9987 "mrbgems/mruby-compiler/core/y.tab.c" break; case 504: /* f_arglist_paren: '(' f_arg ',' tBDOT3 rparen */ @@ -9929,7 +9991,7 @@ yyreduce: { (yyval.nd) = new_args_dots(p, (yyvsp[-3].nd)); } -#line 9933 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9995 "mrbgems/mruby-compiler/core/y.tab.c" break; case 505: /* f_arglist_paren: '(' tBDOT3 rparen */ @@ -9937,7 +9999,7 @@ yyreduce: { (yyval.nd) = new_args_dots(p, 0); } -#line 9941 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10003 "mrbgems/mruby-compiler/core/y.tab.c" break; case 507: /* f_arglist: f_args term */ @@ -9945,7 +10007,7 @@ yyreduce: { (yyval.nd) = (yyvsp[-1].nd); } -#line 9949 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10011 "mrbgems/mruby-compiler/core/y.tab.c" break; case 508: /* f_arglist: f_arg ',' tBDOT3 term */ @@ -9953,7 +10015,7 @@ yyreduce: { (yyval.nd) = new_args_dots(p, (yyvsp[-3].nd)); } -#line 9957 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10019 "mrbgems/mruby-compiler/core/y.tab.c" break; case 509: /* f_arglist: "..." term */ @@ -9961,7 +10023,7 @@ yyreduce: { (yyval.nd) = new_args_dots(p, 0); } -#line 9965 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10027 "mrbgems/mruby-compiler/core/y.tab.c" break; case 510: /* f_label: "local variable or method" "label" */ @@ -9969,7 +10031,7 @@ yyreduce: { local_nest(p); } -#line 9973 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10035 "mrbgems/mruby-compiler/core/y.tab.c" break; case 511: /* f_label: "numbered parameter" "label" */ @@ -9977,7 +10039,7 @@ yyreduce: { local_nest(p); } -#line 9981 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10043 "mrbgems/mruby-compiler/core/y.tab.c" break; case 512: /* f_kw: f_label arg */ @@ -9987,7 +10049,7 @@ yyreduce: (yyval.nd) = new_kw_arg(p, (yyvsp[-1].id), cons((yyvsp[0].nd), locals_node(p))); local_unnest(p); } -#line 9991 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10053 "mrbgems/mruby-compiler/core/y.tab.c" break; case 513: /* f_kw: f_label */ @@ -9996,7 +10058,7 @@ yyreduce: (yyval.nd) = new_kw_arg(p, (yyvsp[0].id), 0); local_unnest(p); } -#line 10000 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10062 "mrbgems/mruby-compiler/core/y.tab.c" break; case 514: /* f_block_kw: f_label primary_value */ @@ -10006,7 +10068,7 @@ yyreduce: (yyval.nd) = new_kw_arg(p, (yyvsp[-1].id), cons((yyvsp[0].nd), locals_node(p))); local_unnest(p); } -#line 10010 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10072 "mrbgems/mruby-compiler/core/y.tab.c" break; case 515: /* f_block_kw: f_label */ @@ -10015,7 +10077,7 @@ yyreduce: (yyval.nd) = new_kw_arg(p, (yyvsp[0].id), 0); local_unnest(p); } -#line 10019 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10081 "mrbgems/mruby-compiler/core/y.tab.c" break; case 516: /* f_block_kwarg: f_block_kw */ @@ -10023,7 +10085,7 @@ yyreduce: { (yyval.nd) = list1((yyvsp[0].nd)); } -#line 10027 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10089 "mrbgems/mruby-compiler/core/y.tab.c" break; case 517: /* f_block_kwarg: f_block_kwarg ',' f_block_kw */ @@ -10031,7 +10093,7 @@ yyreduce: { (yyval.nd) = push((yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 10035 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10097 "mrbgems/mruby-compiler/core/y.tab.c" break; case 518: /* f_kwarg: f_kw */ @@ -10039,7 +10101,7 @@ yyreduce: { (yyval.nd) = list1((yyvsp[0].nd)); } -#line 10043 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10105 "mrbgems/mruby-compiler/core/y.tab.c" break; case 519: /* f_kwarg: f_kwarg ',' f_kw */ @@ -10047,7 +10109,7 @@ yyreduce: { (yyval.nd) = push((yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 10051 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10113 "mrbgems/mruby-compiler/core/y.tab.c" break; case 522: /* f_kwrest: kwrest_mark "local variable or method" */ @@ -10055,7 +10117,7 @@ yyreduce: { (yyval.nd) = new_kw_rest_args(p, (yyvsp[0].id)); } -#line 10059 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10121 "mrbgems/mruby-compiler/core/y.tab.c" break; case 523: /* f_kwrest: kwrest_mark */ @@ -10063,7 +10125,7 @@ yyreduce: { (yyval.nd) = new_kw_rest_args(p, 0); } -#line 10067 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10129 "mrbgems/mruby-compiler/core/y.tab.c" break; case 524: /* args_tail: f_kwarg ',' f_kwrest opt_f_block_arg */ @@ -10071,7 +10133,7 @@ yyreduce: { (yyval.nd) = new_args_tail(p, (yyvsp[-3].nd), (yyvsp[-1].nd), (yyvsp[0].id)); } -#line 10075 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10137 "mrbgems/mruby-compiler/core/y.tab.c" break; case 525: /* args_tail: f_kwarg opt_f_block_arg */ @@ -10079,7 +10141,7 @@ yyreduce: { (yyval.nd) = new_args_tail(p, (yyvsp[-1].nd), 0, (yyvsp[0].id)); } -#line 10083 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10145 "mrbgems/mruby-compiler/core/y.tab.c" break; case 526: /* args_tail: f_kwrest opt_f_block_arg */ @@ -10087,7 +10149,7 @@ yyreduce: { (yyval.nd) = new_args_tail(p, 0, (yyvsp[-1].nd), (yyvsp[0].id)); } -#line 10091 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10153 "mrbgems/mruby-compiler/core/y.tab.c" break; case 527: /* args_tail: f_block_arg */ @@ -10095,7 +10157,7 @@ yyreduce: { (yyval.nd) = new_args_tail(p, 0, 0, (yyvsp[0].id)); } -#line 10099 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10161 "mrbgems/mruby-compiler/core/y.tab.c" break; case 528: /* opt_args_tail: ',' args_tail */ @@ -10103,7 +10165,7 @@ yyreduce: { (yyval.nd) = (yyvsp[0].nd); } -#line 10107 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10169 "mrbgems/mruby-compiler/core/y.tab.c" break; case 529: /* opt_args_tail: %empty */ @@ -10111,7 +10173,7 @@ yyreduce: { (yyval.nd) = new_args_tail(p, 0, 0, 0); } -#line 10115 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10177 "mrbgems/mruby-compiler/core/y.tab.c" break; case 530: /* f_args: f_arg ',' f_optarg ',' f_rest_arg opt_args_tail */ @@ -10119,7 +10181,7 @@ yyreduce: { (yyval.nd) = new_args(p, (yyvsp[-5].nd), (yyvsp[-3].nd), (yyvsp[-1].id), 0, (yyvsp[0].nd)); } -#line 10123 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10185 "mrbgems/mruby-compiler/core/y.tab.c" break; case 531: /* f_args: f_arg ',' f_optarg ',' f_rest_arg ',' f_arg opt_args_tail */ @@ -10127,7 +10189,7 @@ yyreduce: { (yyval.nd) = new_args(p, (yyvsp[-7].nd), (yyvsp[-5].nd), (yyvsp[-3].id), (yyvsp[-1].nd), (yyvsp[0].nd)); } -#line 10131 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10193 "mrbgems/mruby-compiler/core/y.tab.c" break; case 532: /* f_args: f_arg ',' f_optarg opt_args_tail */ @@ -10135,7 +10197,7 @@ yyreduce: { (yyval.nd) = new_args(p, (yyvsp[-3].nd), (yyvsp[-1].nd), 0, 0, (yyvsp[0].nd)); } -#line 10139 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10201 "mrbgems/mruby-compiler/core/y.tab.c" break; case 533: /* f_args: f_arg ',' f_optarg ',' f_arg opt_args_tail */ @@ -10143,7 +10205,7 @@ yyreduce: { (yyval.nd) = new_args(p, (yyvsp[-5].nd), (yyvsp[-3].nd), 0, (yyvsp[-1].nd), (yyvsp[0].nd)); } -#line 10147 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10209 "mrbgems/mruby-compiler/core/y.tab.c" break; case 534: /* f_args: f_arg ',' f_rest_arg opt_args_tail */ @@ -10151,7 +10213,7 @@ yyreduce: { (yyval.nd) = new_args(p, (yyvsp[-3].nd), 0, (yyvsp[-1].id), 0, (yyvsp[0].nd)); } -#line 10155 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10217 "mrbgems/mruby-compiler/core/y.tab.c" break; case 535: /* f_args: f_arg ',' f_rest_arg ',' f_arg opt_args_tail */ @@ -10159,7 +10221,7 @@ yyreduce: { (yyval.nd) = new_args(p, (yyvsp[-5].nd), 0, (yyvsp[-3].id), (yyvsp[-1].nd), (yyvsp[0].nd)); } -#line 10163 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10225 "mrbgems/mruby-compiler/core/y.tab.c" break; case 536: /* f_args: f_arg opt_args_tail */ @@ -10167,7 +10229,7 @@ yyreduce: { (yyval.nd) = new_args(p, (yyvsp[-1].nd), 0, 0, 0, (yyvsp[0].nd)); } -#line 10171 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10233 "mrbgems/mruby-compiler/core/y.tab.c" break; case 537: /* f_args: f_optarg ',' f_rest_arg opt_args_tail */ @@ -10175,7 +10237,7 @@ yyreduce: { (yyval.nd) = new_args(p, 0, (yyvsp[-3].nd), (yyvsp[-1].id), 0, (yyvsp[0].nd)); } -#line 10179 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10241 "mrbgems/mruby-compiler/core/y.tab.c" break; case 538: /* f_args: f_optarg ',' f_rest_arg ',' f_arg opt_args_tail */ @@ -10183,7 +10245,7 @@ yyreduce: { (yyval.nd) = new_args(p, 0, (yyvsp[-5].nd), (yyvsp[-3].id), (yyvsp[-1].nd), (yyvsp[0].nd)); } -#line 10187 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10249 "mrbgems/mruby-compiler/core/y.tab.c" break; case 539: /* f_args: f_optarg opt_args_tail */ @@ -10191,7 +10253,7 @@ yyreduce: { (yyval.nd) = new_args(p, 0, (yyvsp[-1].nd), 0, 0, (yyvsp[0].nd)); } -#line 10195 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10257 "mrbgems/mruby-compiler/core/y.tab.c" break; case 540: /* f_args: f_optarg ',' f_arg opt_args_tail */ @@ -10199,7 +10261,7 @@ yyreduce: { (yyval.nd) = new_args(p, 0, (yyvsp[-3].nd), 0, (yyvsp[-1].nd), (yyvsp[0].nd)); } -#line 10203 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10265 "mrbgems/mruby-compiler/core/y.tab.c" break; case 541: /* f_args: f_rest_arg opt_args_tail */ @@ -10207,7 +10269,7 @@ yyreduce: { (yyval.nd) = new_args(p, 0, 0, (yyvsp[-1].id), 0, (yyvsp[0].nd)); } -#line 10211 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10273 "mrbgems/mruby-compiler/core/y.tab.c" break; case 542: /* f_args: f_rest_arg ',' f_arg opt_args_tail */ @@ -10215,7 +10277,7 @@ yyreduce: { (yyval.nd) = new_args(p, 0, 0, (yyvsp[-3].id), (yyvsp[-1].nd), (yyvsp[0].nd)); } -#line 10219 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10281 "mrbgems/mruby-compiler/core/y.tab.c" break; case 543: /* f_args: args_tail */ @@ -10223,7 +10285,7 @@ yyreduce: { (yyval.nd) = new_args(p, 0, 0, 0, 0, (yyvsp[0].nd)); } -#line 10227 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10289 "mrbgems/mruby-compiler/core/y.tab.c" break; case 544: /* f_args: %empty */ @@ -10232,7 +10294,7 @@ yyreduce: local_add_f(p, 0); (yyval.nd) = new_args(p, 0, 0, 0, 0, 0); } -#line 10236 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10298 "mrbgems/mruby-compiler/core/y.tab.c" break; case 545: /* f_bad_arg: "constant" */ @@ -10241,7 +10303,7 @@ yyreduce: yyerror(&(yylsp[0]), p, "formal argument cannot be a constant"); (yyval.nd) = 0; } -#line 10245 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10307 "mrbgems/mruby-compiler/core/y.tab.c" break; case 546: /* f_bad_arg: "instance variable" */ @@ -10250,7 +10312,7 @@ yyreduce: yyerror(&(yylsp[0]), p, "formal argument cannot be an instance variable"); (yyval.nd) = 0; } -#line 10254 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10316 "mrbgems/mruby-compiler/core/y.tab.c" break; case 547: /* f_bad_arg: "global variable" */ @@ -10259,7 +10321,7 @@ yyreduce: yyerror(&(yylsp[0]), p, "formal argument cannot be a global variable"); (yyval.nd) = 0; } -#line 10263 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10325 "mrbgems/mruby-compiler/core/y.tab.c" break; case 548: /* f_bad_arg: "class variable" */ @@ -10268,7 +10330,7 @@ yyreduce: yyerror(&(yylsp[0]), p, "formal argument cannot be a class variable"); (yyval.nd) = 0; } -#line 10272 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10334 "mrbgems/mruby-compiler/core/y.tab.c" break; case 549: /* f_bad_arg: "numbered parameter" */ @@ -10277,7 +10339,7 @@ yyreduce: yyerror(&(yylsp[0]), p, "formal argument cannot be a numbered parameter"); (yyval.nd) = 0; } -#line 10281 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10343 "mrbgems/mruby-compiler/core/y.tab.c" break; case 550: /* f_norm_arg: f_bad_arg */ @@ -10285,7 +10347,7 @@ yyreduce: { (yyval.id) = 0; } -#line 10289 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10351 "mrbgems/mruby-compiler/core/y.tab.c" break; case 551: /* f_norm_arg: "local variable or method" */ @@ -10294,7 +10356,7 @@ yyreduce: local_add_f(p, (yyvsp[0].id)); (yyval.id) = (yyvsp[0].id); } -#line 10298 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10360 "mrbgems/mruby-compiler/core/y.tab.c" break; case 552: /* f_arg_item: f_norm_arg */ @@ -10302,7 +10364,7 @@ yyreduce: { (yyval.nd) = new_arg(p, (yyvsp[0].id)); } -#line 10306 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10368 "mrbgems/mruby-compiler/core/y.tab.c" break; case 553: /* @32: %empty */ @@ -10310,7 +10372,7 @@ yyreduce: { (yyval.nd) = local_switch(p); } -#line 10314 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10376 "mrbgems/mruby-compiler/core/y.tab.c" break; case 554: /* f_arg_item: tLPAREN @32 f_margs rparen */ @@ -10320,7 +10382,7 @@ yyreduce: local_resume(p, (yyvsp[-2].nd)); local_add_f(p, 0); } -#line 10324 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10386 "mrbgems/mruby-compiler/core/y.tab.c" break; case 555: /* f_arg: f_arg_item */ @@ -10328,7 +10390,7 @@ yyreduce: { (yyval.nd) = list1((yyvsp[0].nd)); } -#line 10332 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10394 "mrbgems/mruby-compiler/core/y.tab.c" break; case 556: /* f_arg: f_arg ',' f_arg_item */ @@ -10336,7 +10398,7 @@ yyreduce: { (yyval.nd) = push((yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 10340 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10402 "mrbgems/mruby-compiler/core/y.tab.c" break; case 557: /* f_opt_asgn: "local variable or method" '=' */ @@ -10346,7 +10408,7 @@ yyreduce: local_nest(p); (yyval.id) = (yyvsp[-1].id); } -#line 10350 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10412 "mrbgems/mruby-compiler/core/y.tab.c" break; case 558: /* f_opt: f_opt_asgn arg */ @@ -10356,7 +10418,7 @@ yyreduce: (yyval.nd) = cons(nsym((yyvsp[-1].id)), cons((yyvsp[0].nd), locals_node(p))); local_unnest(p); } -#line 10360 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10422 "mrbgems/mruby-compiler/core/y.tab.c" break; case 559: /* f_block_opt: f_opt_asgn primary_value */ @@ -10366,7 +10428,7 @@ yyreduce: (yyval.nd) = cons(nsym((yyvsp[-1].id)), cons((yyvsp[0].nd), locals_node(p))); local_unnest(p); } -#line 10370 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10432 "mrbgems/mruby-compiler/core/y.tab.c" break; case 560: /* f_block_optarg: f_block_opt */ @@ -10374,7 +10436,7 @@ yyreduce: { (yyval.nd) = list1((yyvsp[0].nd)); } -#line 10378 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10440 "mrbgems/mruby-compiler/core/y.tab.c" break; case 561: /* f_block_optarg: f_block_optarg ',' f_block_opt */ @@ -10382,7 +10444,7 @@ yyreduce: { (yyval.nd) = push((yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 10386 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10448 "mrbgems/mruby-compiler/core/y.tab.c" break; case 562: /* f_optarg: f_opt */ @@ -10390,7 +10452,7 @@ yyreduce: { (yyval.nd) = list1((yyvsp[0].nd)); } -#line 10394 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10456 "mrbgems/mruby-compiler/core/y.tab.c" break; case 563: /* f_optarg: f_optarg ',' f_opt */ @@ -10398,7 +10460,7 @@ yyreduce: { (yyval.nd) = push((yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 10402 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10464 "mrbgems/mruby-compiler/core/y.tab.c" break; case 566: /* f_rest_arg: restarg_mark "local variable or method" */ @@ -10407,7 +10469,7 @@ yyreduce: local_add_f(p, (yyvsp[0].id)); (yyval.id) = (yyvsp[0].id); } -#line 10411 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10473 "mrbgems/mruby-compiler/core/y.tab.c" break; case 567: /* f_rest_arg: restarg_mark */ @@ -10416,7 +10478,7 @@ yyreduce: (yyval.id) = intern_op(mul); local_add_f(p, (yyval.id)); } -#line 10420 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10482 "mrbgems/mruby-compiler/core/y.tab.c" break; case 570: /* f_block_arg: blkarg_mark "local variable or method" */ @@ -10424,7 +10486,7 @@ yyreduce: { (yyval.id) = (yyvsp[0].id); } -#line 10428 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10490 "mrbgems/mruby-compiler/core/y.tab.c" break; case 571: /* f_block_arg: blkarg_mark */ @@ -10432,7 +10494,7 @@ yyreduce: { (yyval.id) = intern_op(and); } -#line 10436 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10498 "mrbgems/mruby-compiler/core/y.tab.c" break; case 572: /* opt_f_block_arg: ',' f_block_arg */ @@ -10440,7 +10502,7 @@ yyreduce: { (yyval.id) = (yyvsp[0].id); } -#line 10444 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10506 "mrbgems/mruby-compiler/core/y.tab.c" break; case 573: /* opt_f_block_arg: none */ @@ -10448,7 +10510,7 @@ yyreduce: { (yyval.id) = 0; } -#line 10452 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10514 "mrbgems/mruby-compiler/core/y.tab.c" break; case 574: /* singleton: var_ref */ @@ -10457,13 +10519,13 @@ yyreduce: (yyval.nd) = (yyvsp[0].nd); if (!(yyval.nd)) (yyval.nd) = new_nil(p); } -#line 10461 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10523 "mrbgems/mruby-compiler/core/y.tab.c" break; case 575: /* $@33: %empty */ #line 3999 "mrbgems/mruby-compiler/core/parse.y" {p->lstate = EXPR_BEG;} -#line 10467 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10529 "mrbgems/mruby-compiler/core/y.tab.c" break; case 576: /* singleton: '(' $@33 expr rparen */ @@ -10490,7 +10552,7 @@ yyreduce: } (yyval.nd) = (yyvsp[-1].nd); } -#line 10494 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10556 "mrbgems/mruby-compiler/core/y.tab.c" break; case 578: /* assoc_list: assocs trailer */ @@ -10498,7 +10560,7 @@ yyreduce: { (yyval.nd) = (yyvsp[-1].nd); } -#line 10502 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10564 "mrbgems/mruby-compiler/core/y.tab.c" break; case 579: /* assocs: assoc */ @@ -10507,7 +10569,7 @@ yyreduce: (yyval.nd) = list1((yyvsp[0].nd)); NODE_LINENO((yyval.nd), (yyvsp[0].nd)); } -#line 10511 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10573 "mrbgems/mruby-compiler/core/y.tab.c" break; case 580: /* assocs: assocs comma assoc */ @@ -10515,7 +10577,7 @@ yyreduce: { (yyval.nd) = push((yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 10519 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10581 "mrbgems/mruby-compiler/core/y.tab.c" break; case 581: /* assoc: arg "=>" arg */ @@ -10525,7 +10587,7 @@ yyreduce: void_expr_error(p, (yyvsp[0].nd)); (yyval.nd) = cons((yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 10529 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10591 "mrbgems/mruby-compiler/core/y.tab.c" break; case 582: /* assoc: "local variable or method" "label" arg */ @@ -10534,7 +10596,7 @@ yyreduce: void_expr_error(p, (yyvsp[0].nd)); (yyval.nd) = cons(new_sym(p, (yyvsp[-2].id)), (yyvsp[0].nd)); } -#line 10538 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10600 "mrbgems/mruby-compiler/core/y.tab.c" break; case 583: /* assoc: "local variable or method" "label" */ @@ -10542,7 +10604,7 @@ yyreduce: { (yyval.nd) = cons(new_sym(p, (yyvsp[-1].id)), label_reference(p, (yyvsp[-1].id))); } -#line 10546 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10608 "mrbgems/mruby-compiler/core/y.tab.c" break; case 584: /* assoc: "numbered parameter" "label" */ @@ -10551,7 +10613,7 @@ yyreduce: mrb_sym sym = intern_numparam((yyvsp[-1].num)); (yyval.nd) = cons(new_sym(p, sym), label_reference(p, sym)); } -#line 10555 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10617 "mrbgems/mruby-compiler/core/y.tab.c" break; case 585: /* assoc: "numbered parameter" "label" arg */ @@ -10560,7 +10622,7 @@ yyreduce: void_expr_error(p, (yyvsp[0].nd)); (yyval.nd) = cons(new_sym(p, intern_numparam((yyvsp[-2].num))), (yyvsp[0].nd)); } -#line 10564 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10626 "mrbgems/mruby-compiler/core/y.tab.c" break; case 586: /* assoc: string_fragment "label" arg */ @@ -10574,7 +10636,7 @@ yyreduce: (yyval.nd) = cons(new_sym(p, new_strsym(p, (yyvsp[-2].nd))), (yyvsp[0].nd)); } } -#line 10578 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10640 "mrbgems/mruby-compiler/core/y.tab.c" break; case 587: /* assoc: "**" arg */ @@ -10583,7 +10645,7 @@ yyreduce: void_expr_error(p, (yyvsp[0].nd)); (yyval.nd) = cons(new_kw_rest_args(p, 0), (yyvsp[0].nd)); } -#line 10587 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10649 "mrbgems/mruby-compiler/core/y.tab.c" break; case 588: /* assoc: "**" */ @@ -10591,7 +10653,7 @@ yyreduce: { (yyval.nd) = cons(new_kw_rest_args(p, 0), new_lvar(p, intern_op(pow))); } -#line 10595 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10657 "mrbgems/mruby-compiler/core/y.tab.c" break; case 601: /* call_op: '.' */ @@ -10599,7 +10661,7 @@ yyreduce: { (yyval.num) = '.'; } -#line 10603 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10665 "mrbgems/mruby-compiler/core/y.tab.c" break; case 602: /* call_op: "&." */ @@ -10607,7 +10669,7 @@ yyreduce: { (yyval.num) = 0; } -#line 10611 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10673 "mrbgems/mruby-compiler/core/y.tab.c" break; case 604: /* call_op2: "::" */ @@ -10615,13 +10677,13 @@ yyreduce: { (yyval.num) = tCOLON2; } -#line 10619 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10681 "mrbgems/mruby-compiler/core/y.tab.c" break; case 613: /* term: ';' */ #line 4141 "mrbgems/mruby-compiler/core/parse.y" {yyerrok;} -#line 10625 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10687 "mrbgems/mruby-compiler/core/y.tab.c" break; case 615: /* nl: '\n' */ @@ -10630,7 +10692,7 @@ yyreduce: p->lineno += (yyvsp[0].num); p->column = 0; } -#line 10634 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10696 "mrbgems/mruby-compiler/core/y.tab.c" break; case 619: /* none: %empty */ @@ -10638,11 +10700,11 @@ yyreduce: { (yyval.nd) = 0; } -#line 10642 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10704 "mrbgems/mruby-compiler/core/y.tab.c" break; -#line 10646 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10708 "mrbgems/mruby-compiler/core/y.tab.c" default: break; } @@ -10657,9 +10719,10 @@ yyreduce: case of YYERROR or YYBACKUP, subsequent parser actions might lead to an incorrect destructor call or verbose syntax error message before the lookahead is translated. */ - YY_SYMBOL_PRINT ("-> $$ =", YY_CAST (yysymbol_kind_t, yyr1[yyn]), &yyval, &yyloc); + YY_SYMBOL_PRINT ("-> $$ =", YY_CAST (yysymbol_kind_t, yyr1[yyn]), &yyval, &yyloc, p); YYPOPSTACK (yylen); + yylen = 0; *++yyvsp = yyval; @@ -10695,7 +10758,7 @@ yyerrlab: = {yyssp, yytoken, &yylloc}; char const *yymsgp = YY_("syntax error"); int yysyntax_error_status; - yysyntax_error_status = yysyntax_error (&yymsg_alloc, &yymsg, &yyctx); + yysyntax_error_status = yysyntax_error (&yymsg_alloc, &yymsg, &yyctx, p); if (yysyntax_error_status == 0) yymsgp = yymsg; else if (yysyntax_error_status == -1) @@ -10707,7 +10770,7 @@ yyerrlab: if (yymsg) { yysyntax_error_status - = yysyntax_error (&yymsg_alloc, &yymsg, &yyctx); + = yysyntax_error (&yymsg_alloc, &yymsg, &yyctx, p); yymsgp = yymsg; } else @@ -10761,8 +10824,9 @@ yyerrorlab: /* Do not reclaim the symbols of the rule whose action triggered this YYERROR. */ YYPOPSTACK (yylen); + yylen = 0; - YY_STACK_PRINT (yyss, yyssp); + YY_STACK_PRINT (yyss, yyssp, p); yystate = *yyssp; goto yyerrlab1; @@ -10796,8 +10860,9 @@ yyerrlab1: yydestruct ("Error: popping", YY_ACCESSING_SYMBOL (yystate), yyvsp, yylsp, p); YYPOPSTACK (1); + yystate = *yyssp; - YY_STACK_PRINT (yyss, yyssp); + YY_STACK_PRINT (yyss, yyssp, p); } YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN @@ -10809,7 +10874,8 @@ yyerrlab1: YYLLOC_DEFAULT (*yylsp, yyerror_range, 2); /* Shift the error token. */ - YY_SYMBOL_PRINT ("Shifting", YY_ACCESSING_SYMBOL (yyn), yyvsp, yylsp); + YY_SYMBOL_PRINT ("Shifting", YY_ACCESSING_SYMBOL (yyn), yyvsp, yylsp, p); + yystate = yyn; goto yynewstate; @@ -10855,7 +10921,7 @@ yyreturnlab: /* Do not reclaim the symbols of the rule whose action triggered this YYABORT or YYACCEPT. */ YYPOPSTACK (yylen); - YY_STACK_PRINT (yyss, yyssp); + YY_STACK_PRINT (yyss, yyssp, p); while (yyssp != yyss) { yydestruct ("Cleanup: popping", diff --git a/tasks/toolchains/visualcpp.rake b/tasks/toolchains/visualcpp.rake index 00e364082..53954e9a5 100644 --- a/tasks/toolchains/visualcpp.rake +++ b/tasks/toolchains/visualcpp.rake @@ -33,11 +33,6 @@ MRuby::Toolchain.new(:visualcpp) do |conf, _params| archiver.archive_options = '/nologo /OUT:"%{outfile}" %{objs}' end - conf.yacc do |yacc| - yacc.command = ENV['YACC'] || 'bison.exe' - yacc.compile_options = %q[-o "%{outfile}" "%{infile}"] - end - conf.gperf do |gperf| gperf.command = 'gperf.exe' gperf.compile_options = %q[-L ANSI-C -C -p -j1 -i 1 -g -o -t -N mrb_reserved_word -k"1,3,$" "%{infile}" > "%{outfile}"] diff --git a/tools/lrama/LEGAL.md b/tools/lrama/LEGAL.md new file mode 100644 index 000000000..5f2e1dbdd --- /dev/null +++ b/tools/lrama/LEGAL.md @@ -0,0 +1,12 @@ +# LEGAL NOTICE INFORMATION + +All the files in this distribution are covered under the MIT License except some files +mentioned below. + +## GNU General Public License version 3 + +These files are licensed under the GNU General Public License version 3 or later. See these files for more information. + +- template/bison/\_yacc.h +- template/bison/yacc.c +- template/bison/yacc.h diff --git a/tools/lrama/MIT b/tools/lrama/MIT new file mode 100644 index 000000000..b23d5210d --- /dev/null +++ b/tools/lrama/MIT @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2023 Yuichiro Kaneko + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/tools/lrama/NEWS.md b/tools/lrama/NEWS.md new file mode 100644 index 000000000..0b9f2e49e --- /dev/null +++ b/tools/lrama/NEWS.md @@ -0,0 +1,381 @@ +# NEWS for Lrama + +## Lrama 0.6.5 (2024-03-25) + +### Typed Midrule Actions + +User can specify the type of mid rule action by tag (``) instead of specifying it with in an action. + +``` +primary: k_case expr_value terms? + { + $$ = p->case_labels; + p->case_labels = Qnil; + } + case_body + k_end + { + ... + } +``` + +can be written as + +``` +primary: k_case expr_value terms? + { + $$ = p->case_labels; + p->case_labels = Qnil; + } + case_body + k_end + { + ... + } +``` + +`%destructor` for midrule action is invoked only when tag is specified by Typed Midrule Actions. + +Difference from Bison's Typed Midrule Actions is that tag is postposed in Lrama however it's preposed in Bison. + +Bison supports this feature from 3.1. + +## Lrama 0.6.4 (2024-03-22) + +### Parameterizing rules (preceded, terminated, delimited) + +Support `preceded`, `terminated` and `delimited` rules. + +``` +program: preceded(opening, X) + +// Expanded to + +program: preceded_opening_X +preceded_opening_X: opening X +``` + +``` +program: terminated(X, closing) + +// Expanded to + +program: terminated_X_closing +terminated_X_closing: X closing +``` + +``` +program: delimited(opening, X, closing) + +// Expanded to + +program: delimited_opening_X_closing +delimited_opening_X_closing: opening X closing +``` + +https://github.com/ruby/lrama/pull/382 + +### Support `%destructor` declaration + +User can set codes for freeing semantic value resources by using `%destructor`. +In general, these resources are freed by actions or after parsing. +However if syntax error happens in parsing, these codes may not be executed. +Codes associated to `%destructor` are executed when semantic value is popped from the stack by an error. + +``` +%token NUM +%type expr2 +%type expr + +%destructor { + printf("destructor for val1: %d\n", $$); +} // printer for TAG + +%destructor { + printf("destructor for val2: %d\n", $$); +} + +%destructor { + printf("destructor for expr: %d\n", $$); +} expr // printer for symbol +``` + +Bison supports this feature from 1.75b. + +https://github.com/ruby/lrama/pull/385 + +## Lrama 0.6.3 (2024-02-15) + +### Bring Your Own Stack + +Provide functionalities for Bring Your Own Stack. + +Ruby’s Ripper library requires their own semantic value stack to manage Ruby Objects returned by user defined callback method. Currently Ripper uses semantic value stack (`yyvsa`) which is used by parser to manage Node. This hack introduces some limitation on Ripper. For example, Ripper can not execute semantic analysis depending on Node structure. + +Lrama introduces two features to support another semantic value stack by parser generator users. + +1. Callback entry points + +User can emulate semantic value stack by these callbacks. +Lrama provides these five callbacks. Registered functions are called when each event happen. For example %after-shift function is called when shift happens on original semantic value stack. + +- `%after-shift` function_name +- `%before-reduce` function_name +- `%after-reduce` function_name +- `%after-shift-error-token` function_name +- `%after-pop-stack` function_name + +2. `$:n` variable to access index of each grammar symbols + +User also needs to access semantic value of their stack in grammar action. `$:n` provides the way to access to it. `$:n` is translated to the minus index from the top of the stack. +For example + +``` +primary: k_if expr_value then compstmt if_tail k_end + { + /*% ripper: if!($:2, $:4, $:5) %*/ + /* $:2 = -5, $:4 = -3, $:5 = -2. */ + } +``` + +https://github.com/ruby/lrama/pull/367 + +## Lrama 0.6.2 (2024-01-27) + +### %no-stdlib directive + +If `%no-stdlib` directive is set, Lrama doesn't load Lrama standard library for +parameterizing rules, stdlib.y. + +https://github.com/ruby/lrama/pull/344 + +## Lrama 0.6.1 (2024-01-13) + +### Nested parameterizing rules + +Allow to pass an instantiated rule to other parameterizing rules. + +``` +%rule constant(X) : X + ; + +%rule option(Y) : /* empty */ + | Y + ; + +%% + +program : option(constant(number)) // Nested rule + ; +%% +``` + +Allow to use nested parameterizing rules when define parameterizing rules. + +``` +%rule option(x) : /* empty */ + | X + ; + +%rule double(Y) : Y Y + ; + +%rule double_opt(A) : option(double(A)) // Nested rule + ; + +%% + +program : double_opt(number) + ; + +%% +``` + +https://github.com/ruby/lrama/pull/337 + +## Lrama 0.6.0 (2023-12-25) + +### User defined parameterizing rules + +Allow to define parameterizing rule by `%rule` directive. + +``` +%rule pair(X, Y): X Y { $$ = $1 + $2; } + ; + +%% + +program: stmt + ; + +stmt: pair(ODD, EVEN) + | pair(EVEN, ODD) + ; +``` + +https://github.com/ruby/lrama/pull/285 + +## Lrama 0.5.11 (2023-12-02) + +### Type specification of parameterizing rules + +Allow to specify type of rules by specifying tag, `` in below example. +Tag is post-modification style. + +``` +%union { + int i; +} + +%% + +program : option(number) + | number_alias? + ; +``` + +https://github.com/ruby/lrama/pull/272 + +## Lrama 0.5.10 (2023-11-18) + +### Parameterizing rules (option, nonempty_list, list) + +Support function call style parameterizing rules for `option`, `nonempty_list` and `list`. + +https://github.com/ruby/lrama/pull/197 + +### Parameterizing rules (separated_list) + +Support `separated_list` and `separated_nonempty_list` parameterizing rules. + +``` +program: separated_list(',', number) + +// Expanded to + +program: separated_list_number +separated_list_number: ε +separated_list_number: separated_nonempty_list_number +separated_nonempty_list_number: number +separated_nonempty_list_number: separated_nonempty_list_number ',' number +``` + +``` +program: separated_nonempty_list(',', number) + +// Expanded to + +program: separated_nonempty_list_number +separated_nonempty_list_number: number +separated_nonempty_list_number: separated_nonempty_list_number ',' number +``` + +https://github.com/ruby/lrama/pull/204 + +## Lrama 0.5.9 (2023-11-05) + +### Parameterizing rules (suffix) + +Parameterizing rules are template of rules. +It's very common pattern to write "list" grammar rule like: + +``` +opt_args: /* none */ + | args + ; + +args: arg + | args arg +``` + +Lrama supports these suffixes: + +- `?`: option +- `+`: nonempty list +- `*`: list + +Idea of Parameterizing rules comes from Menhir LR(1) parser generator (https://gallium.inria.fr/~fpottier/menhir/manual.html#sec32). + +https://github.com/ruby/lrama/pull/181 + +## Lrama 0.5.7 (2023-10-23) + +### Racc parser + +Replace Lrama's parser from hand written parser to LR parser generated by Racc. +Lrama uses `--embedded` option to generate LR parser because Racc is changed from default gem to bundled gem by Ruby 3.3 (https://github.com/ruby/lrama/pull/132). + +https://github.com/ruby/lrama/pull/62 + +## Lrama 0.5.4 (2023-08-17) + +### Runtime configuration for error recovery + +Meke error recovery function configurable on runtime by two new macros. + +- `YYMAXREPAIR`: Expected to return max length of repair operations. `%parse-param` is passed to this function. +- `YYERROR_RECOVERY_ENABLED`: Expected to return bool value to determine error recovery is enabled or not. `%parse-param` is passed to this function. + +https://github.com/ruby/lrama/pull/74 + +## Lrama 0.5.3 (2023-08-05) + +### Error Recovery + +Support token insert base Error Recovery. +`-e` option is needed to generate parser with error recovery functions. + +https://github.com/ruby/lrama/pull/44 + +## Lrama 0.5.2 (2023-06-14) + +### Named References + +Instead of positional references like `$1` or `$$`, +named references allow to access to symbol by name. + +``` +primary: k_class cpath superclass bodystmt k_end + { + $primary = new_class($cpath, $bodystmt, $superclass); + } +``` + +Alias name can be declared. + +``` +expr[result]: expr[ex-left] '+' expr[ex.right] + { + $result = $[ex-left] + $[ex.right]; + } +``` + +Bison supports this feature from 2.5. + +### Add parse params to some macros and functions + +`%parse-param` are added to these macros and functions to remove ytab.sed hack from Ruby. + +- `YY_LOCATION_PRINT` +- `YY_SYMBOL_PRINT` +- `yy_stack_print` +- `YY_STACK_PRINT` +- `YY_REDUCE_PRINT` +- `yysyntax_error` + +https://github.com/ruby/lrama/pull/40 + +See also: https://github.com/ruby/ruby/pull/7807 + +## Lrama 0.5.0 (2023-05-17) + +### stdin mode + +When `-` is given as grammar file name, reads the grammar source from STDIN, and takes the next argument as the input file name. This mode helps pre-process a grammar source. + +https://github.com/ruby/lrama/pull/8 + +## Lrama 0.4.0 (2023-05-13) + +This is the first version migrated to Ruby. +This version generates "parse.c" compatible with Bison 3.8.2. diff --git a/tools/lrama/exe/lrama b/tools/lrama/exe/lrama new file mode 100755 index 000000000..ba5fb06c8 --- /dev/null +++ b/tools/lrama/exe/lrama @@ -0,0 +1,6 @@ +#!/usr/bin/env ruby + +$LOAD_PATH << File.join(__dir__, "../lib") +require "lrama" + +Lrama::Command.new.run(ARGV.dup) diff --git a/tools/lrama/lib/lrama.rb b/tools/lrama/lib/lrama.rb new file mode 100644 index 000000000..9e517b0d7 --- /dev/null +++ b/tools/lrama/lib/lrama.rb @@ -0,0 +1,17 @@ +require "lrama/bitmap" +require "lrama/command" +require "lrama/context" +require "lrama/counterexamples" +require "lrama/digraph" +require "lrama/grammar" +require "lrama/lexer" +require "lrama/option_parser" +require "lrama/options" +require "lrama/output" +require "lrama/parser" +require "lrama/report" +require "lrama/state" +require "lrama/states" +require "lrama/states_reporter" +require "lrama/version" +require "lrama/warning" diff --git a/tools/lrama/lib/lrama/bitmap.rb b/tools/lrama/lib/lrama/bitmap.rb new file mode 100644 index 000000000..8349a23c3 --- /dev/null +++ b/tools/lrama/lib/lrama/bitmap.rb @@ -0,0 +1,29 @@ +module Lrama + module Bitmap + def self.from_array(ary) + bit = 0 + + ary.each do |int| + bit |= (1 << int) + end + + bit + end + + def self.to_array(int) + a = [] + i = 0 + + while int > 0 do + if int & 1 == 1 + a << i + end + + i += 1 + int >>= 1 + end + + a + end + end +end diff --git a/tools/lrama/lib/lrama/command.rb b/tools/lrama/lib/lrama/command.rb new file mode 100644 index 000000000..12fc4fc7e --- /dev/null +++ b/tools/lrama/lib/lrama/command.rb @@ -0,0 +1,73 @@ +module Lrama + class Command + LRAMA_LIB = File.realpath(File.join(File.dirname(__FILE__))) + STDLIB_FILE_PATH = File.join(LRAMA_LIB, 'grammar', 'stdlib.y') + + def run(argv) + begin + options = OptionParser.new.parse(argv) + rescue => e + message = e.message + message = message.gsub(/.+/, "\e[1m\\&\e[m") if Exception.to_tty? + abort message + end + + Report::Duration.enable if options.trace_opts[:time] + + warning = Lrama::Warning.new + text = options.y.read + options.y.close if options.y != STDIN + begin + grammar = Lrama::Parser.new(text, options.grammar_file, options.debug).parse + unless grammar.no_stdlib + stdlib_grammar = Lrama::Parser.new(File.read(STDLIB_FILE_PATH), STDLIB_FILE_PATH, options.debug).parse + grammar.insert_before_parameterizing_rules(stdlib_grammar.parameterizing_rules) + end + grammar.prepare + grammar.validate! + rescue => e + raise e if options.debug + message = e.message + message = message.gsub(/.+/, "\e[1m\\&\e[m") if Exception.to_tty? + abort message + end + states = Lrama::States.new(grammar, warning, trace_state: (options.trace_opts[:automaton] || options.trace_opts[:closure])) + states.compute + context = Lrama::Context.new(states) + + if options.report_file + reporter = Lrama::StatesReporter.new(states) + File.open(options.report_file, "w+") do |f| + reporter.report(f, **options.report_opts) + end + end + + if options.trace_opts && options.trace_opts[:rules] + puts "Grammar rules:" + puts grammar.rules + end + + if options.trace_opts && options.trace_opts[:actions] + puts "Grammar rules with actions:" + grammar.rules.each { |rule| puts rule.with_actions } + end + + File.open(options.outfile, "w+") do |f| + Lrama::Output.new( + out: f, + output_file_path: options.outfile, + template_name: options.skeleton, + grammar_file_path: options.grammar_file, + header_file_path: options.header_file, + context: context, + grammar: grammar, + error_recovery: options.error_recovery, + ).render + end + + if warning.has_error? + exit false + end + end + end +end diff --git a/tools/lrama/lib/lrama/context.rb b/tools/lrama/lib/lrama/context.rb new file mode 100644 index 000000000..32017e65f --- /dev/null +++ b/tools/lrama/lib/lrama/context.rb @@ -0,0 +1,497 @@ +require "lrama/report/duration" + +module Lrama + # This is passed to a template + class Context + include Report::Duration + + ErrorActionNumber = -Float::INFINITY + BaseMin = -Float::INFINITY + + # TODO: It might be better to pass `states` to Output directly? + attr_reader :states, :yylast, :yypact_ninf, :yytable_ninf, :yydefact, :yydefgoto + + def initialize(states) + @states = states + @yydefact = nil + @yydefgoto = nil + # Array of array + @_actions = [] + + compute_tables + end + + # enum yytokentype + def yytokentype + @states.terms.reject do |term| + 0 < term.token_id && term.token_id < 128 + end.map do |term| + [term.id.s_value, term.token_id, term.display_name] + end.unshift(["YYEMPTY", -2, nil]) + end + + # enum yysymbol_kind_t + def yysymbol_kind_t + @states.symbols.map do |sym| + [sym.enum_name, sym.number, sym.comment] + end.unshift(["YYSYMBOL_YYEMPTY", -2, nil]) + end + + # State number of final (accepted) state + def yyfinal + @states.states.find do |state| + state.items.find do |item| + item.lhs.accept_symbol? && item.end_of_rule? + end + end.id + end + + # Number of terms + def yyntokens + @states.terms.count + end + + # Number of nterms + def yynnts + @states.nterms.count + end + + # Number of rules + def yynrules + @states.rules.count + end + + # Number of states + def yynstates + @states.states.count + end + + # Last token number + def yymaxutok + @states.terms.map(&:token_id).max + end + + # YYTRANSLATE + # + # yytranslate is a mapping from token id to symbol number + def yytranslate + # 2 is YYSYMBOL_YYUNDEF + a = Array.new(yymaxutok, 2) + + @states.terms.each do |term| + a[term.token_id] = term.number + end + + return a + end + + def yytranslate_inverted + a = Array.new(@states.symbols.count, @states.undef_symbol.token_id) + + @states.terms.each do |term| + a[term.number] = term.token_id + end + + return a + end + + # Mapping from rule number to line number of the rule is defined. + # Dummy rule is appended as the first element whose value is 0 + # because 0 means error in yydefact. + def yyrline + a = [0] + + @states.rules.each do |rule| + a << rule.lineno + end + + return a + end + + # Mapping from symbol number to its name + def yytname + @states.symbols.sort_by(&:number).map do |sym| + sym.display_name + end + end + + def yypact + @base[0...yynstates] + end + + def yypgoto + @base[yynstates..-1] + end + + def yytable + @table + end + + def yycheck + @check + end + + def yystos + @states.states.map do |state| + state.accessing_symbol.number + end + end + + # Mapping from rule number to symbol number of LHS. + # Dummy rule is appended as the first element whose value is 0 + # because 0 means error in yydefact. + def yyr1 + a = [0] + + @states.rules.each do |rule| + a << rule.lhs.number + end + + return a + end + + # Mapping from rule number to length of RHS. + # Dummy rule is appended as the first element whose value is 0 + # because 0 means error in yydefact. + def yyr2 + a = [0] + + @states.rules.each do |rule| + a << rule.rhs.count + end + + return a + end + + private + + # Compute these + # + # See also: "src/tables.c" of Bison. + # + # * yydefact + # * yydefgoto + # * yypact and yypgoto + # * yytable + # * yycheck + # * yypact_ninf + # * yytable_ninf + def compute_tables + report_duration(:compute_yydefact) { compute_yydefact } + report_duration(:compute_yydefgoto) { compute_yydefgoto } + report_duration(:sort_actions) { sort_actions } + # debug_sorted_actions + report_duration(:compute_packed_table) { compute_packed_table } + end + + def vectors_count + @states.states.count + @states.nterms.count + end + + # In compressed table, rule 0 is appended as an error case + # and reduce is represented as minus number. + def rule_id_to_action_number(rule_id) + (rule_id + 1) * -1 + end + + # Symbol number is assigned to term first then nterm. + # This method calculates sequence_number for nterm. + def nterm_number_to_sequence_number(nterm_number) + nterm_number - @states.terms.count + end + + # Vector is states + nterms + def nterm_number_to_vector_number(nterm_number) + @states.states.count + (nterm_number - @states.terms.count) + end + + def compute_yydefact + # Default action (shift/reduce/error) for each state. + # Index is state id, value is `rule id + 1` of a default reduction. + @yydefact = Array.new(@states.states.count, 0) + + @states.states.each do |state| + # Action number means + # + # * number = 0, default action + # * number = -Float::INFINITY, error by %nonassoc + # * number > 0, shift then move to state "number" + # * number < 0, reduce by "-number" rule. Rule "number" is already added by 1. + actions = Array.new(@states.terms.count, 0) + + if state.reduces.map(&:selected_look_ahead).any? {|la| !la.empty? } + # Iterate reduces with reverse order so that first rule is used. + state.reduces.reverse_each do |reduce| + reduce.look_ahead.each do |term| + actions[term.number] = rule_id_to_action_number(reduce.rule.id) + end + end + end + + # Shift is selected when S/R conflict exists. + state.selected_term_transitions.each do |shift, next_state| + actions[shift.next_sym.number] = next_state.id + end + + state.resolved_conflicts.select do |conflict| + conflict.which == :error + end.each do |conflict| + actions[conflict.symbol.number] = ErrorActionNumber + end + + # If default_reduction_rule, replace default_reduction_rule in + # actions with zero. + if state.default_reduction_rule + actions.map! do |e| + if e == rule_id_to_action_number(state.default_reduction_rule.id) + 0 + else + e + end + end + end + + # If no default_reduction_rule, default behavior is an + # error then replace ErrorActionNumber with zero. + if !state.default_reduction_rule + actions.map! do |e| + if e == ErrorActionNumber + 0 + else + e + end + end + end + + s = actions.each_with_index.map do |n, i| + [i, n] + end.reject do |i, n| + # Remove default_reduction_rule entries + n == 0 + end + + if s.count != 0 + # Entry of @_actions is an array of + # + # * State id + # * Array of tuple, [from, to] where from is term number and to is action. + # * The number of "Array of tuple" used by sort_actions + # * "width" used by sort_actions + @_actions << [state.id, s, s.count, s.last[0] - s.first[0] + 1] + end + + @yydefact[state.id] = state.default_reduction_rule ? state.default_reduction_rule.id + 1 : 0 + end + end + + def compute_yydefgoto + # Default GOTO (nterm transition) for each nterm. + # Index is sequence number of nterm, value is state id + # of a default nterm transition destination. + @yydefgoto = Array.new(@states.nterms.count, 0) + # Mapping from nterm to next_states + nterm_to_next_states = {} + + @states.states.each do |state| + state.nterm_transitions.each do |shift, next_state| + key = shift.next_sym + nterm_to_next_states[key] ||= [] + nterm_to_next_states[key] << [state, next_state] # [from_state, to_state] + end + end + + @states.nterms.each do |nterm| + if !(states = nterm_to_next_states[nterm]) + default_goto = 0 + not_default_gotos = [] + else + default_state = states.map(&:last).group_by {|s| s }.max_by {|_, v| v.count }.first + default_goto = default_state.id + not_default_gotos = [] + states.each do |from_state, to_state| + next if to_state.id == default_goto + not_default_gotos << [from_state.id, to_state.id] + end + end + + k = nterm_number_to_sequence_number(nterm.number) + @yydefgoto[k] = default_goto + + if not_default_gotos.count != 0 + v = nterm_number_to_vector_number(nterm.number) + + # Entry of @_actions is an array of + # + # * Nterm number as vector number + # * Array of tuple, [from, to] where from is state number and to is state number. + # * The number of "Array of tuple" used by sort_actions + # * "width" used by sort_actions + @_actions << [v, not_default_gotos, not_default_gotos.count, not_default_gotos.last[0] - not_default_gotos.first[0] + 1] + end + end + end + + def sort_actions + # This is not same with #sort_actions + # + # @sorted_actions = @_actions.sort_by do |_, _, count, width| + # [-width, -count] + # end + + @sorted_actions = [] + + @_actions.each do |action| + if @sorted_actions.empty? + @sorted_actions << action + next + end + + j = @sorted_actions.count - 1 + _state_id, _froms_and_tos, count, width = action + + while (j >= 0) do + case + when @sorted_actions[j][3] < width + j -= 1 + when @sorted_actions[j][3] == width && @sorted_actions[j][2] < count + j -= 1 + else + break + end + end + + @sorted_actions.insert(j + 1, action) + end + end + + def debug_sorted_actions + ary = Array.new + @sorted_actions.each do |state_id, froms_and_tos, count, width| + ary[state_id] = [state_id, froms_and_tos, count, width] + end + + print sprintf("table_print:\n\n") + + print sprintf("order [\n") + vectors_count.times do |i| + print sprintf("%d, ", @sorted_actions[i] ? @sorted_actions[i][0] : 0) + print "\n" if i % 10 == 9 + end + print sprintf("]\n\n") + + print sprintf("width [\n") + vectors_count.times do |i| + print sprintf("%d, ", ary[i] ? ary[i][3] : 0) + print "\n" if i % 10 == 9 + end + print sprintf("]\n\n") + + print sprintf("tally [\n") + vectors_count.times do |i| + print sprintf("%d, ", ary[i] ? ary[i][2] : 0) + print "\n" if i % 10 == 9 + end + print sprintf("]\n\n") + end + + def compute_packed_table + # yypact and yypgoto + @base = Array.new(vectors_count, BaseMin) + # yytable + @table = [] + # yycheck + @check = [] + # Key is froms_and_tos, value is index position + pushed = {} + userd_res = {} + lowzero = 0 + high = 0 + + @sorted_actions.each do |state_id, froms_and_tos, _, _| + if (res = pushed[froms_and_tos]) + @base[state_id] = res + next + end + + res = lowzero - froms_and_tos.first[0] + + while true do + ok = true + + froms_and_tos.each do |from, to| + loc = res + from + + if @table[loc] + # If the cell of table is set, can not use the cell. + ok = false + break + end + end + + if ok && userd_res[res] + ok = false + end + + if ok + break + else + res += 1 + end + end + + loc = 0 + + froms_and_tos.each do |from, to| + loc = res + from + + @table[loc] = to + @check[loc] = from + end + + while (@table[lowzero]) do + lowzero += 1 + end + + high = loc if high < loc + + @base[state_id] = res + pushed[froms_and_tos] = res + userd_res[res] = true + end + + @yylast = high + + # replace_ninf + @yypact_ninf = (@base.reject {|i| i == BaseMin } + [0]).min - 1 + @base.map! do |i| + case i + when BaseMin + @yypact_ninf + else + i + end + end + + @yytable_ninf = (@table.compact.reject {|i| i == ErrorActionNumber } + [0]).min - 1 + @table.map! do |i| + case i + when nil + 0 + when ErrorActionNumber + @yytable_ninf + else + i + end + end + + @check.map! do |i| + case i + when nil + -1 + else + i + end + end + end + end +end diff --git a/tools/lrama/lib/lrama/counterexamples.rb b/tools/lrama/lib/lrama/counterexamples.rb new file mode 100644 index 000000000..046265da5 --- /dev/null +++ b/tools/lrama/lib/lrama/counterexamples.rb @@ -0,0 +1,286 @@ +require "set" + +require "lrama/counterexamples/derivation" +require "lrama/counterexamples/example" +require "lrama/counterexamples/path" +require "lrama/counterexamples/production_path" +require "lrama/counterexamples/start_path" +require "lrama/counterexamples/state_item" +require "lrama/counterexamples/transition_path" +require "lrama/counterexamples/triple" + +module Lrama + # See: https://www.cs.cornell.edu/andru/papers/cupex/cupex.pdf + # 4. Constructing Nonunifying Counterexamples + class Counterexamples + attr_reader :transitions, :productions + + def initialize(states) + @states = states + setup_transitions + setup_productions + end + + def to_s + "#" + end + alias :inspect :to_s + + def compute(conflict_state) + conflict_state.conflicts.flat_map do |conflict| + case conflict.type + when :shift_reduce + shift_reduce_example(conflict_state, conflict) + when :reduce_reduce + reduce_reduce_examples(conflict_state, conflict) + end + end.compact + end + + private + + def setup_transitions + # Hash [StateItem, Symbol] => StateItem + @transitions = {} + # Hash [StateItem, Symbol] => Set(StateItem) + @reverse_transitions = {} + + @states.states.each do |src_state| + trans = {} + + src_state.transitions.each do |shift, next_state| + trans[shift.next_sym] = next_state + end + + src_state.items.each do |src_item| + next if src_item.end_of_rule? + sym = src_item.next_sym + dest_state = trans[sym] + + dest_state.kernels.each do |dest_item| + next unless (src_item.rule == dest_item.rule) && (src_item.position + 1 == dest_item.position) + src_state_item = StateItem.new(src_state, src_item) + dest_state_item = StateItem.new(dest_state, dest_item) + + @transitions[[src_state_item, sym]] = dest_state_item + + key = [dest_state_item, sym] + @reverse_transitions[key] ||= Set.new + @reverse_transitions[key] << src_state_item + end + end + end + end + + def setup_productions + # Hash [StateItem] => Set(Item) + @productions = {} + # Hash [State, Symbol] => Set(Item). Symbol is nterm + @reverse_productions = {} + + @states.states.each do |state| + # LHS => Set(Item) + h = {} + + state.closure.each do |item| + sym = item.lhs + + h[sym] ||= Set.new + h[sym] << item + end + + state.items.each do |item| + next if item.end_of_rule? + next if item.next_sym.term? + + sym = item.next_sym + state_item = StateItem.new(state, item) + key = [state, sym] + + @productions[state_item] = h[sym] + + @reverse_productions[key] ||= Set.new + @reverse_productions[key] << item + end + end + end + + def shift_reduce_example(conflict_state, conflict) + conflict_symbol = conflict.symbols.first + shift_conflict_item = conflict_state.items.find { |item| item.next_sym == conflict_symbol } + path2 = shortest_path(conflict_state, conflict.reduce.item, conflict_symbol) + path1 = find_shift_conflict_shortest_path(path2, conflict_state, shift_conflict_item) + + Example.new(path1, path2, conflict, conflict_symbol, self) + end + + def reduce_reduce_examples(conflict_state, conflict) + conflict_symbol = conflict.symbols.first + path1 = shortest_path(conflict_state, conflict.reduce1.item, conflict_symbol) + path2 = shortest_path(conflict_state, conflict.reduce2.item, conflict_symbol) + + Example.new(path1, path2, conflict, conflict_symbol, self) + end + + def find_shift_conflict_shortest_path(reduce_path, conflict_state, conflict_item) + state_items = find_shift_conflict_shortest_state_items(reduce_path, conflict_state, conflict_item) + build_paths_from_state_items(state_items) + end + + def find_shift_conflict_shortest_state_items(reduce_path, conflict_state, conflict_item) + target_state_item = StateItem.new(conflict_state, conflict_item) + result = [target_state_item] + reversed_reduce_path = reduce_path.to_a.reverse + # Index for state_item + i = 0 + + while (path = reversed_reduce_path[i]) + # Index for prev_state_item + j = i + 1 + _j = j + + while (prev_path = reversed_reduce_path[j]) + if prev_path.production? + j += 1 + else + break + end + end + + state_item = path.to + prev_state_item = prev_path&.to + + if target_state_item == state_item || target_state_item.item.start_item? + result.concat(reversed_reduce_path[_j..-1].map(&:to)) + break + end + + if target_state_item.item.beginning_of_rule? + queue = [] + queue << [target_state_item] + + # Find reverse production + while (sis = queue.shift) + si = sis.last + + # Reach to start state + if si.item.start_item? + sis.shift + result.concat(sis) + target_state_item = si + break + end + + if !si.item.beginning_of_rule? + key = [si, si.item.previous_sym] + @reverse_transitions[key].each do |prev_target_state_item| + next if prev_target_state_item.state != prev_state_item.state + sis.shift + result.concat(sis) + result << prev_target_state_item + target_state_item = prev_target_state_item + i = j + queue.clear + break + end + else + key = [si.state, si.item.lhs] + @reverse_productions[key].each do |item| + state_item = StateItem.new(si.state, item) + queue << (sis + [state_item]) + end + end + end + else + # Find reverse transition + key = [target_state_item, target_state_item.item.previous_sym] + @reverse_transitions[key].each do |prev_target_state_item| + next if prev_target_state_item.state != prev_state_item.state + result << prev_target_state_item + target_state_item = prev_target_state_item + i = j + break + end + end + end + + result.reverse + end + + def build_paths_from_state_items(state_items) + state_items.zip([nil] + state_items).map do |si, prev_si| + case + when prev_si.nil? + StartPath.new(si) + when si.item.beginning_of_rule? + ProductionPath.new(prev_si, si) + else + TransitionPath.new(prev_si, si) + end + end + end + + def shortest_path(conflict_state, conflict_reduce_item, conflict_term) + # queue: is an array of [Triple, [Path]] + queue = [] + visited = {} + start_state = @states.states.first + raise "BUG: Start state should be just one kernel." if start_state.kernels.count != 1 + + start = Triple.new(start_state, start_state.kernels.first, Set.new([@states.eof_symbol])) + + queue << [start, [StartPath.new(start.state_item)]] + + while true + triple, paths = queue.shift + + next if visited[triple] + visited[triple] = true + + # Found + if triple.state == conflict_state && triple.item == conflict_reduce_item && triple.l.include?(conflict_term) + return paths + end + + # transition + triple.state.transitions.each do |shift, next_state| + next unless triple.item.next_sym && triple.item.next_sym == shift.next_sym + next_state.kernels.each do |kernel| + next if kernel.rule != triple.item.rule + t = Triple.new(next_state, kernel, triple.l) + queue << [t, paths + [TransitionPath.new(triple.state_item, t.state_item)]] + end + end + + # production step + triple.state.closure.each do |item| + next unless triple.item.next_sym && triple.item.next_sym == item.lhs + l = follow_l(triple.item, triple.l) + t = Triple.new(triple.state, item, l) + queue << [t, paths + [ProductionPath.new(triple.state_item, t.state_item)]] + end + + break if queue.empty? + end + + return nil + end + + def follow_l(item, current_l) + # 1. follow_L (A -> X1 ... Xn-1 • Xn) = L + # 2. follow_L (A -> X1 ... Xk • Xk+1 Xk+2 ... Xn) = {Xk+2} if Xk+2 is a terminal + # 3. follow_L (A -> X1 ... Xk • Xk+1 Xk+2 ... Xn) = FIRST(Xk+2) if Xk+2 is a nonnullable nonterminal + # 4. follow_L (A -> X1 ... Xk • Xk+1 Xk+2 ... Xn) = FIRST(Xk+2) + follow_L (A -> X1 ... Xk+1 • Xk+2 ... Xn) if Xk+2 is a nullable nonterminal + case + when item.number_of_rest_symbols == 1 + current_l + when item.next_next_sym.term? + Set.new([item.next_next_sym]) + when !item.next_next_sym.nullable + item.next_next_sym.first_set + else + item.next_next_sym.first_set + follow_l(item.new_by_next_position, current_l) + end + end + end +end diff --git a/tools/lrama/lib/lrama/counterexamples/derivation.rb b/tools/lrama/lib/lrama/counterexamples/derivation.rb new file mode 100644 index 000000000..691e93535 --- /dev/null +++ b/tools/lrama/lib/lrama/counterexamples/derivation.rb @@ -0,0 +1,63 @@ +module Lrama + class Counterexamples + class Derivation + attr_reader :item, :left, :right + attr_writer :right + + def initialize(item, left, right = nil) + @item = item + @left = left + @right = right + end + + def to_s + "#" + end + alias :inspect :to_s + + def render_strings_for_report + result = [] + _render_for_report(self, 0, result, 0) + result.map(&:rstrip) + end + + def render_for_report + render_strings_for_report.join("\n") + end + + private + + def _render_for_report(derivation, offset, strings, index) + item = derivation.item + if strings[index] + strings[index] << " " * (offset - strings[index].length) + else + strings[index] = " " * offset + end + str = strings[index] + str << "#{item.rule_id}: #{item.symbols_before_dot.map(&:display_name).join(" ")} " + + if derivation.left + len = str.length + str << "#{item.next_sym.display_name}" + length = _render_for_report(derivation.left, len, strings, index + 1) + # I want String#ljust! + str << " " * (length - str.length) + else + str << " • #{item.symbols_after_dot.map(&:display_name).join(" ")} " + return str.length + end + + if derivation.right&.left + length = _render_for_report(derivation.right.left, str.length, strings, index + 1) + str << "#{item.symbols_after_dot[1..-1].map(&:display_name).join(" ")} " + str << " " * (length - str.length) if length > str.length + elsif item.next_next_sym + str << "#{item.symbols_after_dot[1..-1].map(&:display_name).join(" ")} " + end + + return str.length + end + end + end +end diff --git a/tools/lrama/lib/lrama/counterexamples/example.rb b/tools/lrama/lib/lrama/counterexamples/example.rb new file mode 100644 index 000000000..62244a77e --- /dev/null +++ b/tools/lrama/lib/lrama/counterexamples/example.rb @@ -0,0 +1,124 @@ +module Lrama + class Counterexamples + class Example + attr_reader :path1, :path2, :conflict, :conflict_symbol + + # path1 is shift conflict when S/R conflict + # path2 is always reduce conflict + def initialize(path1, path2, conflict, conflict_symbol, counterexamples) + @path1 = path1 + @path2 = path2 + @conflict = conflict + @conflict_symbol = conflict_symbol + @counterexamples = counterexamples + end + + def type + @conflict.type + end + + def path1_item + @path1.last.to.item + end + + def path2_item + @path2.last.to.item + end + + def derivations1 + @derivations1 ||= _derivations(path1) + end + + def derivations2 + @derivations2 ||= _derivations(path2) + end + + private + + def _derivations(paths) + derivation = nil + current = :production + lookahead_sym = paths.last.to.item.end_of_rule? ? @conflict_symbol : nil + + paths.reverse_each do |path| + item = path.to.item + + case current + when :production + case path + when StartPath + derivation = Derivation.new(item, derivation) + current = :start + when TransitionPath + derivation = Derivation.new(item, derivation) + current = :transition + when ProductionPath + derivation = Derivation.new(item, derivation) + current = :production + end + + if lookahead_sym && item.next_next_sym && item.next_next_sym.first_set.include?(lookahead_sym) + state_item = @counterexamples.transitions[[path.to, item.next_sym]] + derivation2 = find_derivation_for_symbol(state_item, lookahead_sym) + derivation.right = derivation2 + lookahead_sym = nil + end + + when :transition + case path + when StartPath + derivation = Derivation.new(item, derivation) + current = :start + when TransitionPath + # ignore + current = :transition + when ProductionPath + # ignore + current = :production + end + else + raise "BUG: Unknown #{current}" + end + + break if current == :start + end + + derivation + end + + def find_derivation_for_symbol(state_item, sym) + queue = [] + queue << [state_item] + + while (sis = queue.shift) + si = sis.last + next_sym = si.item.next_sym + + if next_sym == sym + derivation = nil + + sis.reverse_each do |si| + derivation = Derivation.new(si.item, derivation) + end + + return derivation + end + + if next_sym.nterm? && next_sym.first_set.include?(sym) + @counterexamples.productions[si].each do |next_item| + next if next_item.empty_rule? + next_si = StateItem.new(si.state, next_item) + next if sis.include?(next_si) + queue << (sis + [next_si]) + end + + if next_sym.nullable + next_si = @counterexamples.transitions[[si, next_sym]] + queue << (sis + [next_si]) + end + end + end + end + end + end +end diff --git a/tools/lrama/lib/lrama/counterexamples/path.rb b/tools/lrama/lib/lrama/counterexamples/path.rb new file mode 100644 index 000000000..edba67a3b --- /dev/null +++ b/tools/lrama/lib/lrama/counterexamples/path.rb @@ -0,0 +1,23 @@ +module Lrama + class Counterexamples + class Path + def initialize(from_state_item, to_state_item) + @from_state_item = from_state_item + @to_state_item = to_state_item + end + + def from + @from_state_item + end + + def to + @to_state_item + end + + def to_s + "#" + end + alias :inspect :to_s + end + end +end diff --git a/tools/lrama/lib/lrama/counterexamples/production_path.rb b/tools/lrama/lib/lrama/counterexamples/production_path.rb new file mode 100644 index 000000000..d7db68851 --- /dev/null +++ b/tools/lrama/lib/lrama/counterexamples/production_path.rb @@ -0,0 +1,17 @@ +module Lrama + class Counterexamples + class ProductionPath < Path + def type + :production + end + + def transition? + false + end + + def production? + true + end + end + end +end diff --git a/tools/lrama/lib/lrama/counterexamples/start_path.rb b/tools/lrama/lib/lrama/counterexamples/start_path.rb new file mode 100644 index 000000000..4a6821cd0 --- /dev/null +++ b/tools/lrama/lib/lrama/counterexamples/start_path.rb @@ -0,0 +1,21 @@ +module Lrama + class Counterexamples + class StartPath < Path + def initialize(to_state_item) + super nil, to_state_item + end + + def type + :start + end + + def transition? + false + end + + def production? + false + end + end + end +end diff --git a/tools/lrama/lib/lrama/counterexamples/state_item.rb b/tools/lrama/lib/lrama/counterexamples/state_item.rb new file mode 100644 index 000000000..930ff4a5f --- /dev/null +++ b/tools/lrama/lib/lrama/counterexamples/state_item.rb @@ -0,0 +1,6 @@ +module Lrama + class Counterexamples + class StateItem < Struct.new(:state, :item) + end + end +end diff --git a/tools/lrama/lib/lrama/counterexamples/transition_path.rb b/tools/lrama/lib/lrama/counterexamples/transition_path.rb new file mode 100644 index 000000000..96e611612 --- /dev/null +++ b/tools/lrama/lib/lrama/counterexamples/transition_path.rb @@ -0,0 +1,17 @@ +module Lrama + class Counterexamples + class TransitionPath < Path + def type + :transition + end + + def transition? + true + end + + def production? + false + end + end + end +end diff --git a/tools/lrama/lib/lrama/counterexamples/triple.rb b/tools/lrama/lib/lrama/counterexamples/triple.rb new file mode 100644 index 000000000..e802beccf --- /dev/null +++ b/tools/lrama/lib/lrama/counterexamples/triple.rb @@ -0,0 +1,21 @@ +module Lrama + class Counterexamples + # s: state + # itm: item within s + # l: precise lookahead set + class Triple < Struct.new(:s, :itm, :l) + alias :state :s + alias :item :itm + alias :precise_lookahead_set :l + + def state_item + StateItem.new(state, item) + end + + def inspect + "#{state.inspect}. #{item.display_name}. #{l.map(&:id).map(&:s_value)}" + end + alias :to_s :inspect + end + end +end diff --git a/tools/lrama/lib/lrama/digraph.rb b/tools/lrama/lib/lrama/digraph.rb new file mode 100644 index 000000000..bbaa86019 --- /dev/null +++ b/tools/lrama/lib/lrama/digraph.rb @@ -0,0 +1,51 @@ +module Lrama + # Algorithm Digraph of https://dl.acm.org/doi/pdf/10.1145/69622.357187 (P. 625) + class Digraph + def initialize(sets, relation, base_function) + # X in the paper + @sets = sets + # R in the paper + @relation = relation + # F' in the paper + @base_function = base_function + # S in the paper + @stack = [] + # N in the paper + @h = Hash.new(0) + # F in the paper + @result = {} + end + + def compute + @sets.each do |x| + next if @h[x] != 0 + traverse(x) + end + + return @result + end + + private + + def traverse(x) + @stack.push(x) + d = @stack.count + @h[x] = d + @result[x] = @base_function[x] # F x = F' x + + @relation[x]&.each do |y| + traverse(y) if @h[y] == 0 + @h[x] = [@h[x], @h[y]].min + @result[x] |= @result[y] # F x = F x + F y + end + + if @h[x] == d + while (z = @stack.pop) do + @h[z] = Float::INFINITY + break if z == x + @result[z] = @result[x] # F (Top of S) = F x + end + end + end + end +end diff --git a/tools/lrama/lib/lrama/grammar.rb b/tools/lrama/lib/lrama/grammar.rb new file mode 100644 index 000000000..a816b8261 --- /dev/null +++ b/tools/lrama/lib/lrama/grammar.rb @@ -0,0 +1,381 @@ +require "forwardable" +require "lrama/grammar/auxiliary" +require "lrama/grammar/binding" +require "lrama/grammar/code" +require "lrama/grammar/counter" +require "lrama/grammar/destructor" +require "lrama/grammar/error_token" +require "lrama/grammar/parameterizing_rule" +require "lrama/grammar/percent_code" +require "lrama/grammar/precedence" +require "lrama/grammar/printer" +require "lrama/grammar/reference" +require "lrama/grammar/rule" +require "lrama/grammar/rule_builder" +require "lrama/grammar/symbol" +require "lrama/grammar/symbols" +require "lrama/grammar/type" +require "lrama/grammar/union" +require "lrama/lexer" + +module Lrama + # Grammar is the result of parsing an input grammar file + class Grammar + extend Forwardable + + attr_reader :percent_codes, :eof_symbol, :error_symbol, :undef_symbol, :accept_symbol, :aux + attr_accessor :union, :expect, + :printers, :error_tokens, + :lex_param, :parse_param, :initial_action, + :after_shift, :before_reduce, :after_reduce, :after_shift_error_token, :after_pop_stack, + :symbols_resolver, :types, + :rules, :rule_builders, + :sym_to_rules, :no_stdlib + + def_delegators "@symbols_resolver", :symbols, :nterms, :terms, :add_nterm, :add_term, + :find_symbol_by_number!, :find_symbol_by_id!, :token_to_symbol, + :find_symbol_by_s_value!, :fill_symbol_number, :fill_nterm_type, + :fill_printer, :fill_destructor, :fill_error_token, :sort_by_number! + + + def initialize(rule_counter) + @rule_counter = rule_counter + + # Code defined by "%code" + @percent_codes = [] + @printers = [] + @destructors = [] + @error_tokens = [] + @symbols_resolver = Grammar::Symbols::Resolver.new + @types = [] + @rule_builders = [] + @rules = [] + @sym_to_rules = {} + @parameterizing_rule_resolver = ParameterizingRule::Resolver.new + @empty_symbol = nil + @eof_symbol = nil + @error_symbol = nil + @undef_symbol = nil + @accept_symbol = nil + @aux = Auxiliary.new + @no_stdlib = false + + append_special_symbols + end + + def add_percent_code(id:, code:) + @percent_codes << PercentCode.new(id.s_value, code.s_value) + end + + def add_destructor(ident_or_tags:, token_code:, lineno:) + @destructors << Destructor.new(ident_or_tags: ident_or_tags, token_code: token_code, lineno: lineno) + end + + def add_printer(ident_or_tags:, token_code:, lineno:) + @printers << Printer.new(ident_or_tags: ident_or_tags, token_code: token_code, lineno: lineno) + end + + def add_error_token(ident_or_tags:, token_code:, lineno:) + @error_tokens << ErrorToken.new(ident_or_tags: ident_or_tags, token_code: token_code, lineno: lineno) + end + + def add_type(id:, tag:) + @types << Type.new(id: id, tag: tag) + end + + def add_nonassoc(sym, precedence) + set_precedence(sym, Precedence.new(type: :nonassoc, precedence: precedence)) + end + + def add_left(sym, precedence) + set_precedence(sym, Precedence.new(type: :left, precedence: precedence)) + end + + def add_right(sym, precedence) + set_precedence(sym, Precedence.new(type: :right, precedence: precedence)) + end + + def add_precedence(sym, precedence) + set_precedence(sym, Precedence.new(type: :precedence, precedence: precedence)) + end + + def set_precedence(sym, precedence) + raise "" if sym.nterm? + sym.precedence = precedence + end + + def set_union(code, lineno) + @union = Union.new(code: code, lineno: lineno) + end + + def add_rule_builder(builder) + @rule_builders << builder + end + + def add_parameterizing_rule(rule) + @parameterizing_rule_resolver.add_parameterizing_rule(rule) + end + + def parameterizing_rules + @parameterizing_rule_resolver.rules + end + + def insert_before_parameterizing_rules(rules) + @parameterizing_rule_resolver.rules = rules + @parameterizing_rule_resolver.rules + end + + def prologue_first_lineno=(prologue_first_lineno) + @aux.prologue_first_lineno = prologue_first_lineno + end + + def prologue=(prologue) + @aux.prologue = prologue + end + + def epilogue_first_lineno=(epilogue_first_lineno) + @aux.epilogue_first_lineno = epilogue_first_lineno + end + + def epilogue=(epilogue) + @aux.epilogue = epilogue + end + + def prepare + normalize_rules + collect_symbols + set_lhs_and_rhs + fill_default_precedence + fill_symbols + fill_sym_to_rules + compute_nullable + compute_first_set + end + + # TODO: More validation methods + # + # * Validation for no_declared_type_reference + def validate! + @symbols_resolver.validate! + validate_rule_lhs_is_nterm! + end + + def find_rules_by_symbol!(sym) + find_rules_by_symbol(sym) || (raise "Rules for #{sym} not found") + end + + def find_rules_by_symbol(sym) + @sym_to_rules[sym.number] + end + + private + + def compute_nullable + @rules.each do |rule| + case + when rule.empty_rule? + rule.nullable = true + when rule.rhs.any?(&:term) + rule.nullable = false + else + # noop + end + end + + while true do + rs = @rules.select {|e| e.nullable.nil? } + nts = nterms.select {|e| e.nullable.nil? } + rule_count_1 = rs.count + nterm_count_1 = nts.count + + rs.each do |rule| + if rule.rhs.all?(&:nullable) + rule.nullable = true + end + end + + nts.each do |nterm| + find_rules_by_symbol!(nterm).each do |rule| + if rule.nullable + nterm.nullable = true + end + end + end + + rule_count_2 = @rules.count {|e| e.nullable.nil? } + nterm_count_2 = nterms.count {|e| e.nullable.nil? } + + if (rule_count_1 == rule_count_2) && (nterm_count_1 == nterm_count_2) + break + end + end + + rules.select {|r| r.nullable.nil? }.each do |rule| + rule.nullable = false + end + + nterms.select {|e| e.nullable.nil? }.each do |nterm| + nterm.nullable = false + end + end + + def compute_first_set + terms.each do |term| + term.first_set = Set.new([term]).freeze + term.first_set_bitmap = Lrama::Bitmap.from_array([term.number]) + end + + nterms.each do |nterm| + nterm.first_set = Set.new([]).freeze + nterm.first_set_bitmap = Lrama::Bitmap.from_array([]) + end + + while true do + changed = false + + @rules.each do |rule| + rule.rhs.each do |r| + if rule.lhs.first_set_bitmap | r.first_set_bitmap != rule.lhs.first_set_bitmap + changed = true + rule.lhs.first_set_bitmap = rule.lhs.first_set_bitmap | r.first_set_bitmap + end + + break unless r.nullable + end + end + + break unless changed + end + + nterms.each do |nterm| + nterm.first_set = Lrama::Bitmap.to_array(nterm.first_set_bitmap).map do |number| + find_symbol_by_number!(number) + end.to_set + end + end + + def setup_rules + @rule_builders.each do |builder| + builder.setup_rules(@parameterizing_rule_resolver) + end + end + + def append_special_symbols + # YYEMPTY (token_id: -2, number: -2) is added when a template is evaluated + # term = add_term(id: Token.new(Token::Ident, "YYEMPTY"), token_id: -2) + # term.number = -2 + # @empty_symbol = term + + # YYEOF + term = add_term(id: Lrama::Lexer::Token::Ident.new(s_value: "YYEOF"), alias_name: "\"end of file\"", token_id: 0) + term.number = 0 + term.eof_symbol = true + @eof_symbol = term + + # YYerror + term = add_term(id: Lrama::Lexer::Token::Ident.new(s_value: "YYerror"), alias_name: "error") + term.number = 1 + term.error_symbol = true + @error_symbol = term + + # YYUNDEF + term = add_term(id: Lrama::Lexer::Token::Ident.new(s_value: "YYUNDEF"), alias_name: "\"invalid token\"") + term.number = 2 + term.undef_symbol = true + @undef_symbol = term + + # $accept + term = add_nterm(id: Lrama::Lexer::Token::Ident.new(s_value: "$accept")) + term.accept_symbol = true + @accept_symbol = term + end + + def normalize_rules + # Add $accept rule to the top of rules + lineno = @rule_builders.first ? @rule_builders.first.line : 0 + @rules << Rule.new(id: @rule_counter.increment, _lhs: @accept_symbol.id, _rhs: [@rule_builders.first.lhs, @eof_symbol.id], token_code: nil, lineno: lineno) + + setup_rules + + @rule_builders.each do |builder| + builder.rules.each do |rule| + add_nterm(id: rule._lhs, tag: rule.lhs_tag) + @rules << rule + end + end + + @rules.sort_by!(&:id) + end + + # Collect symbols from rules + def collect_symbols + @rules.flat_map(&:_rhs).each do |s| + case s + when Lrama::Lexer::Token::Char + add_term(id: s) + when Lrama::Lexer::Token + # skip + else + raise "Unknown class: #{s}" + end + end + end + + def set_lhs_and_rhs + @rules.each do |rule| + rule.lhs = token_to_symbol(rule._lhs) if rule._lhs + + rule.rhs = rule._rhs.map do |t| + token_to_symbol(t) + end + end + end + + # Rule inherits precedence from the last term in RHS. + # + # https://www.gnu.org/software/bison/manual/html_node/How-Precedence.html + def fill_default_precedence + @rules.each do |rule| + # Explicitly specified precedence has the highest priority + next if rule.precedence_sym + + precedence_sym = nil + rule.rhs.each do |sym| + precedence_sym = sym if sym.term? + end + + rule.precedence_sym = precedence_sym + end + end + + def fill_symbols + fill_symbol_number + fill_nterm_type(@types) + fill_printer(@printers) + fill_destructor(@destructors) + fill_error_token(@error_tokens) + sort_by_number! + end + + def fill_sym_to_rules + @rules.each do |rule| + key = rule.lhs.number + @sym_to_rules[key] ||= [] + @sym_to_rules[key] << rule + end + end + + def validate_rule_lhs_is_nterm! + errors = [] + + rules.each do |rule| + next if rule.lhs.nterm? + + errors << "[BUG] LHS of #{rule} (line: #{rule.lineno}) is term. It should be nterm." + end + + return if errors.empty? + + raise errors.join("\n") + end + end +end diff --git a/tools/lrama/lib/lrama/grammar/auxiliary.rb b/tools/lrama/lib/lrama/grammar/auxiliary.rb new file mode 100644 index 000000000..933574b0f --- /dev/null +++ b/tools/lrama/lib/lrama/grammar/auxiliary.rb @@ -0,0 +1,7 @@ +module Lrama + class Grammar + # Grammar file information not used by States but by Output + class Auxiliary < Struct.new(:prologue_first_lineno, :prologue, :epilogue_first_lineno, :epilogue, keyword_init: true) + end + end +end diff --git a/tools/lrama/lib/lrama/grammar/binding.rb b/tools/lrama/lib/lrama/grammar/binding.rb new file mode 100644 index 000000000..e5ea3fb03 --- /dev/null +++ b/tools/lrama/lib/lrama/grammar/binding.rb @@ -0,0 +1,24 @@ +module Lrama + class Grammar + class Binding + attr_reader :actual_args, :count + + def initialize(parameterizing_rule, actual_args) + @parameters = parameterizing_rule.parameters + @actual_args = actual_args + @parameter_to_arg = @parameters.zip(actual_args).map do |param, arg| + [param.s_value, arg] + end.to_h + end + + def resolve_symbol(symbol) + if symbol.is_a?(Lexer::Token::InstantiateRule) + resolved_args = symbol.args.map { |arg| resolve_symbol(arg) } + Lrama::Lexer::Token::InstantiateRule.new(s_value: symbol.s_value, location: symbol.location, args: resolved_args, lhs_tag: symbol.lhs_tag) + else + @parameter_to_arg[symbol.s_value] || symbol + end + end + end + end +end diff --git a/tools/lrama/lib/lrama/grammar/code.rb b/tools/lrama/lib/lrama/grammar/code.rb new file mode 100644 index 000000000..3bad599da --- /dev/null +++ b/tools/lrama/lib/lrama/grammar/code.rb @@ -0,0 +1,51 @@ +require "forwardable" +require "lrama/grammar/code/destructor_code" +require "lrama/grammar/code/initial_action_code" +require "lrama/grammar/code/no_reference_code" +require "lrama/grammar/code/printer_code" +require "lrama/grammar/code/rule_action" + +module Lrama + class Grammar + class Code + extend Forwardable + + def_delegators "token_code", :s_value, :line, :column, :references + + attr_reader :type, :token_code + + def initialize(type:, token_code:) + @type = type + @token_code = token_code + end + + def ==(other) + self.class == other.class && + self.type == other.type && + self.token_code == other.token_code + end + + # $$, $n, @$, @n are translated to C code + def translated_code + t_code = s_value.dup + + references.reverse_each do |ref| + first_column = ref.first_column + last_column = ref.last_column + + str = reference_to_c(ref) + + t_code[first_column...last_column] = str + end + + return t_code + end + + private + + def reference_to_c(ref) + raise NotImplementedError.new("#reference_to_c is not implemented") + end + end + end +end diff --git a/tools/lrama/lib/lrama/grammar/code/destructor_code.rb b/tools/lrama/lib/lrama/grammar/code/destructor_code.rb new file mode 100644 index 000000000..70360eb90 --- /dev/null +++ b/tools/lrama/lib/lrama/grammar/code/destructor_code.rb @@ -0,0 +1,40 @@ +module Lrama + class Grammar + class Code + class DestructorCode < Code + def initialize(type:, token_code:, tag:) + super(type: type, token_code: token_code) + @tag = tag + end + + private + + # * ($$) *yyvaluep + # * (@$) *yylocationp + # * ($:$) error + # * ($1) error + # * (@1) error + # * ($:1) error + def reference_to_c(ref) + case + when ref.type == :dollar && ref.name == "$" # $$ + member = @tag.member + "((*yyvaluep).#{member})" + when ref.type == :at && ref.name == "$" # @$ + "(*yylocationp)" + when ref.type == :index && ref.name == "$" # $:$ + raise "$:#{ref.value} can not be used in #{type}." + when ref.type == :dollar # $n + raise "$#{ref.value} can not be used in #{type}." + when ref.type == :at # @n + raise "@#{ref.value} can not be used in #{type}." + when ref.type == :index # $:n + raise "$:#{ref.value} can not be used in #{type}." + else + raise "Unexpected. #{self}, #{ref}" + end + end + end + end + end +end diff --git a/tools/lrama/lib/lrama/grammar/code/initial_action_code.rb b/tools/lrama/lib/lrama/grammar/code/initial_action_code.rb new file mode 100644 index 000000000..a694f193c --- /dev/null +++ b/tools/lrama/lib/lrama/grammar/code/initial_action_code.rb @@ -0,0 +1,34 @@ +module Lrama + class Grammar + class Code + class InitialActionCode < Code + private + + # * ($$) yylval + # * (@$) yylloc + # * ($:$) error + # * ($1) error + # * (@1) error + # * ($:1) error + def reference_to_c(ref) + case + when ref.type == :dollar && ref.name == "$" # $$ + "yylval" + when ref.type == :at && ref.name == "$" # @$ + "yylloc" + when ref.type == :index && ref.name == "$" # $:$ + raise "$:#{ref.value} can not be used in initial_action." + when ref.type == :dollar # $n + raise "$#{ref.value} can not be used in initial_action." + when ref.type == :at # @n + raise "@#{ref.value} can not be used in initial_action." + when ref.type == :index # $:n + raise "$:#{ref.value} can not be used in initial_action." + else + raise "Unexpected. #{self}, #{ref}" + end + end + end + end + end +end diff --git a/tools/lrama/lib/lrama/grammar/code/no_reference_code.rb b/tools/lrama/lib/lrama/grammar/code/no_reference_code.rb new file mode 100644 index 000000000..6e614cc64 --- /dev/null +++ b/tools/lrama/lib/lrama/grammar/code/no_reference_code.rb @@ -0,0 +1,28 @@ +module Lrama + class Grammar + class Code + class NoReferenceCode < Code + private + + # * ($$) error + # * (@$) error + # * ($:$) error + # * ($1) error + # * (@1) error + # * ($:1) error + def reference_to_c(ref) + case + when ref.type == :dollar # $$, $n + raise "$#{ref.value} can not be used in #{type}." + when ref.type == :at # @$, @n + raise "@#{ref.value} can not be used in #{type}." + when ref.type == :index # $:$, $:n + raise "$:#{ref.value} can not be used in #{type}." + else + raise "Unexpected. #{self}, #{ref}" + end + end + end + end + end +end diff --git a/tools/lrama/lib/lrama/grammar/code/printer_code.rb b/tools/lrama/lib/lrama/grammar/code/printer_code.rb new file mode 100644 index 000000000..ffccd8939 --- /dev/null +++ b/tools/lrama/lib/lrama/grammar/code/printer_code.rb @@ -0,0 +1,40 @@ +module Lrama + class Grammar + class Code + class PrinterCode < Code + def initialize(type:, token_code:, tag:) + super(type: type, token_code: token_code) + @tag = tag + end + + private + + # * ($$) *yyvaluep + # * (@$) *yylocationp + # * ($:$) error + # * ($1) error + # * (@1) error + # * ($:1) error + def reference_to_c(ref) + case + when ref.type == :dollar && ref.name == "$" # $$ + member = @tag.member + "((*yyvaluep).#{member})" + when ref.type == :at && ref.name == "$" # @$ + "(*yylocationp)" + when ref.type == :index && ref.name == "$" # $:$ + raise "$:#{ref.value} can not be used in #{type}." + when ref.type == :dollar # $n + raise "$#{ref.value} can not be used in #{type}." + when ref.type == :at # @n + raise "@#{ref.value} can not be used in #{type}." + when ref.type == :index # $:n + raise "$:#{ref.value} can not be used in #{type}." + else + raise "Unexpected. #{self}, #{ref}" + end + end + end + end + end +end diff --git a/tools/lrama/lib/lrama/grammar/code/rule_action.rb b/tools/lrama/lib/lrama/grammar/code/rule_action.rb new file mode 100644 index 000000000..d3c0eab64 --- /dev/null +++ b/tools/lrama/lib/lrama/grammar/code/rule_action.rb @@ -0,0 +1,88 @@ +module Lrama + class Grammar + class Code + class RuleAction < Code + def initialize(type:, token_code:, rule:) + super(type: type, token_code: token_code) + @rule = rule + end + + private + + # * ($$) yyval + # * (@$) yyloc + # * ($:$) error + # * ($1) yyvsp[i] + # * (@1) yylsp[i] + # * ($:1) i - 1 + # + # + # Consider a rule like + # + # class: keyword_class { $1 } tSTRING { $2 + $3 } keyword_end { $class = $1 + $keyword_end } + # + # For the semantic action of original rule: + # + # "Rule" class: keyword_class { $1 } tSTRING { $2 + $3 } keyword_end { $class = $1 + $keyword_end } + # "Position in grammar" $1 $2 $3 $4 $5 + # "Index for yyvsp" -4 -3 -2 -1 0 + # "$:n" $:1 $:2 $:3 $:4 $:5 + # "index of $:n" -5 -4 -3 -2 -1 + # + # + # For the first midrule action: + # + # "Rule" class: keyword_class { $1 } tSTRING { $2 + $3 } keyword_end { $class = $1 + $keyword_end } + # "Position in grammar" $1 + # "Index for yyvsp" 0 + # "$:n" $:1 + def reference_to_c(ref) + case + when ref.type == :dollar && ref.name == "$" # $$ + tag = ref.ex_tag || lhs.tag + raise_tag_not_found_error(ref) unless tag + "(yyval.#{tag.member})" + when ref.type == :at && ref.name == "$" # @$ + "(yyloc)" + when ref.type == :index && ref.name == "$" # $:$ + raise "$:$ is not supported" + when ref.type == :dollar # $n + i = -position_in_rhs + ref.index + tag = ref.ex_tag || rhs[ref.index - 1].tag + raise_tag_not_found_error(ref) unless tag + "(yyvsp[#{i}].#{tag.member})" + when ref.type == :at # @n + i = -position_in_rhs + ref.index + "(yylsp[#{i}])" + when ref.type == :index # $:n + i = -position_in_rhs + ref.index + "(#{i} - 1)" + else + raise "Unexpected. #{self}, #{ref}" + end + end + + def position_in_rhs + # If rule is not derived rule, User Code is only action at + # the end of rule RHS. In such case, the action is located on + # `@rule.rhs.count`. + @rule.position_in_original_rule_rhs || @rule.rhs.count + end + + # If this is midrule action, RHS is a RHS of the original rule. + def rhs + (@rule.original_rule || @rule).rhs + end + + # Unlike `rhs`, LHS is always a LHS of the rule. + def lhs + @rule.lhs + end + + def raise_tag_not_found_error(ref) + raise "Tag is not specified for '$#{ref.value}' in '#{@rule}'" + end + end + end + end +end diff --git a/tools/lrama/lib/lrama/grammar/counter.rb b/tools/lrama/lib/lrama/grammar/counter.rb new file mode 100644 index 000000000..c13f4ec3e --- /dev/null +++ b/tools/lrama/lib/lrama/grammar/counter.rb @@ -0,0 +1,15 @@ +module Lrama + class Grammar + class Counter + def initialize(number) + @number = number + end + + def increment + n = @number + @number += 1 + n + end + end + end +end diff --git a/tools/lrama/lib/lrama/grammar/destructor.rb b/tools/lrama/lib/lrama/grammar/destructor.rb new file mode 100644 index 000000000..4b7059e92 --- /dev/null +++ b/tools/lrama/lib/lrama/grammar/destructor.rb @@ -0,0 +1,9 @@ +module Lrama + class Grammar + class Destructor < Struct.new(:ident_or_tags, :token_code, :lineno, keyword_init: true) + def translated_code(tag) + Code::DestructorCode.new(type: :destructor, token_code: token_code, tag: tag).translated_code + end + end + end +end diff --git a/tools/lrama/lib/lrama/grammar/error_token.rb b/tools/lrama/lib/lrama/grammar/error_token.rb new file mode 100644 index 000000000..8efde7df3 --- /dev/null +++ b/tools/lrama/lib/lrama/grammar/error_token.rb @@ -0,0 +1,9 @@ +module Lrama + class Grammar + class ErrorToken < Struct.new(:ident_or_tags, :token_code, :lineno, keyword_init: true) + def translated_code(tag) + Code::PrinterCode.new(type: :error_token, token_code: token_code, tag: tag).translated_code + end + end + end +end diff --git a/tools/lrama/lib/lrama/grammar/parameterizing_rule.rb b/tools/lrama/lib/lrama/grammar/parameterizing_rule.rb new file mode 100644 index 000000000..d371805f4 --- /dev/null +++ b/tools/lrama/lib/lrama/grammar/parameterizing_rule.rb @@ -0,0 +1,3 @@ +require_relative 'parameterizing_rule/resolver' +require_relative 'parameterizing_rule/rhs' +require_relative 'parameterizing_rule/rule' diff --git a/tools/lrama/lib/lrama/grammar/parameterizing_rule/resolver.rb b/tools/lrama/lib/lrama/grammar/parameterizing_rule/resolver.rb new file mode 100644 index 000000000..d8f3ae789 --- /dev/null +++ b/tools/lrama/lib/lrama/grammar/parameterizing_rule/resolver.rb @@ -0,0 +1,56 @@ +module Lrama + class Grammar + class ParameterizingRule + class Resolver + attr_accessor :rules, :created_lhs_list + + def initialize + @rules = [] + @created_lhs_list = [] + end + + def add_parameterizing_rule(rule) + @rules << rule + end + + def find_rule(token) + select_rules(@rules, token).last + end + + def find_inline(token) + @rules.select { |rule| rule.name == token.s_value && rule.is_inline }.last + end + + def created_lhs(lhs_s_value) + @created_lhs_list.reverse.find { |created_lhs| created_lhs.s_value == lhs_s_value } + end + + private + + def select_rules(rules, token) + rules = select_not_inline_rules(rules) + rules = select_rules_by_name(rules, token.rule_name) + rules = rules.select { |rule| rule.required_parameters_count == token.args_count } + if rules.empty? + raise "Invalid number of arguments. `#{token.rule_name}`" + else + rules + end + end + + def select_not_inline_rules(rules) + rules.select { |rule| !rule.is_inline } + end + + def select_rules_by_name(rules, rule_name) + rules = rules.select { |rule| rule.name == rule_name } + if rules.empty? + raise "Parameterizing rule does not exist. `#{rule_name}`" + else + rules + end + end + end + end + end +end diff --git a/tools/lrama/lib/lrama/grammar/parameterizing_rule/rhs.rb b/tools/lrama/lib/lrama/grammar/parameterizing_rule/rhs.rb new file mode 100644 index 000000000..3eb92f8ef --- /dev/null +++ b/tools/lrama/lib/lrama/grammar/parameterizing_rule/rhs.rb @@ -0,0 +1,37 @@ +module Lrama + class Grammar + class ParameterizingRule + class Rhs + attr_accessor :symbols, :user_code, :precedence_sym + + def initialize + @symbols = [] + @user_code = nil + @precedence_sym = nil + end + + def resolve_user_code(bindings) + return unless user_code + + var_to_arg = {} + symbols.each do |sym| + resolved_sym = bindings.resolve_symbol(sym) + if resolved_sym != sym + var_to_arg[sym.s_value] = resolved_sym.s_value + end + end + + var_to_arg.each do |var, arg| + user_code.references.each do |ref| + if ref.name == var + ref.name = arg + end + end + end + + return user_code + end + end + end + end +end diff --git a/tools/lrama/lib/lrama/grammar/parameterizing_rule/rule.rb b/tools/lrama/lib/lrama/grammar/parameterizing_rule/rule.rb new file mode 100644 index 000000000..38f0fca4e --- /dev/null +++ b/tools/lrama/lib/lrama/grammar/parameterizing_rule/rule.rb @@ -0,0 +1,18 @@ +module Lrama + class Grammar + class ParameterizingRule + class Rule + attr_reader :name, :parameters, :rhs_list, :required_parameters_count, :tag, :is_inline + + def initialize(name, parameters, rhs_list, tag: nil, is_inline: false) + @name = name + @parameters = parameters + @rhs_list = rhs_list + @tag = tag + @is_inline = is_inline + @required_parameters_count = parameters.count + end + end + end + end +end diff --git a/tools/lrama/lib/lrama/grammar/percent_code.rb b/tools/lrama/lib/lrama/grammar/percent_code.rb new file mode 100644 index 000000000..8cbc5aef2 --- /dev/null +++ b/tools/lrama/lib/lrama/grammar/percent_code.rb @@ -0,0 +1,12 @@ +module Lrama + class Grammar + class PercentCode + attr_reader :name, :code + + def initialize(name, code) + @name = name + @code = code + end + end + end +end diff --git a/tools/lrama/lib/lrama/grammar/precedence.rb b/tools/lrama/lib/lrama/grammar/precedence.rb new file mode 100644 index 000000000..fed739b3c --- /dev/null +++ b/tools/lrama/lib/lrama/grammar/precedence.rb @@ -0,0 +1,11 @@ +module Lrama + class Grammar + class Precedence < Struct.new(:type, :precedence, keyword_init: true) + include Comparable + + def <=>(other) + self.precedence <=> other.precedence + end + end + end +end diff --git a/tools/lrama/lib/lrama/grammar/printer.rb b/tools/lrama/lib/lrama/grammar/printer.rb new file mode 100644 index 000000000..8984a96e1 --- /dev/null +++ b/tools/lrama/lib/lrama/grammar/printer.rb @@ -0,0 +1,9 @@ +module Lrama + class Grammar + class Printer < Struct.new(:ident_or_tags, :token_code, :lineno, keyword_init: true) + def translated_code(tag) + Code::PrinterCode.new(type: :printer, token_code: token_code, tag: tag).translated_code + end + end + end +end diff --git a/tools/lrama/lib/lrama/grammar/reference.rb b/tools/lrama/lib/lrama/grammar/reference.rb new file mode 100644 index 000000000..c56e7673a --- /dev/null +++ b/tools/lrama/lib/lrama/grammar/reference.rb @@ -0,0 +1,14 @@ +module Lrama + class Grammar + # type: :dollar or :at + # name: String (e.g. $$, $foo, $expr.right) + # number: Integer (e.g. $1) + # index: Integer + # ex_tag: "$1" (Optional) + class Reference < Struct.new(:type, :name, :number, :index, :ex_tag, :first_column, :last_column, keyword_init: true) + def value + name || number + end + end + end +end diff --git a/tools/lrama/lib/lrama/grammar/rule.rb b/tools/lrama/lib/lrama/grammar/rule.rb new file mode 100644 index 000000000..0e06edc80 --- /dev/null +++ b/tools/lrama/lib/lrama/grammar/rule.rb @@ -0,0 +1,60 @@ +module Lrama + class Grammar + # _rhs holds original RHS element. Use rhs to refer to Symbol. + class Rule < Struct.new(:id, :_lhs, :lhs, :lhs_tag, :_rhs, :rhs, :token_code, :position_in_original_rule_rhs, :nullable, :precedence_sym, :lineno, keyword_init: true) + attr_accessor :original_rule + + def ==(other) + self.class == other.class && + self.lhs == other.lhs && + self.lhs_tag == other.lhs_tag && + self.rhs == other.rhs && + self.token_code == other.token_code && + self.position_in_original_rule_rhs == other.position_in_original_rule_rhs && + self.nullable == other.nullable && + self.precedence_sym == other.precedence_sym && + self.lineno == other.lineno + end + + # TODO: Change this to display_name + def to_s + l = lhs.id.s_value + r = empty_rule? ? "ε" : rhs.map {|r| r.id.s_value }.join(" ") + + "#{l} -> #{r}" + end + + # Used by #user_actions + def as_comment + l = lhs.id.s_value + r = empty_rule? ? "%empty" : rhs.map(&:display_name).join(" ") + + "#{l}: #{r}" + end + + def with_actions + "#{to_s} {#{token_code&.s_value}}" + end + + # opt_nl: ε <-- empty_rule + # | '\n' <-- not empty_rule + def empty_rule? + rhs.empty? + end + + def precedence + precedence_sym&.precedence + end + + def initial_rule? + id == 0 + end + + def translated_code + return nil unless token_code + + Code::RuleAction.new(type: :rule_action, token_code: token_code, rule: self).translated_code + end + end + end +end diff --git a/tools/lrama/lib/lrama/grammar/rule_builder.rb b/tools/lrama/lib/lrama/grammar/rule_builder.rb new file mode 100644 index 000000000..ccb41e67f --- /dev/null +++ b/tools/lrama/lib/lrama/grammar/rule_builder.rb @@ -0,0 +1,268 @@ +module Lrama + class Grammar + class RuleBuilder + attr_accessor :lhs, :line + attr_reader :lhs_tag, :rhs, :user_code, :precedence_sym + + def initialize(rule_counter, midrule_action_counter, position_in_original_rule_rhs = nil, lhs_tag: nil, skip_preprocess_references: false) + @rule_counter = rule_counter + @midrule_action_counter = midrule_action_counter + @position_in_original_rule_rhs = position_in_original_rule_rhs + @skip_preprocess_references = skip_preprocess_references + + @lhs = nil + @lhs_tag = lhs_tag + @rhs = [] + @user_code = nil + @precedence_sym = nil + @line = nil + @rules = [] + @rule_builders_for_parameterizing_rules = [] + @rule_builders_for_derived_rules = [] + @rule_builders_for_inline_rules = [] + @parameterizing_rules = [] + @inline_rules = [] + @midrule_action_rules = [] + end + + def add_rhs(rhs) + if !@line + @line = rhs.line + end + + flush_user_code + + @rhs << rhs + end + + def user_code=(user_code) + if !@line + @line = user_code&.line + end + + flush_user_code + + @user_code = user_code + end + + def precedence_sym=(precedence_sym) + flush_user_code + + @precedence_sym = precedence_sym + end + + def complete_input + freeze_rhs + end + + def setup_rules(parameterizing_rule_resolver) + preprocess_references unless @skip_preprocess_references + if rhs.any? { |token| parameterizing_rule_resolver.find_inline(token) } + resolve_inline(parameterizing_rule_resolver) + else + process_rhs(parameterizing_rule_resolver) + end + build_rules + end + + def rules + @parameterizing_rules + @inline_rules + @midrule_action_rules + @rules + end + + private + + def freeze_rhs + @rhs.freeze + end + + def preprocess_references + numberize_references + end + + def build_rules + tokens = @replaced_rhs + + if tokens + rule = Rule.new( + id: @rule_counter.increment, _lhs: lhs, _rhs: tokens, lhs_tag: lhs_tag, token_code: user_code, + position_in_original_rule_rhs: @position_in_original_rule_rhs, precedence_sym: precedence_sym, lineno: line + ) + @rules = [rule] + @parameterizing_rules = @rule_builders_for_parameterizing_rules.map do |rule_builder| + rule_builder.rules + end.flatten + @midrule_action_rules = @rule_builders_for_derived_rules.map do |rule_builder| + rule_builder.rules + end.flatten + @midrule_action_rules.each do |r| + r.original_rule = rule + end + else + @inline_rules = @rule_builders_for_inline_rules.map do |rule_builder| + rule_builder.rules + end.flatten + end + end + + # rhs is a mixture of variety type of tokens like `Ident`, `InstantiateRule`, `UserCode` and so on. + # `#process_rhs` replaces some kind of tokens to `Ident` so that all `@replaced_rhs` are `Ident` or `Char`. + def process_rhs(parameterizing_rule_resolver) + return if @replaced_rhs + + @replaced_rhs = [] + + rhs.each_with_index do |token, i| + case token + when Lrama::Lexer::Token::Char + @replaced_rhs << token + when Lrama::Lexer::Token::Ident + @replaced_rhs << token + when Lrama::Lexer::Token::InstantiateRule + parameterizing_rule = parameterizing_rule_resolver.find_rule(token) + raise "Unexpected token. #{token}" unless parameterizing_rule + + bindings = Binding.new(parameterizing_rule, token.args) + lhs_s_value = lhs_s_value(token, bindings) + if (created_lhs = parameterizing_rule_resolver.created_lhs(lhs_s_value)) + @replaced_rhs << created_lhs + else + lhs_token = Lrama::Lexer::Token::Ident.new(s_value: lhs_s_value, location: token.location) + @replaced_rhs << lhs_token + parameterizing_rule_resolver.created_lhs_list << lhs_token + parameterizing_rule.rhs_list.each do |r| + rule_builder = RuleBuilder.new(@rule_counter, @midrule_action_counter, lhs_tag: token.lhs_tag || parameterizing_rule.tag) + rule_builder.lhs = lhs_token + r.symbols.each { |sym| rule_builder.add_rhs(bindings.resolve_symbol(sym)) } + rule_builder.line = line + rule_builder.precedence_sym = r.precedence_sym + rule_builder.user_code = r.resolve_user_code(bindings) + rule_builder.complete_input + rule_builder.setup_rules(parameterizing_rule_resolver) + @rule_builders_for_parameterizing_rules << rule_builder + end + end + when Lrama::Lexer::Token::UserCode + prefix = token.referred ? "@" : "$@" + tag = token.tag || lhs_tag + new_token = Lrama::Lexer::Token::Ident.new(s_value: prefix + @midrule_action_counter.increment.to_s) + @replaced_rhs << new_token + + rule_builder = RuleBuilder.new(@rule_counter, @midrule_action_counter, i, lhs_tag: tag, skip_preprocess_references: true) + rule_builder.lhs = new_token + rule_builder.user_code = token + rule_builder.complete_input + rule_builder.setup_rules(parameterizing_rule_resolver) + + @rule_builders_for_derived_rules << rule_builder + else + raise "Unexpected token. #{token}" + end + end + end + + def lhs_s_value(token, bindings) + s_values = token.args.map do |arg| + resolved = bindings.resolve_symbol(arg) + if resolved.is_a?(Lexer::Token::InstantiateRule) + [resolved.s_value, resolved.args.map(&:s_value)] + else + resolved.s_value + end + end + "#{token.rule_name}_#{s_values.join('_')}" + end + + def resolve_inline(parameterizing_rule_resolver) + rhs.each_with_index do |token, i| + if inline_rule = parameterizing_rule_resolver.find_inline(token) + inline_rule.rhs_list.each_with_index do |inline_rhs| + rule_builder = RuleBuilder.new(@rule_counter, @midrule_action_counter, lhs_tag: lhs_tag, skip_preprocess_references: true) + resolve_inline_rhs(rule_builder, inline_rhs, i) + rule_builder.lhs = lhs + rule_builder.line = line + rule_builder.user_code = replace_inline_user_code(inline_rhs, i) + rule_builder.complete_input + rule_builder.setup_rules(parameterizing_rule_resolver) + @rule_builders_for_inline_rules << rule_builder + end + end + end + end + + def resolve_inline_rhs(rule_builder, inline_rhs, index) + rhs.each_with_index do |token, i| + if index == i + inline_rhs.symbols.each { |sym| rule_builder.add_rhs(sym) } + else + rule_builder.add_rhs(token) + end + end + end + + def replace_inline_user_code(inline_rhs, index) + return user_code if inline_rhs.user_code.nil? + return user_code if user_code.nil? + + code = user_code.s_value.gsub(/\$#{index + 1}/, inline_rhs.user_code.s_value) + Lrama::Lexer::Token::UserCode.new(s_value: code, location: user_code.location) + end + + def numberize_references + # Bison n'th component is 1-origin + (rhs + [user_code]).compact.each.with_index(1) do |token, i| + next unless token.is_a?(Lrama::Lexer::Token::UserCode) + + token.references.each do |ref| + ref_name = ref.name + + if ref_name + if ref_name == '$' + ref.name = '$' + else + candidates = ([lhs] + rhs).each_with_index.select {|token, _i| token.referred_by?(ref_name) } + + if candidates.size >= 2 + token.invalid_ref(ref, "Referring symbol `#{ref_name}` is duplicated.") + end + + unless (referring_symbol = candidates.first) + token.invalid_ref(ref, "Referring symbol `#{ref_name}` is not found.") + end + + if referring_symbol[1] == 0 # Refers to LHS + ref.name = '$' + else + ref.number = referring_symbol[1] + end + end + end + + if ref.number + # TODO: When Inlining is implemented, for example, if `$1` is expanded to multiple RHS tokens, + # `$2` needs to access `$2 + n` to actually access it. So, after the Inlining implementation, + # it needs resolves from number to index. + ref.index = ref.number + end + + # TODO: Need to check index of @ too? + next if ref.type == :at + + if ref.index + # TODO: Prohibit $0 even so Bison allows it? + # See: https://www.gnu.org/software/bison/manual/html_node/Actions.html + token.invalid_ref(ref, "Can not refer following component. #{ref.index} >= #{i}.") if ref.index >= i + rhs[ref.index - 1].referred = true + end + end + end + end + + def flush_user_code + if (c = @user_code) + @rhs << c + @user_code = nil + end + end + end + end +end diff --git a/tools/lrama/lib/lrama/grammar/stdlib.y b/tools/lrama/lib/lrama/grammar/stdlib.y new file mode 100644 index 000000000..d6e89c908 --- /dev/null +++ b/tools/lrama/lib/lrama/grammar/stdlib.y @@ -0,0 +1,122 @@ +/********************************************************************** + + stdlib.y + + This is lrama's standard library. It provides a number of + parameterizing rule definitions, such as options and lists, + that should be useful in a number of situations. + +**********************************************************************/ + +// ------------------------------------------------------------------- +// Options + +/* + * program: option(number) + * + * => + * + * program: option_number + * option_number: %empty + * option_number: number + */ +%rule option(X): /* empty */ + | X + ; + +// ------------------------------------------------------------------- +// Sequences + +/* + * program: preceded(opening, X) + * + * => + * + * program: preceded_opening_X + * preceded_opening_X: opening X + */ +%rule preceded(opening, X): opening X { $$ = $2; } + ; + +/* + * program: terminated(X, closing) + * + * => + * + * program: terminated_X_closing + * terminated_X_closing: X closing + */ +%rule terminated(X, closing): X closing { $$ = $1; } + ; + +/* + * program: delimited(opening, X, closing) + * + * => + * + * program: delimited_opening_X_closing + * delimited_opening_X_closing: opening X closing + */ +%rule delimited(opening, X, closing): opening X closing { $$ = $2; } + ; + +// ------------------------------------------------------------------- +// Lists + +/* + * program: list(number) + * + * => + * + * program: list_number + * list_number: %empty + * list_number: list_number number + */ +%rule list(X): /* empty */ + | list(X) X + ; + +/* + * program: nonempty_list(number) + * + * => + * + * program: nonempty_list_number + * nonempty_list_number: number + * nonempty_list_number: nonempty_list_number number + */ +%rule nonempty_list(X): X + | nonempty_list(X) X + ; + +/* + * program: separated_nonempty_list(comma, number) + * + * => + * + * program: separated_nonempty_list_comma_number + * separated_nonempty_list_comma_number: number + * separated_nonempty_list_comma_number: separated_nonempty_list_comma_number comma number + */ +%rule separated_nonempty_list(separator, X): X + | separated_nonempty_list(separator, X) separator X + ; + +/* + * program: separated_list(comma, number) + * + * => + * + * program: separated_list_comma_number + * separated_list_comma_number: option_separated_nonempty_list_comma_number + * option_separated_nonempty_list_comma_number: %empty + * option_separated_nonempty_list_comma_number: separated_nonempty_list_comma_number + * separated_nonempty_list_comma_number: number + * separated_nonempty_list_comma_number: comma separated_nonempty_list_comma_number number + */ +%rule separated_list(separator, X): option(separated_nonempty_list(separator, X)) + ; + +%% + +%union{}; diff --git a/tools/lrama/lib/lrama/grammar/symbol.rb b/tools/lrama/lib/lrama/grammar/symbol.rb new file mode 100644 index 000000000..deb67ad9a --- /dev/null +++ b/tools/lrama/lib/lrama/grammar/symbol.rb @@ -0,0 +1,103 @@ +# Symbol is both of nterm and term +# `number` is both for nterm and term +# `token_id` is tokentype for term, internal sequence number for nterm +# +# TODO: Add validation for ASCII code range for Token::Char + +module Lrama + class Grammar + class Symbol + attr_accessor :id, :alias_name, :tag, :number, :token_id, :nullable, :precedence, + :printer, :destructor, :error_token, :first_set, :first_set_bitmap + attr_reader :term + attr_writer :eof_symbol, :error_symbol, :undef_symbol, :accept_symbol + + def initialize(id:, term:, alias_name: nil, number: nil, tag: nil, token_id: nil, nullable: nil, precedence: nil, printer: nil, destructor: nil) + @id = id + @alias_name = alias_name + @number = number + @tag = tag + @term = term + @token_id = token_id + @nullable = nullable + @precedence = precedence + @printer = printer + @destructor = destructor + end + + def term? + term + end + + def nterm? + !term + end + + def eof_symbol? + !!@eof_symbol + end + + def error_symbol? + !!@error_symbol + end + + def undef_symbol? + !!@undef_symbol + end + + def accept_symbol? + !!@accept_symbol + end + + def display_name + alias_name || id.s_value + end + + # name for yysymbol_kind_t + # + # See: b4_symbol_kind_base + # @type var name: String + def enum_name + case + when accept_symbol? + name = "YYACCEPT" + when eof_symbol? + name = "YYEOF" + when term? && id.is_a?(Lrama::Lexer::Token::Char) + name = number.to_s + display_name + when term? && id.is_a?(Lrama::Lexer::Token::Ident) + name = id.s_value + when nterm? && (id.s_value.include?("$") || id.s_value.include?("@")) + name = number.to_s + id.s_value + when nterm? + name = id.s_value + else + raise "Unexpected #{self}" + end + + "YYSYMBOL_" + name.gsub(/\W+/, "_") + end + + # comment for yysymbol_kind_t + def comment + case + when accept_symbol? + # YYSYMBOL_YYACCEPT + id.s_value + when eof_symbol? + # YYEOF + alias_name + when (term? && 0 < token_id && token_id < 128) + # YYSYMBOL_3_backslash_, YYSYMBOL_14_ + alias_name || id.s_value + when id.s_value.include?("$") || id.s_value.include?("@") + # YYSYMBOL_21_1 + id.s_value + else + # YYSYMBOL_keyword_class, YYSYMBOL_strings_1 + alias_name || id.s_value + end + end + end + end +end diff --git a/tools/lrama/lib/lrama/grammar/symbols.rb b/tools/lrama/lib/lrama/grammar/symbols.rb new file mode 100644 index 000000000..cc9b4ec55 --- /dev/null +++ b/tools/lrama/lib/lrama/grammar/symbols.rb @@ -0,0 +1 @@ +require_relative "symbols/resolver" diff --git a/tools/lrama/lib/lrama/grammar/symbols/resolver.rb b/tools/lrama/lib/lrama/grammar/symbols/resolver.rb new file mode 100644 index 000000000..1788ed63f --- /dev/null +++ b/tools/lrama/lib/lrama/grammar/symbols/resolver.rb @@ -0,0 +1,293 @@ +module Lrama + class Grammar + class Symbols + class Resolver + attr_reader :terms, :nterms + + def initialize + @terms = [] + @nterms = [] + end + + def symbols + @symbols ||= (@terms + @nterms) + end + + def sort_by_number! + symbols.sort_by!(&:number) + end + + def add_term(id:, alias_name: nil, tag: nil, token_id: nil, replace: false) + if token_id && (sym = find_symbol_by_token_id(token_id)) + if replace + sym.id = id + sym.alias_name = alias_name + sym.tag = tag + end + + return sym + end + + if (sym = find_symbol_by_id(id)) + return sym + end + + @symbols = nil + term = Symbol.new( + id: id, alias_name: alias_name, number: nil, tag: tag, + term: true, token_id: token_id, nullable: false + ) + @terms << term + term + end + + def add_nterm(id:, alias_name: nil, tag: nil) + return if find_symbol_by_id(id) + + @symbols = nil + nterm = Symbol.new( + id: id, alias_name: alias_name, number: nil, tag: tag, + term: false, token_id: nil, nullable: nil, + ) + @nterms << nterm + nterm + end + + def find_symbol_by_s_value(s_value) + symbols.find { |s| s.id.s_value == s_value } + end + + def find_symbol_by_s_value!(s_value) + find_symbol_by_s_value(s_value) || (raise "Symbol not found. value: `#{s_value}`") + end + + def find_symbol_by_id(id) + symbols.find do |s| + s.id == id || s.alias_name == id.s_value + end + end + + def find_symbol_by_id!(id) + find_symbol_by_id(id) || (raise "Symbol not found. #{id}") + end + + def find_symbol_by_token_id(token_id) + symbols.find {|s| s.token_id == token_id } + end + + def find_symbol_by_number!(number) + sym = symbols[number] + + raise "Symbol not found. number: `#{number}`" unless sym + raise "[BUG] Symbol number mismatch. #{number}, #{sym}" if sym.number != number + + sym + end + + def fill_symbol_number + # YYEMPTY = -2 + # YYEOF = 0 + # YYerror = 1 + # YYUNDEF = 2 + @number = 3 + fill_terms_number + fill_nterms_number + end + + def fill_nterm_type(types) + types.each do |type| + nterm = find_nterm_by_id!(type.id) + nterm.tag = type.tag + end + end + + def fill_printer(printers) + symbols.each do |sym| + printers.each do |printer| + printer.ident_or_tags.each do |ident_or_tag| + case ident_or_tag + when Lrama::Lexer::Token::Ident + sym.printer = printer if sym.id == ident_or_tag + when Lrama::Lexer::Token::Tag + sym.printer = printer if sym.tag == ident_or_tag + else + raise "Unknown token type. #{printer}" + end + end + end + end + end + + def fill_destructor(destructors) + symbols.each do |sym| + destructors.each do |destructor| + destructor.ident_or_tags.each do |ident_or_tag| + case ident_or_tag + when Lrama::Lexer::Token::Ident + sym.destructor = destructor if sym.id == ident_or_tag + when Lrama::Lexer::Token::Tag + sym.destructor = destructor if sym.tag == ident_or_tag + else + raise "Unknown token type. #{destructor}" + end + end + end + end + end + + def fill_error_token(error_tokens) + symbols.each do |sym| + error_tokens.each do |token| + token.ident_or_tags.each do |ident_or_tag| + case ident_or_tag + when Lrama::Lexer::Token::Ident + sym.error_token = token if sym.id == ident_or_tag + when Lrama::Lexer::Token::Tag + sym.error_token = token if sym.tag == ident_or_tag + else + raise "Unknown token type. #{token}" + end + end + end + end + end + + def token_to_symbol(token) + case token + when Lrama::Lexer::Token + find_symbol_by_id!(token) + else + raise "Unknown class: #{token}" + end + end + + def validate! + validate_number_uniqueness! + validate_alias_name_uniqueness! + end + + private + + def find_nterm_by_id!(id) + @nterms.find do |s| + s.id == id + end || (raise "Symbol not found. #{id}") + end + + def fill_terms_number + # Character literal in grammar file has + # token id corresponding to ASCII code by default, + # so start token_id from 256. + token_id = 256 + + @terms.each do |sym| + while used_numbers[@number] do + @number += 1 + end + + if sym.number.nil? + sym.number = @number + used_numbers[@number] = true + @number += 1 + end + + # If id is Token::Char, it uses ASCII code + if sym.token_id.nil? + if sym.id.is_a?(Lrama::Lexer::Token::Char) + # Ignore ' on the both sides + case sym.id.s_value[1..-2] + when "\\b" + sym.token_id = 8 + when "\\f" + sym.token_id = 12 + when "\\n" + sym.token_id = 10 + when "\\r" + sym.token_id = 13 + when "\\t" + sym.token_id = 9 + when "\\v" + sym.token_id = 11 + when "\"" + sym.token_id = 34 + when "'" + sym.token_id = 39 + when "\\\\" + sym.token_id = 92 + when /\A\\(\d+)\z/ + unless (id = Integer($1, 8)).nil? + sym.token_id = id + else + raise "Unknown Char s_value #{sym}" + end + when /\A(.)\z/ + unless (id = $1&.bytes&.first).nil? + sym.token_id = id + else + raise "Unknown Char s_value #{sym}" + end + else + raise "Unknown Char s_value #{sym}" + end + else + sym.token_id = token_id + token_id += 1 + end + end + end + end + + def fill_nterms_number + token_id = 0 + + @nterms.each do |sym| + while used_numbers[@number] do + @number += 1 + end + + if sym.number.nil? + sym.number = @number + used_numbers[@number] = true + @number += 1 + end + + if sym.token_id.nil? + sym.token_id = token_id + token_id += 1 + end + end + end + + def used_numbers + return @used_numbers if defined?(@used_numbers) + + @used_numbers = {} + symbols.map(&:number).each do |n| + @used_numbers[n] = true + end + @used_numbers + end + + def validate_number_uniqueness! + invalid = symbols.group_by(&:number).select do |number, syms| + syms.count > 1 + end + + return if invalid.empty? + + raise "Symbol number is duplicated. #{invalid}" + end + + def validate_alias_name_uniqueness! + invalid = symbols.select(&:alias_name).group_by(&:alias_name).select do |alias_name, syms| + syms.count > 1 + end + + return if invalid.empty? + + raise "Symbol alias name is duplicated. #{invalid}" + end + end + end + end +end diff --git a/tools/lrama/lib/lrama/grammar/type.rb b/tools/lrama/lib/lrama/grammar/type.rb new file mode 100644 index 000000000..6b4b0961a --- /dev/null +++ b/tools/lrama/lib/lrama/grammar/type.rb @@ -0,0 +1,18 @@ +module Lrama + class Grammar + class Type + attr_reader :id, :tag + + def initialize(id:, tag:) + @id = id + @tag = tag + end + + def ==(other) + self.class == other.class && + self.id == other.id && + self.tag == other.tag + end + end + end +end diff --git a/tools/lrama/lib/lrama/grammar/union.rb b/tools/lrama/lib/lrama/grammar/union.rb new file mode 100644 index 000000000..854bffb5c --- /dev/null +++ b/tools/lrama/lib/lrama/grammar/union.rb @@ -0,0 +1,10 @@ +module Lrama + class Grammar + class Union < Struct.new(:code, :lineno, keyword_init: true) + def braces_less_code + # Braces is already removed by lexer + code.s_value + end + end + end +end diff --git a/tools/lrama/lib/lrama/lexer.rb b/tools/lrama/lib/lrama/lexer.rb new file mode 100644 index 000000000..40622a51b --- /dev/null +++ b/tools/lrama/lib/lrama/lexer.rb @@ -0,0 +1,188 @@ +require "strscan" + +require "lrama/lexer/grammar_file" +require "lrama/lexer/location" +require "lrama/lexer/token" + +module Lrama + class Lexer + attr_reader :head_line, :head_column, :line + attr_accessor :status, :end_symbol + + SYMBOLS = ['%{', '%}', '%%', '{', '}', '\[', '\]', '\(', '\)', '\,', ':', '\|', ';'] + PERCENT_TOKENS = %w( + %union + %token + %type + %left + %right + %nonassoc + %expect + %define + %require + %printer + %destructor + %lex-param + %parse-param + %initial-action + %precedence + %prec + %error-token + %before-reduce + %after-reduce + %after-shift-error-token + %after-shift + %after-pop-stack + %empty + %code + %rule + %no-stdlib + %inline + ) + + def initialize(grammar_file) + @grammar_file = grammar_file + @scanner = StringScanner.new(grammar_file.text) + @head_column = @head = @scanner.pos + @head_line = @line = 1 + @status = :initial + @end_symbol = nil + end + + def next_token + case @status + when :initial + lex_token + when :c_declaration + lex_c_code + end + end + + def column + @scanner.pos - @head + end + + def location + Location.new( + grammar_file: @grammar_file, + first_line: @head_line, first_column: @head_column, + last_line: line, last_column: column + ) + end + + def lex_token + while !@scanner.eos? do + case + when @scanner.scan(/\n/) + newline + when @scanner.scan(/\s+/) + # noop + when @scanner.scan(/\/\*/) + lex_comment + when @scanner.scan(/\/\/.*(?\n)?/) + newline if @scanner[:newline] + else + break + end + end + + reset_first_position + + case + when @scanner.eos? + return + when @scanner.scan(/#{SYMBOLS.join('|')}/) + return [@scanner.matched, @scanner.matched] + when @scanner.scan(/#{PERCENT_TOKENS.join('|')}/) + return [@scanner.matched, @scanner.matched] + when @scanner.scan(/[\?\+\*]/) + return [@scanner.matched, @scanner.matched] + when @scanner.scan(/<\w+>/) + return [:TAG, Lrama::Lexer::Token::Tag.new(s_value: @scanner.matched, location: location)] + when @scanner.scan(/'.'/) + return [:CHARACTER, Lrama::Lexer::Token::Char.new(s_value: @scanner.matched, location: location)] + when @scanner.scan(/'\\\\'|'\\b'|'\\t'|'\\f'|'\\r'|'\\n'|'\\v'|'\\13'/) + return [:CHARACTER, Lrama::Lexer::Token::Char.new(s_value: @scanner.matched, location: location)] + when @scanner.scan(/".*?"/) + return [:STRING, %Q(#{@scanner.matched})] + when @scanner.scan(/\d+/) + return [:INTEGER, Integer(@scanner.matched)] + when @scanner.scan(/([a-zA-Z_.][-a-zA-Z0-9_.]*)/) + token = Lrama::Lexer::Token::Ident.new(s_value: @scanner.matched, location: location) + type = + if @scanner.check(/\s*(\[\s*[a-zA-Z_.][-a-zA-Z0-9_.]*\s*\])?\s*:/) + :IDENT_COLON + else + :IDENTIFIER + end + return [type, token] + else + raise ParseError, "Unexpected token: #{@scanner.peek(10).chomp}." + end + end + + def lex_c_code + nested = 0 + code = '' + reset_first_position + + while !@scanner.eos? do + case + when @scanner.scan(/{/) + code += @scanner.matched + nested += 1 + when @scanner.scan(/}/) + if nested == 0 && @end_symbol == '}' + @scanner.unscan + return [:C_DECLARATION, Lrama::Lexer::Token::UserCode.new(s_value: code, location: location)] + else + code += @scanner.matched + nested -= 1 + end + when @scanner.check(/#{@end_symbol}/) + return [:C_DECLARATION, Lrama::Lexer::Token::UserCode.new(s_value: code, location: location)] + when @scanner.scan(/\n/) + code += @scanner.matched + newline + when @scanner.scan(/".*?"/) + code += %Q(#{@scanner.matched}) + @line += @scanner.matched.count("\n") + when @scanner.scan(/'.*?'/) + code += %Q(#{@scanner.matched}) + when @scanner.scan(/[^\"'\{\}\n]+/) + code += @scanner.matched + when @scanner.scan(/#{Regexp.escape(@end_symbol)}/) + code += @scanner.matched + else + code += @scanner.getch + end + end + raise ParseError, "Unexpected code: #{code}." + end + + private + + def lex_comment + while !@scanner.eos? do + case + when @scanner.scan(/\n/) + newline + when @scanner.scan(/\*\//) + return + else + @scanner.getch + end + end + end + + def reset_first_position + @head_line = line + @head_column = column + end + + def newline + @line += 1 + @head = @scanner.pos + end + end +end diff --git a/tools/lrama/lib/lrama/lexer/grammar_file.rb b/tools/lrama/lib/lrama/lexer/grammar_file.rb new file mode 100644 index 000000000..3d3368625 --- /dev/null +++ b/tools/lrama/lib/lrama/lexer/grammar_file.rb @@ -0,0 +1,31 @@ +module Lrama + class Lexer + class GrammarFile + class Text < String + def inspect + length <= 50 ? super : "#{self[0..47]}...".inspect + end + end + + attr_reader :path, :text + + def initialize(path, text) + @path = path + @text = Text.new(text).freeze + end + + def inspect + "<#{self.class}: @path=#{path}, @text=#{text.inspect}>" + end + + def ==(other) + self.class == other.class && + self.path == other.path + end + + def lines + @lines ||= text.split("\n") + end + end + end +end diff --git a/tools/lrama/lib/lrama/lexer/location.rb b/tools/lrama/lib/lrama/lexer/location.rb new file mode 100644 index 000000000..aefce3e16 --- /dev/null +++ b/tools/lrama/lib/lrama/lexer/location.rb @@ -0,0 +1,97 @@ +module Lrama + class Lexer + class Location + attr_reader :grammar_file, :first_line, :first_column, :last_line, :last_column + + def initialize(grammar_file:, first_line:, first_column:, last_line:, last_column:) + @grammar_file = grammar_file + @first_line = first_line + @first_column = first_column + @last_line = last_line + @last_column = last_column + end + + def ==(other) + self.class == other.class && + self.grammar_file == other.grammar_file && + self.first_line == other.first_line && + self.first_column == other.first_column && + self.last_line == other.last_line && + self.last_column == other.last_column + end + + def partial_location(left, right) + offset = -first_column + new_first_line = -1 + new_first_column = -1 + new_last_line = -1 + new_last_column = -1 + + _text.each.with_index do |line, index| + new_offset = offset + line.length + 1 + + if offset <= left && left <= new_offset + new_first_line = first_line + index + new_first_column = left - offset + end + + if offset <= right && right <= new_offset + new_last_line = first_line + index + new_last_column = right - offset + end + + offset = new_offset + end + + Location.new( + grammar_file: grammar_file, + first_line: new_first_line, first_column: new_first_column, + last_line: new_last_line, last_column: new_last_column + ) + end + + def to_s + "#{path} (#{first_line},#{first_column})-(#{last_line},#{last_column})" + end + + def generate_error_message(error_message) + <<~ERROR.chomp + #{path}:#{first_line}:#{first_column}: #{error_message} + #{line_with_carets} + ERROR + end + + def line_with_carets + <<~TEXT + #{text} + #{carets} + TEXT + end + + private + + def path + grammar_file.path + end + + def blanks + (text[0...first_column] or raise "#{first_column} is invalid").gsub(/[^\t]/, ' ') + end + + def carets + blanks + '^' * (last_column - first_column) + end + + def text + @text ||= _text.join("\n") + end + + def _text + @_text ||=begin + range = (first_line - 1)...last_line + grammar_file.lines[range] or raise "#{range} is invalid" + end + end + end + end +end diff --git a/tools/lrama/lib/lrama/lexer/token.rb b/tools/lrama/lib/lrama/lexer/token.rb new file mode 100644 index 000000000..59b49d5fb --- /dev/null +++ b/tools/lrama/lib/lrama/lexer/token.rb @@ -0,0 +1,56 @@ +require 'lrama/lexer/token/char' +require 'lrama/lexer/token/ident' +require 'lrama/lexer/token/instantiate_rule' +require 'lrama/lexer/token/tag' +require 'lrama/lexer/token/user_code' + +module Lrama + class Lexer + class Token + attr_reader :s_value, :location + attr_accessor :alias_name, :referred + + def initialize(s_value:, alias_name: nil, location: nil) + s_value.freeze + @s_value = s_value + @alias_name = alias_name + @location = location + end + + def to_s + "value: `#{s_value}`, location: #{location}" + end + + def referred_by?(string) + [self.s_value, self.alias_name].compact.include?(string) + end + + def ==(other) + self.class == other.class && self.s_value == other.s_value + end + + def first_line + location.first_line + end + alias :line :first_line + + def first_column + location.first_column + end + alias :column :first_column + + def last_line + location.last_line + end + + def last_column + location.last_column + end + + def invalid_ref(ref, message) + location = self.location.partial_location(ref.first_column, ref.last_column) + raise location.generate_error_message(message) + end + end + end +end diff --git a/tools/lrama/lib/lrama/lexer/token/char.rb b/tools/lrama/lib/lrama/lexer/token/char.rb new file mode 100644 index 000000000..ec3560ca0 --- /dev/null +++ b/tools/lrama/lib/lrama/lexer/token/char.rb @@ -0,0 +1,8 @@ +module Lrama + class Lexer + class Token + class Char < Token + end + end + end +end diff --git a/tools/lrama/lib/lrama/lexer/token/ident.rb b/tools/lrama/lib/lrama/lexer/token/ident.rb new file mode 100644 index 000000000..e576eaecc --- /dev/null +++ b/tools/lrama/lib/lrama/lexer/token/ident.rb @@ -0,0 +1,8 @@ +module Lrama + class Lexer + class Token + class Ident < Token + end + end + end +end diff --git a/tools/lrama/lib/lrama/lexer/token/instantiate_rule.rb b/tools/lrama/lib/lrama/lexer/token/instantiate_rule.rb new file mode 100644 index 000000000..1c4d1095c --- /dev/null +++ b/tools/lrama/lib/lrama/lexer/token/instantiate_rule.rb @@ -0,0 +1,23 @@ +module Lrama + class Lexer + class Token + class InstantiateRule < Token + attr_reader :args, :lhs_tag + + def initialize(s_value:, alias_name: nil, location: nil, args: [], lhs_tag: nil) + super s_value: s_value, alias_name: alias_name, location: location + @args = args + @lhs_tag = lhs_tag + end + + def rule_name + s_value + end + + def args_count + args.count + end + end + end + end +end diff --git a/tools/lrama/lib/lrama/lexer/token/tag.rb b/tools/lrama/lib/lrama/lexer/token/tag.rb new file mode 100644 index 000000000..e54d77391 --- /dev/null +++ b/tools/lrama/lib/lrama/lexer/token/tag.rb @@ -0,0 +1,12 @@ +module Lrama + class Lexer + class Token + class Tag < Token + # Omit "<>" + def member + s_value[1..-2] or raise "Unexpected Tag format (#{s_value})" + end + end + end + end +end diff --git a/tools/lrama/lib/lrama/lexer/token/user_code.rb b/tools/lrama/lib/lrama/lexer/token/user_code.rb new file mode 100644 index 000000000..4d487bf01 --- /dev/null +++ b/tools/lrama/lib/lrama/lexer/token/user_code.rb @@ -0,0 +1,77 @@ +require "strscan" + +module Lrama + class Lexer + class Token + class UserCode < Token + attr_accessor :tag + + def references + @references ||= _references + end + + private + + def _references + scanner = StringScanner.new(s_value) + references = [] + + while !scanner.eos? do + case + when reference = scan_reference(scanner) + references << reference + when scanner.scan(/\/\*/) + scanner.scan_until(/\*\//) + else + scanner.getch + end + end + + references + end + + def scan_reference(scanner) + start = scanner.pos + case + # $ references + # It need to wrap an identifier with brackets to use ".-" for identifiers + when scanner.scan(/\$(<[a-zA-Z0-9_]+>)?\$/) # $$, $$ + tag = scanner[1] ? Lrama::Lexer::Token::Tag.new(s_value: scanner[1]) : nil + return Lrama::Grammar::Reference.new(type: :dollar, name: "$", ex_tag: tag, first_column: start, last_column: scanner.pos) + when scanner.scan(/\$(<[a-zA-Z0-9_]+>)?(\d+)/) # $1, $2, $1 + tag = scanner[1] ? Lrama::Lexer::Token::Tag.new(s_value: scanner[1]) : nil + return Lrama::Grammar::Reference.new(type: :dollar, number: Integer(scanner[2]), index: Integer(scanner[2]), ex_tag: tag, first_column: start, last_column: scanner.pos) + when scanner.scan(/\$(<[a-zA-Z0-9_]+>)?([a-zA-Z_][a-zA-Z0-9_]*)/) # $foo, $expr, $program (named reference without brackets) + tag = scanner[1] ? Lrama::Lexer::Token::Tag.new(s_value: scanner[1]) : nil + return Lrama::Grammar::Reference.new(type: :dollar, name: scanner[2], ex_tag: tag, first_column: start, last_column: scanner.pos) + when scanner.scan(/\$(<[a-zA-Z0-9_]+>)?\[([a-zA-Z_.][-a-zA-Z0-9_.]*)\]/) # $[expr.right], $[expr-right], $[expr.right] (named reference with brackets) + tag = scanner[1] ? Lrama::Lexer::Token::Tag.new(s_value: scanner[1]) : nil + return Lrama::Grammar::Reference.new(type: :dollar, name: scanner[2], ex_tag: tag, first_column: start, last_column: scanner.pos) + + # @ references + # It need to wrap an identifier with brackets to use ".-" for identifiers + when scanner.scan(/@\$/) # @$ + return Lrama::Grammar::Reference.new(type: :at, name: "$", first_column: start, last_column: scanner.pos) + when scanner.scan(/@(\d+)/) # @1 + return Lrama::Grammar::Reference.new(type: :at, number: Integer(scanner[1]), index: Integer(scanner[1]), first_column: start, last_column: scanner.pos) + when scanner.scan(/@([a-zA-Z][a-zA-Z0-9_]*)/) # @foo, @expr (named reference without brackets) + return Lrama::Grammar::Reference.new(type: :at, name: scanner[1], first_column: start, last_column: scanner.pos) + when scanner.scan(/@\[([a-zA-Z_.][-a-zA-Z0-9_.]*)\]/) # @[expr.right], @[expr-right] (named reference with brackets) + return Lrama::Grammar::Reference.new(type: :at, name: scanner[1], first_column: start, last_column: scanner.pos) + + # $: references + when scanner.scan(/\$:\$/) # $:$ + return Lrama::Grammar::Reference.new(type: :index, name: "$", first_column: start, last_column: scanner.pos) + when scanner.scan(/\$:(\d+)/) # $:1 + return Lrama::Grammar::Reference.new(type: :index, number: Integer(scanner[1]), first_column: start, last_column: scanner.pos) + when scanner.scan(/\$:([a-zA-Z_][a-zA-Z0-9_]*)/) # $:foo, $:expr (named reference without brackets) + return Lrama::Grammar::Reference.new(type: :index, name: scanner[1], first_column: start, last_column: scanner.pos) + when scanner.scan(/\$:\[([a-zA-Z_.][-a-zA-Z0-9_.]*)\]/) # $:[expr.right], $:[expr-right] (named reference with brackets) + return Lrama::Grammar::Reference.new(type: :index, name: scanner[1], first_column: start, last_column: scanner.pos) + + end + end + end + end + end +end diff --git a/tools/lrama/lib/lrama/option_parser.rb b/tools/lrama/lib/lrama/option_parser.rb new file mode 100644 index 000000000..1e4d448fd --- /dev/null +++ b/tools/lrama/lib/lrama/option_parser.rb @@ -0,0 +1,142 @@ +require 'optparse' + +module Lrama + # Handle option parsing for the command line interface. + class OptionParser + def initialize + @options = Options.new + @trace = [] + @report = [] + end + + def parse(argv) + parse_by_option_parser(argv) + + @options.trace_opts = validate_trace(@trace) + @options.report_opts = validate_report(@report) + @options.grammar_file = argv.shift + + if !@options.grammar_file + abort "File should be specified\n" + end + + if @options.grammar_file == '-' + @options.grammar_file = argv.shift or abort "File name for STDIN should be specified\n" + else + @options.y = File.open(@options.grammar_file, 'r') + end + + if !@report.empty? && @options.report_file.nil? && @options.grammar_file + @options.report_file = File.dirname(@options.grammar_file) + "/" + File.basename(@options.grammar_file, ".*") + ".output" + end + + if !@options.header_file && @options.header + case + when @options.outfile + @options.header_file = File.dirname(@options.outfile) + "/" + File.basename(@options.outfile, ".*") + ".h" + when @options.grammar_file + @options.header_file = File.dirname(@options.grammar_file) + "/" + File.basename(@options.grammar_file, ".*") + ".h" + end + end + + @options + end + + private + + def parse_by_option_parser(argv) + ::OptionParser.new do |o| + o.banner = <<~BANNER + Lrama is LALR (1) parser generator written by Ruby. + + Usage: lrama [options] FILE + BANNER + o.separator '' + o.separator 'STDIN mode:' + o.separator 'lrama [options] - FILE read grammar from STDIN' + o.separator '' + o.separator 'Tuning the Parser:' + o.on('-S', '--skeleton=FILE', 'specify the skeleton to use') {|v| @options.skeleton = v } + o.on('-t', 'reserved, do nothing') { } + o.on('--debug', 'display debugging outputs of internal parser') {|v| @options.debug = true } + o.separator '' + o.separator 'Output:' + o.on('-H', '--header=[FILE]', 'also produce a header file named FILE') {|v| @options.header = true; @options.header_file = v } + o.on('-d', 'also produce a header file') { @options.header = true } + o.on('-r', '--report=THINGS', Array, 'also produce details on the automaton') {|v| @report = v } + o.on_tail '' + o.on_tail 'Valid Reports:' + o.on_tail " #{VALID_REPORTS.join(' ')}" + + o.on('--report-file=FILE', 'also produce details on the automaton output to a file named FILE') {|v| @options.report_file = v } + o.on('-o', '--output=FILE', 'leave output to FILE') {|v| @options.outfile = v } + + o.on('--trace=THINGS', Array, 'also output trace logs at runtime') {|v| @trace = v } + o.on_tail '' + o.on_tail 'Valid Traces:' + o.on_tail " #{VALID_TRACES.join(' ')}" + + o.on('-v', 'reserved, do nothing') { } + o.separator '' + o.separator 'Error Recovery:' + o.on('-e', 'enable error recovery') {|v| @options.error_recovery = true } + o.separator '' + o.separator 'Other options:' + o.on('-V', '--version', "output version information and exit") {|v| puts "lrama #{Lrama::VERSION}"; exit 0 } + o.on('-h', '--help', "display this help and exit") {|v| puts o; exit 0 } + o.on_tail + o.parse!(argv) + end + end + + BISON_REPORTS = %w[states itemsets lookaheads solved counterexamples cex all none] + OTHER_REPORTS = %w[verbose] + NOT_SUPPORTED_REPORTS = %w[cex none] + VALID_REPORTS = BISON_REPORTS + OTHER_REPORTS - NOT_SUPPORTED_REPORTS + + def validate_report(report) + list = VALID_REPORTS + h = { grammar: true } + + report.each do |r| + if list.include?(r) + h[r.to_sym] = true + else + raise "Invalid report option \"#{r}\"." + end + end + + if h[:all] + (BISON_REPORTS - NOT_SUPPORTED_REPORTS).each do |r| + h[r.to_sym] = true + end + + h.delete(:all) + end + + return h + end + + VALID_TRACES = %w[ + none locations scan parse automaton bitsets + closure grammar rules actions resource + sets muscles tools m4-early m4 skeleton time + ielr cex all + ] + + def validate_trace(trace) + list = VALID_TRACES + h = {} + + trace.each do |t| + if list.include?(t) + h[t.to_sym] = true + else + raise "Invalid trace option \"#{t}\"." + end + end + + return h + end + end +end diff --git a/tools/lrama/lib/lrama/options.rb b/tools/lrama/lib/lrama/options.rb new file mode 100644 index 000000000..739ca16f5 --- /dev/null +++ b/tools/lrama/lib/lrama/options.rb @@ -0,0 +1,24 @@ +module Lrama + # Command line options. + class Options + attr_accessor :skeleton, :header, :header_file, + :report_file, :outfile, + :error_recovery, :grammar_file, + :trace_opts, :report_opts, :y, + :debug + + def initialize + @skeleton = "bison/yacc.c" + @header = false + @header_file = nil + @report_file = nil + @outfile = "y.tab.c" + @error_recovery = false + @grammar_file = nil + @trace_opts = nil + @report_opts = nil + @y = STDIN + @debug = false + end + end +end diff --git a/tools/lrama/lib/lrama/output.rb b/tools/lrama/lib/lrama/output.rb new file mode 100644 index 000000000..642c8b470 --- /dev/null +++ b/tools/lrama/lib/lrama/output.rb @@ -0,0 +1,490 @@ +require "erb" +require "forwardable" +require "lrama/report/duration" + +module Lrama + class Output + extend Forwardable + include Report::Duration + + attr_reader :grammar_file_path, :context, :grammar, :error_recovery, :include_header + + def_delegators "@context", :yyfinal, :yylast, :yyntokens, :yynnts, :yynrules, :yynstates, + :yymaxutok, :yypact_ninf, :yytable_ninf + + def_delegators "@grammar", :eof_symbol, :error_symbol, :undef_symbol, :accept_symbol + + def initialize( + out:, output_file_path:, template_name:, grammar_file_path:, + context:, grammar:, header_out: nil, header_file_path: nil, error_recovery: false + ) + @out = out + @output_file_path = output_file_path + @template_name = template_name + @grammar_file_path = grammar_file_path + @header_out = header_out + @header_file_path = header_file_path + @context = context + @grammar = grammar + @error_recovery = error_recovery + @include_header = header_file_path ? header_file_path.sub("./", "") : nil + end + + if ERB.instance_method(:initialize).parameters.last.first == :key + def self.erb(input) + ERB.new(input, trim_mode: '-') + end + else + def self.erb(input) + ERB.new(input, nil, '-') + end + end + + def render_partial(file) + render_template(partial_file(file)) + end + + def render + report_duration(:render) do + tmp = eval_template(template_file, @output_file_path) + @out << tmp + + if @header_file_path + tmp = eval_template(header_template_file, @header_file_path) + + if @header_out + @header_out << tmp + else + File.write(@header_file_path, tmp) + end + end + end + end + + # A part of b4_token_enums + def token_enums + str = "" + + @context.yytokentype.each do |s_value, token_id, display_name| + s = sprintf("%s = %d%s", s_value, token_id, token_id == yymaxutok ? "" : ",") + + if display_name + str << sprintf(" %-30s /* %s */\n", s, display_name) + else + str << sprintf(" %s\n", s) + end + end + + str + end + + # b4_symbol_enum + def symbol_enum + str = "" + + last_sym_number = @context.yysymbol_kind_t.last[1] + @context.yysymbol_kind_t.each do |s_value, sym_number, display_name| + s = sprintf("%s = %d%s", s_value, sym_number, (sym_number == last_sym_number) ? "" : ",") + + if display_name + str << sprintf(" %-40s /* %s */\n", s, display_name) + else + str << sprintf(" %s\n", s) + end + end + + str + end + + def yytranslate + int_array_to_string(@context.yytranslate) + end + + def yytranslate_inverted + int_array_to_string(@context.yytranslate_inverted) + end + + def yyrline + int_array_to_string(@context.yyrline) + end + + def yytname + string_array_to_string(@context.yytname) + " YY_NULLPTR" + end + + # b4_int_type_for + def int_type_for(ary) + min = ary.min + max = ary.max + + case + when (-127 <= min && min <= 127) && (-127 <= max && max <= 127) + "yytype_int8" + when (0 <= min && min <= 255) && (0 <= max && max <= 255) + "yytype_uint8" + when (-32767 <= min && min <= 32767) && (-32767 <= max && max <= 32767) + "yytype_int16" + when (0 <= min && min <= 65535) && (0 <= max && max <= 65535) + "yytype_uint16" + else + "int" + end + end + + def symbol_actions_for_printer + str = "" + + @grammar.symbols.each do |sym| + next unless sym.printer + + str << <<-STR + case #{sym.enum_name}: /* #{sym.comment} */ +#line #{sym.printer.lineno} "#{@grammar_file_path}" + {#{sym.printer.translated_code(sym.tag)}} +#line [@oline@] [@ofile@] + break; + + STR + end + + str + end + + def symbol_actions_for_destructor + str = "" + + @grammar.symbols.each do |sym| + next unless sym.destructor + + str << <<-STR + case #{sym.enum_name}: /* #{sym.comment} */ +#line #{sym.destructor.lineno} "#{@grammar_file_path}" + {#{sym.destructor.translated_code(sym.tag)}} +#line [@oline@] [@ofile@] + break; + + STR + end + + str + end + + # b4_user_initial_action + def user_initial_action(comment = "") + return "" unless @grammar.initial_action + + <<-STR + #{comment} +#line #{@grammar.initial_action.line} "#{@grammar_file_path}" + {#{@grammar.initial_action.translated_code}} + STR + end + + def after_shift_function(comment = "") + return "" unless @grammar.after_shift + + <<-STR + #{comment} +#line #{@grammar.after_shift.line} "#{@grammar_file_path}" + {#{@grammar.after_shift.s_value}(#{parse_param_name});} +#line [@oline@] [@ofile@] + STR + end + + def before_reduce_function(comment = "") + return "" unless @grammar.before_reduce + + <<-STR + #{comment} +#line #{@grammar.before_reduce.line} "#{@grammar_file_path}" + {#{@grammar.before_reduce.s_value}(yylen#{user_args});} +#line [@oline@] [@ofile@] + STR + end + + def after_reduce_function(comment = "") + return "" unless @grammar.after_reduce + + <<-STR + #{comment} +#line #{@grammar.after_reduce.line} "#{@grammar_file_path}" + {#{@grammar.after_reduce.s_value}(yylen#{user_args});} +#line [@oline@] [@ofile@] + STR + end + + def after_shift_error_token_function(comment = "") + return "" unless @grammar.after_shift_error_token + + <<-STR + #{comment} +#line #{@grammar.after_shift_error_token.line} "#{@grammar_file_path}" + {#{@grammar.after_shift_error_token.s_value}(#{parse_param_name});} +#line [@oline@] [@ofile@] + STR + end + + def after_pop_stack_function(len, comment = "") + return "" unless @grammar.after_pop_stack + + <<-STR + #{comment} +#line #{@grammar.after_pop_stack.line} "#{@grammar_file_path}" + {#{@grammar.after_pop_stack.s_value}(#{len}#{user_args});} +#line [@oline@] [@ofile@] + STR + end + + def symbol_actions_for_error_token + str = "" + + @grammar.symbols.each do |sym| + next unless sym.error_token + + str << <<-STR + case #{sym.enum_name}: /* #{sym.comment} */ +#line #{sym.error_token.lineno} "#{@grammar_file_path}" + {#{sym.error_token.translated_code(sym.tag)}} +#line [@oline@] [@ofile@] + break; + + STR + end + + str + end + + # b4_user_actions + def user_actions + str = "" + + @context.states.rules.each do |rule| + next unless rule.token_code + + code = rule.token_code + spaces = " " * (code.column - 1) + + str << <<-STR + case #{rule.id + 1}: /* #{rule.as_comment} */ +#line #{code.line} "#{@grammar_file_path}" +#{spaces}{#{rule.translated_code}} +#line [@oline@] [@ofile@] + break; + + STR + end + + str << <<-STR + +#line [@oline@] [@ofile@] + STR + + str + end + + def omit_blanks(param) + param.strip + end + + # b4_parse_param + def parse_param + if @grammar.parse_param + omit_blanks(@grammar.parse_param) + else + "" + end + end + + def lex_param + if @grammar.lex_param + omit_blanks(@grammar.lex_param) + else + "" + end + end + + # b4_user_formals + def user_formals + if @grammar.parse_param + ", #{parse_param}" + else + "" + end + end + + # b4_user_args + def user_args + if @grammar.parse_param + ", #{parse_param_name}" + else + "" + end + end + + def extract_param_name(param) + param[/\b([a-zA-Z0-9_]+)(?=\s*\z)/] + end + + def parse_param_name + if @grammar.parse_param + extract_param_name(parse_param) + else + "" + end + end + + def lex_param_name + if @grammar.lex_param + extract_param_name(lex_param) + else + "" + end + end + + # b4_parse_param_use + def parse_param_use(val, loc) + str = <<-STR + YY_USE (#{val}); + YY_USE (#{loc}); + STR + + if @grammar.parse_param + str << " YY_USE (#{parse_param_name});" + end + + str + end + + # b4_yylex_formals + def yylex_formals + ary = ["&yylval", "&yylloc"] + + if @grammar.lex_param + ary << lex_param_name + end + + "(#{ary.join(', ')})" + end + + # b4_table_value_equals + def table_value_equals(table, value, literal, symbol) + if literal < table.min || table.max < literal + "0" + else + "((#{value}) == #{symbol})" + end + end + + # b4_yyerror_args + def yyerror_args + ary = ["&yylloc"] + + if @grammar.parse_param + ary << parse_param_name + end + + "#{ary.join(', ')}" + end + + def template_basename + File.basename(template_file) + end + + def aux + @grammar.aux + end + + def int_array_to_string(ary) + last = ary.count - 1 + + s = ary.each_with_index.each_slice(10).map do |slice| + str = " " + + slice.each do |e, i| + str << sprintf("%6d%s", e, (i == last) ? "" : ",") + end + + str + end + + s.join("\n") + end + + def spec_mapped_header_file + @header_file_path + end + + def b4_cpp_guard__b4_spec_mapped_header_file + if @header_file_path + "YY_YY_" + @header_file_path.gsub(/[^a-zA-Z_0-9]+/, "_").upcase + "_INCLUDED" + else + "" + end + end + + # b4_percent_code_get + def percent_code(name) + @grammar.percent_codes.select do |percent_code| + percent_code.name == name + end.map do |percent_code| + percent_code.code + end.join + end + + private + + def eval_template(file, path) + tmp = render_template(file) + replace_special_variables(tmp, path) + end + + def render_template(file) + erb = self.class.erb(File.read(file)) + erb.filename = file + erb.result_with_hash(context: @context, output: self) + end + + def template_file + File.join(template_dir, @template_name) + end + + def header_template_file + File.join(template_dir, "bison/yacc.h") + end + + def partial_file(file) + File.join(template_dir, file) + end + + def template_dir + File.expand_path("../../../template", __FILE__) + end + + def string_array_to_string(ary) + str = "" + tmp = " " + + ary.each do |s| + s = s.gsub('\\', '\\\\\\\\') + s = s.gsub('"', '\\"') + + if (tmp + s + " \"\",").length > 75 + str << tmp << "\n" + tmp = " \"#{s}\"," + else + tmp << " \"#{s}\"," + end + end + + str << tmp + end + + def replace_special_variables(str, ofile) + str.each_line.with_index(1).map do |line, i| + line.gsub!("[@oline@]", (i + 1).to_s) + line.gsub!("[@ofile@]", "\"#{ofile}\"") + line + end.join + end + end +end diff --git a/tools/lrama/lib/lrama/parser.rb b/tools/lrama/lib/lrama/parser.rb new file mode 100644 index 000000000..04603105b --- /dev/null +++ b/tools/lrama/lib/lrama/parser.rb @@ -0,0 +1,2234 @@ +# +# DO NOT MODIFY!!!! +# This file is automatically generated by Racc 1.7.3 +# from Racc grammar file "parser.y". +# + +###### racc/parser.rb begin +unless $".find {|p| p.end_with?('/racc/parser.rb')} +$".push "#{__dir__}/racc/parser.rb" +self.class.module_eval(<<'...end racc/parser.rb/module_eval...', 'racc/parser.rb', 1) +#-- +# Copyright (c) 1999-2006 Minero Aoki +# +# This program is free software. +# You can distribute/modify this program under the same terms of ruby. +# +# As a special exception, when this code is copied by Racc +# into a Racc output file, you may use that output file +# without restriction. +#++ + +unless $".find {|p| p.end_with?('/racc/info.rb')} +$".push "#{__dir__}/racc/info.rb" + +module Racc + VERSION = '1.7.3' + Version = VERSION + Copyright = 'Copyright (c) 1999-2006 Minero Aoki' +end + +end + + +unless defined?(NotImplementedError) + NotImplementedError = NotImplementError # :nodoc: +end + +module Racc + class ParseError < StandardError; end +end +unless defined?(::ParseError) + ParseError = Racc::ParseError # :nodoc: +end + +# Racc is a LALR(1) parser generator. +# It is written in Ruby itself, and generates Ruby programs. +# +# == Command-line Reference +# +# racc [-ofilename] [--output-file=filename] +# [-erubypath] [--executable=rubypath] +# [-v] [--verbose] +# [-Ofilename] [--log-file=filename] +# [-g] [--debug] +# [-E] [--embedded] +# [-l] [--no-line-convert] +# [-c] [--line-convert-all] +# [-a] [--no-omit-actions] +# [-C] [--check-only] +# [-S] [--output-status] +# [--version] [--copyright] [--help] grammarfile +# +# [+grammarfile+] +# Racc grammar file. Any extension is permitted. +# [-o+outfile+, --output-file=+outfile+] +# A filename for output. default is <+filename+>.tab.rb +# [-O+filename+, --log-file=+filename+] +# Place logging output in file +filename+. +# Default log file name is <+filename+>.output. +# [-e+rubypath+, --executable=+rubypath+] +# output executable file(mode 755). where +path+ is the Ruby interpreter. +# [-v, --verbose] +# verbose mode. create +filename+.output file, like yacc's y.output file. +# [-g, --debug] +# add debug code to parser class. To display debugging information, +# use this '-g' option and set @yydebug true in parser class. +# [-E, --embedded] +# Output parser which doesn't need runtime files (racc/parser.rb). +# [-F, --frozen] +# Output parser which declares frozen_string_literals: true +# [-C, --check-only] +# Check syntax of racc grammar file and quit. +# [-S, --output-status] +# Print messages time to time while compiling. +# [-l, --no-line-convert] +# turns off line number converting. +# [-c, --line-convert-all] +# Convert line number of actions, inner, header and footer. +# [-a, --no-omit-actions] +# Call all actions, even if an action is empty. +# [--version] +# print Racc version and quit. +# [--copyright] +# Print copyright and quit. +# [--help] +# Print usage and quit. +# +# == Generating Parser Using Racc +# +# To compile Racc grammar file, simply type: +# +# $ racc parse.y +# +# This creates Ruby script file "parse.tab.y". The -o option can change the output filename. +# +# == Writing A Racc Grammar File +# +# If you want your own parser, you have to write a grammar file. +# A grammar file contains the name of your parser class, grammar for the parser, +# user code, and anything else. +# When writing a grammar file, yacc's knowledge is helpful. +# If you have not used yacc before, Racc is not too difficult. +# +# Here's an example Racc grammar file. +# +# class Calcparser +# rule +# target: exp { print val[0] } +# +# exp: exp '+' exp +# | exp '*' exp +# | '(' exp ')' +# | NUMBER +# end +# +# Racc grammar files resemble yacc files. +# But (of course), this is Ruby code. +# yacc's $$ is the 'result', $0, $1... is +# an array called 'val', and $-1, $-2... is an array called '_values'. +# +# See the {Grammar File Reference}[rdoc-ref:lib/racc/rdoc/grammar.en.rdoc] for +# more information on grammar files. +# +# == Parser +# +# Then you must prepare the parse entry method. There are two types of +# parse methods in Racc, Racc::Parser#do_parse and Racc::Parser#yyparse +# +# Racc::Parser#do_parse is simple. +# +# It's yyparse() of yacc, and Racc::Parser#next_token is yylex(). +# This method must returns an array like [TOKENSYMBOL, ITS_VALUE]. +# EOF is [false, false]. +# (TOKENSYMBOL is a Ruby symbol (taken from String#intern) by default. +# If you want to change this, see the grammar reference. +# +# Racc::Parser#yyparse is little complicated, but useful. +# It does not use Racc::Parser#next_token, instead it gets tokens from any iterator. +# +# For example, yyparse(obj, :scan) causes +# calling +obj#scan+, and you can return tokens by yielding them from +obj#scan+. +# +# == Debugging +# +# When debugging, "-v" or/and the "-g" option is helpful. +# +# "-v" creates verbose log file (.output). +# "-g" creates a "Verbose Parser". +# Verbose Parser prints the internal status when parsing. +# But it's _not_ automatic. +# You must use -g option and set +@yydebug+ to +true+ in order to get output. +# -g option only creates the verbose parser. +# +# === Racc reported syntax error. +# +# Isn't there too many "end"? +# grammar of racc file is changed in v0.10. +# +# Racc does not use '%' mark, while yacc uses huge number of '%' marks.. +# +# === Racc reported "XXXX conflicts". +# +# Try "racc -v xxxx.y". +# It causes producing racc's internal log file, xxxx.output. +# +# === Generated parsers does not work correctly +# +# Try "racc -g xxxx.y". +# This command let racc generate "debugging parser". +# Then set @yydebug=true in your parser. +# It produces a working log of your parser. +# +# == Re-distributing Racc runtime +# +# A parser, which is created by Racc, requires the Racc runtime module; +# racc/parser.rb. +# +# Ruby 1.8.x comes with Racc runtime module, +# you need NOT distribute Racc runtime files. +# +# If you want to include the Racc runtime module with your parser. +# This can be done by using '-E' option: +# +# $ racc -E -omyparser.rb myparser.y +# +# This command creates myparser.rb which `includes' Racc runtime. +# Only you must do is to distribute your parser file (myparser.rb). +# +# Note: parser.rb is ruby license, but your parser is not. +# Your own parser is completely yours. +module Racc + + unless defined?(Racc_No_Extensions) + Racc_No_Extensions = false # :nodoc: + end + + class Parser + + Racc_Runtime_Version = ::Racc::VERSION + Racc_Runtime_Core_Version_R = ::Racc::VERSION + + begin + if Object.const_defined?(:RUBY_ENGINE) and RUBY_ENGINE == 'jruby' + require 'jruby' + require 'racc/cparse-jruby.jar' + com.headius.racc.Cparse.new.load(JRuby.runtime, false) + else + require 'racc/cparse' + end + + unless new.respond_to?(:_racc_do_parse_c, true) + raise LoadError, 'old cparse.so' + end + if Racc_No_Extensions + raise LoadError, 'selecting ruby version of racc runtime core' + end + + Racc_Main_Parsing_Routine = :_racc_do_parse_c # :nodoc: + Racc_YY_Parse_Method = :_racc_yyparse_c # :nodoc: + Racc_Runtime_Core_Version = Racc_Runtime_Core_Version_C # :nodoc: + Racc_Runtime_Type = 'c' # :nodoc: + rescue LoadError + Racc_Main_Parsing_Routine = :_racc_do_parse_rb + Racc_YY_Parse_Method = :_racc_yyparse_rb + Racc_Runtime_Core_Version = Racc_Runtime_Core_Version_R + Racc_Runtime_Type = 'ruby' + end + + def Parser.racc_runtime_type # :nodoc: + Racc_Runtime_Type + end + + def _racc_setup + @yydebug = false unless self.class::Racc_debug_parser + @yydebug = false unless defined?(@yydebug) + if @yydebug + @racc_debug_out = $stderr unless defined?(@racc_debug_out) + @racc_debug_out ||= $stderr + end + arg = self.class::Racc_arg + arg[13] = true if arg.size < 14 + arg + end + + def _racc_init_sysvars + @racc_state = [0] + @racc_tstack = [] + @racc_vstack = [] + + @racc_t = nil + @racc_val = nil + + @racc_read_next = true + + @racc_user_yyerror = false + @racc_error_status = 0 + end + + # The entry point of the parser. This method is used with #next_token. + # If Racc wants to get token (and its value), calls next_token. + # + # Example: + # def parse + # @q = [[1,1], + # [2,2], + # [3,3], + # [false, '$']] + # do_parse + # end + # + # def next_token + # @q.shift + # end + class_eval <<~RUBY, __FILE__, __LINE__ + 1 + def do_parse + #{Racc_Main_Parsing_Routine}(_racc_setup(), false) + end + RUBY + + # The method to fetch next token. + # If you use #do_parse method, you must implement #next_token. + # + # The format of return value is [TOKEN_SYMBOL, VALUE]. + # +token-symbol+ is represented by Ruby's symbol by default, e.g. :IDENT + # for 'IDENT'. ";" (String) for ';'. + # + # The final symbol (End of file) must be false. + def next_token + raise NotImplementedError, "#{self.class}\#next_token is not defined" + end + + def _racc_do_parse_rb(arg, in_debug) + action_table, action_check, action_default, action_pointer, + _, _, _, _, + _, _, token_table, * = arg + + _racc_init_sysvars + tok = act = i = nil + + catch(:racc_end_parse) { + while true + if i = action_pointer[@racc_state[-1]] + if @racc_read_next + if @racc_t != 0 # not EOF + tok, @racc_val = next_token() + unless tok # EOF + @racc_t = 0 + else + @racc_t = (token_table[tok] or 1) # error token + end + racc_read_token(@racc_t, tok, @racc_val) if @yydebug + @racc_read_next = false + end + end + i += @racc_t + unless i >= 0 and + act = action_table[i] and + action_check[i] == @racc_state[-1] + act = action_default[@racc_state[-1]] + end + else + act = action_default[@racc_state[-1]] + end + while act = _racc_evalact(act, arg) + ; + end + end + } + end + + # Another entry point for the parser. + # If you use this method, you must implement RECEIVER#METHOD_ID method. + # + # RECEIVER#METHOD_ID is a method to get next token. + # It must 'yield' the token, which format is [TOKEN-SYMBOL, VALUE]. + class_eval <<~RUBY, __FILE__, __LINE__ + 1 + def yyparse(recv, mid) + #{Racc_YY_Parse_Method}(recv, mid, _racc_setup(), false) + end + RUBY + + def _racc_yyparse_rb(recv, mid, arg, c_debug) + action_table, action_check, action_default, action_pointer, + _, _, _, _, + _, _, token_table, * = arg + + _racc_init_sysvars + + catch(:racc_end_parse) { + until i = action_pointer[@racc_state[-1]] + while act = _racc_evalact(action_default[@racc_state[-1]], arg) + ; + end + end + recv.__send__(mid) do |tok, val| + unless tok + @racc_t = 0 + else + @racc_t = (token_table[tok] or 1) # error token + end + @racc_val = val + @racc_read_next = false + + i += @racc_t + unless i >= 0 and + act = action_table[i] and + action_check[i] == @racc_state[-1] + act = action_default[@racc_state[-1]] + end + while act = _racc_evalact(act, arg) + ; + end + + while !(i = action_pointer[@racc_state[-1]]) || + ! @racc_read_next || + @racc_t == 0 # $ + unless i and i += @racc_t and + i >= 0 and + act = action_table[i] and + action_check[i] == @racc_state[-1] + act = action_default[@racc_state[-1]] + end + while act = _racc_evalact(act, arg) + ; + end + end + end + } + end + + ### + ### common + ### + + def _racc_evalact(act, arg) + action_table, action_check, _, action_pointer, + _, _, _, _, + _, _, _, shift_n, + reduce_n, * = arg + nerr = 0 # tmp + + if act > 0 and act < shift_n + # + # shift + # + if @racc_error_status > 0 + @racc_error_status -= 1 unless @racc_t <= 1 # error token or EOF + end + @racc_vstack.push @racc_val + @racc_state.push act + @racc_read_next = true + if @yydebug + @racc_tstack.push @racc_t + racc_shift @racc_t, @racc_tstack, @racc_vstack + end + + elsif act < 0 and act > -reduce_n + # + # reduce + # + code = catch(:racc_jump) { + @racc_state.push _racc_do_reduce(arg, act) + false + } + if code + case code + when 1 # yyerror + @racc_user_yyerror = true # user_yyerror + return -reduce_n + when 2 # yyaccept + return shift_n + else + raise '[Racc Bug] unknown jump code' + end + end + + elsif act == shift_n + # + # accept + # + racc_accept if @yydebug + throw :racc_end_parse, @racc_vstack[0] + + elsif act == -reduce_n + # + # error + # + case @racc_error_status + when 0 + unless arg[21] # user_yyerror + nerr += 1 + on_error @racc_t, @racc_val, @racc_vstack + end + when 3 + if @racc_t == 0 # is $ + # We're at EOF, and another error occurred immediately after + # attempting auto-recovery + throw :racc_end_parse, nil + end + @racc_read_next = true + end + @racc_user_yyerror = false + @racc_error_status = 3 + while true + if i = action_pointer[@racc_state[-1]] + i += 1 # error token + if i >= 0 and + (act = action_table[i]) and + action_check[i] == @racc_state[-1] + break + end + end + throw :racc_end_parse, nil if @racc_state.size <= 1 + @racc_state.pop + @racc_vstack.pop + if @yydebug + @racc_tstack.pop + racc_e_pop @racc_state, @racc_tstack, @racc_vstack + end + end + return act + + else + raise "[Racc Bug] unknown action #{act.inspect}" + end + + racc_next_state(@racc_state[-1], @racc_state) if @yydebug + + nil + end + + def _racc_do_reduce(arg, act) + _, _, _, _, + goto_table, goto_check, goto_default, goto_pointer, + nt_base, reduce_table, _, _, + _, use_result, * = arg + + state = @racc_state + vstack = @racc_vstack + tstack = @racc_tstack + + i = act * -3 + len = reduce_table[i] + reduce_to = reduce_table[i+1] + method_id = reduce_table[i+2] + void_array = [] + + tmp_t = tstack[-len, len] if @yydebug + tmp_v = vstack[-len, len] + tstack[-len, len] = void_array if @yydebug + vstack[-len, len] = void_array + state[-len, len] = void_array + + # tstack must be updated AFTER method call + if use_result + vstack.push __send__(method_id, tmp_v, vstack, tmp_v[0]) + else + vstack.push __send__(method_id, tmp_v, vstack) + end + tstack.push reduce_to + + racc_reduce(tmp_t, reduce_to, tstack, vstack) if @yydebug + + k1 = reduce_to - nt_base + if i = goto_pointer[k1] + i += state[-1] + if i >= 0 and (curstate = goto_table[i]) and goto_check[i] == k1 + return curstate + end + end + goto_default[k1] + end + + # This method is called when a parse error is found. + # + # ERROR_TOKEN_ID is an internal ID of token which caused error. + # You can get string representation of this ID by calling + # #token_to_str. + # + # ERROR_VALUE is a value of error token. + # + # value_stack is a stack of symbol values. + # DO NOT MODIFY this object. + # + # This method raises ParseError by default. + # + # If this method returns, parsers enter "error recovering mode". + def on_error(t, val, vstack) + raise ParseError, sprintf("parse error on value %s (%s)", + val.inspect, token_to_str(t) || '?') + end + + # Enter error recovering mode. + # This method does not call #on_error. + def yyerror + throw :racc_jump, 1 + end + + # Exit parser. + # Return value is +Symbol_Value_Stack[0]+. + def yyaccept + throw :racc_jump, 2 + end + + # Leave error recovering mode. + def yyerrok + @racc_error_status = 0 + end + + # For debugging output + def racc_read_token(t, tok, val) + @racc_debug_out.print 'read ' + @racc_debug_out.print tok.inspect, '(', racc_token2str(t), ') ' + @racc_debug_out.puts val.inspect + @racc_debug_out.puts + end + + def racc_shift(tok, tstack, vstack) + @racc_debug_out.puts "shift #{racc_token2str tok}" + racc_print_stacks tstack, vstack + @racc_debug_out.puts + end + + def racc_reduce(toks, sim, tstack, vstack) + out = @racc_debug_out + out.print 'reduce ' + if toks.empty? + out.print ' ' + else + toks.each {|t| out.print ' ', racc_token2str(t) } + end + out.puts " --> #{racc_token2str(sim)}" + racc_print_stacks tstack, vstack + @racc_debug_out.puts + end + + def racc_accept + @racc_debug_out.puts 'accept' + @racc_debug_out.puts + end + + def racc_e_pop(state, tstack, vstack) + @racc_debug_out.puts 'error recovering mode: pop token' + racc_print_states state + racc_print_stacks tstack, vstack + @racc_debug_out.puts + end + + def racc_next_state(curstate, state) + @racc_debug_out.puts "goto #{curstate}" + racc_print_states state + @racc_debug_out.puts + end + + def racc_print_stacks(t, v) + out = @racc_debug_out + out.print ' [' + t.each_index do |i| + out.print ' (', racc_token2str(t[i]), ' ', v[i].inspect, ')' + end + out.puts ' ]' + end + + def racc_print_states(s) + out = @racc_debug_out + out.print ' [' + s.each {|st| out.print ' ', st } + out.puts ' ]' + end + + def racc_token2str(tok) + self.class::Racc_token_to_s_table[tok] or + raise "[Racc Bug] can't convert token #{tok} to string" + end + + # Convert internal ID of token symbol to the string. + def token_to_str(t) + self.class::Racc_token_to_s_table[t] + end + + end + +end + +...end racc/parser.rb/module_eval... +end +###### racc/parser.rb end +module Lrama + class Parser < Racc::Parser + +module_eval(<<'...end parser.y/module_eval...', 'parser.y', 536) + +include Lrama::Report::Duration + +def initialize(text, path, debug = false) + @grammar_file = Lrama::Lexer::GrammarFile.new(path, text) + @yydebug = debug + @rule_counter = Lrama::Grammar::Counter.new(0) + @midrule_action_counter = Lrama::Grammar::Counter.new(1) +end + +def parse + report_duration(:parse) do + @lexer = Lrama::Lexer.new(@grammar_file) + @grammar = Lrama::Grammar.new(@rule_counter) + @precedence_number = 0 + reset_precs + do_parse + @grammar + end +end + +def next_token + @lexer.next_token +end + +def on_error(error_token_id, error_value, value_stack) + if error_value.is_a?(Lrama::Lexer::Token) + location = error_value.location + value = "'#{error_value.s_value}'" + else + location = @lexer.location + value = error_value.inspect + end + + error_message = "parse error on value #{value} (#{token_to_str(error_token_id) || '?'})" + + raise_parse_error(error_message, location) +end + +def on_action_error(error_message, error_value) + if error_value.is_a?(Lrama::Lexer::Token) + location = error_value.location + else + location = @lexer.location + end + + raise_parse_error(error_message, location) +end + +private + +def reset_precs + @prec_seen = false + @code_after_prec = false +end + +def begin_c_declaration(end_symbol) + @lexer.status = :c_declaration + @lexer.end_symbol = end_symbol +end + +def end_c_declaration + @lexer.status = :initial + @lexer.end_symbol = nil +end + +def raise_parse_error(error_message, location) + raise ParseError, location.generate_error_message(error_message) +end +...end parser.y/module_eval... +##### State transition tables begin ### + +racc_action_table = [ + 98, 51, 99, 163, 88, 79, 51, 51, 180, 163, + 79, 79, 51, 162, 180, 156, 79, 165, 157, 51, + 3, 50, 181, 165, 70, 51, 8, 50, 181, 79, + 75, 51, 6, 50, 7, 161, 82, 47, 51, 51, + 50, 50, 89, 82, 82, 166, 41, 51, 100, 50, + 182, 166, 82, 51, 48, 50, 182, 23, 25, 26, + 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, + 37, 38, 47, 51, 51, 50, 50, 93, 79, 197, + 51, 51, 50, 50, 79, 197, 51, 51, 50, 50, + 79, 197, 23, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 9, 51, 54, + 50, 14, 15, 16, 17, 18, 19, 54, 54, 20, + 21, 22, 23, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 51, 51, + 50, 50, 79, 197, 51, 51, 50, 50, 79, 197, + 51, 51, 50, 50, 79, 197, 51, 51, 50, 50, + 79, 79, 51, 51, 50, 50, 79, 79, 51, 51, + 50, 50, 79, 79, 51, 51, 50, 207, 79, 79, + 51, 51, 207, 207, 79, 79, 51, 51, 50, 50, + 79, 187, 188, 189, 96, 187, 188, 189, 96, 217, + 221, 229, 218, 218, 218, 51, 51, 50, 50, 187, + 188, 189, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 90, 94, 96, 101, 101, 101, 103, + 109, 113, 114, 117, 117, 117, 117, 120, 47, 124, + 125, 127, 129, 130, 131, 132, 133, 136, 140, 141, + 142, 143, 146, 147, 148, 150, 160, 168, 170, 171, + 172, 173, 174, 176, 177, 178, 146, 184, 192, 193, + 200, 160, 204, 176, 211, 160, 215, 216, 178, 176, + 226, 176, 228, 96, 96, 176 ] + +racc_action_check = [ + 49, 145, 49, 145, 39, 145, 159, 183, 159, 183, + 159, 183, 201, 144, 201, 139, 201, 145, 139, 33, + 1, 33, 159, 183, 33, 34, 3, 34, 201, 34, + 34, 35, 2, 35, 2, 144, 35, 9, 36, 37, + 36, 37, 39, 36, 37, 145, 7, 38, 49, 38, + 159, 183, 38, 15, 14, 15, 201, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 42, 69, 172, 69, 172, 42, 172, 172, + 173, 70, 173, 70, 173, 173, 174, 81, 174, 81, + 174, 174, 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 4, 82, 16, + 82, 4, 4, 4, 4, 4, 4, 17, 18, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 194, 109, + 194, 109, 194, 194, 198, 111, 198, 111, 198, 198, + 199, 117, 199, 117, 199, 199, 74, 75, 74, 75, + 74, 75, 114, 116, 114, 116, 114, 116, 137, 166, + 137, 166, 137, 166, 182, 184, 182, 184, 182, 184, + 204, 216, 204, 216, 204, 216, 218, 119, 218, 119, + 218, 164, 164, 164, 164, 179, 179, 179, 179, 208, + 214, 223, 208, 214, 223, 134, 138, 134, 138, 209, + 209, 209, 19, 20, 23, 25, 26, 27, 28, 29, + 30, 31, 32, 40, 45, 46, 53, 55, 56, 57, + 68, 72, 73, 80, 85, 86, 87, 88, 89, 95, + 96, 102, 104, 105, 106, 107, 108, 112, 120, 121, + 122, 123, 124, 125, 126, 128, 141, 149, 151, 152, + 153, 154, 155, 156, 157, 158, 161, 163, 167, 169, + 175, 178, 180, 186, 190, 200, 205, 207, 213, 217, + 220, 221, 222, 226, 228, 230 ] + +racc_action_pointer = [ + nil, 20, 22, 26, 98, nil, nil, 39, nil, 33, + nil, nil, nil, nil, 48, 50, 90, 98, 99, 207, + 194, nil, nil, 195, nil, 196, 197, 198, 213, 214, + 215, 216, 217, 16, 22, 28, 35, 36, 44, -1, + 221, nil, 68, nil, nil, 201, 174, nil, nil, -5, + nil, nil, nil, 207, nil, 208, 209, 210, nil, nil, + nil, nil, nil, nil, nil, nil, nil, nil, 222, 70, + 78, nil, 225, 224, 153, 154, nil, nil, nil, nil, + 225, 84, 105, nil, nil, 226, 227, 228, 197, 234, + nil, nil, nil, nil, nil, 197, 235, nil, nil, nil, + nil, nil, 239, nil, 240, 241, 242, 243, 244, 136, + nil, 142, 240, nil, 159, nil, 160, 148, nil, 184, + 243, 207, 239, 249, 206, 201, 252, nil, 253, nil, + nil, nil, nil, nil, 202, nil, nil, 165, 203, -26, + nil, 210, nil, nil, -10, -2, nil, nil, nil, 237, + nil, 238, 239, 240, 241, 242, 255, 259, 220, 3, + nil, 220, nil, 227, 143, nil, 166, 248, nil, 249, + nil, nil, 71, 77, 83, 228, nil, nil, 225, 147, + 232, nil, 171, 4, 172, nil, 265, nil, nil, nil, + 272, nil, nil, nil, 135, nil, nil, nil, 141, 147, + 229, 9, nil, nil, 177, 274, nil, 237, 158, 161, + nil, nil, nil, 233, 159, nil, 178, 271, 183, nil, + 260, 273, 262, 160, nil, nil, 232, nil, 233, nil, + 277, nil, nil ] + +racc_action_default = [ + -2, -138, -8, -138, -138, -3, -4, -138, 233, -138, + -9, -10, -11, -12, -138, -138, -138, -138, -138, -138, + -138, -24, -25, -138, -29, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -7, -123, -96, -98, -138, -120, -122, -13, -127, + -94, -95, -126, -15, -85, -16, -17, -138, -21, -26, + -30, -33, -36, -39, -40, -41, -42, -43, -44, -50, + -138, -53, -71, -45, -75, -138, -78, -80, -81, -135, + -46, -88, -138, -91, -93, -47, -48, -49, -138, -138, + -5, -1, -97, -124, -99, -138, -138, -14, -128, -129, + -130, -82, -138, -18, -138, -138, -138, -138, -138, -138, + -54, -51, -73, -72, -138, -79, -76, -138, -92, -89, + -138, -138, -138, -138, -104, -138, -138, -86, -138, -22, + -27, -31, -34, -37, -52, -55, -74, -77, -90, -138, + -58, -62, -6, -125, -100, -101, -105, -121, -83, -138, + -19, -138, -138, -138, -138, -138, -136, -138, -57, -60, + -63, -104, -103, -94, -120, -109, -138, -138, -87, -138, + -23, -28, -138, -138, -138, -138, -137, -59, -62, -120, + -94, -67, -138, -102, -138, -106, -136, -113, -114, -115, + -138, -112, -84, -20, -32, -131, -133, -134, -35, -38, + -62, -61, -64, -65, -138, -138, -70, -94, -138, -116, + -107, -110, -132, -56, -138, -68, -138, -136, -138, -118, + -138, -136, -138, -138, -108, -117, -120, -66, -120, -119, + -136, -69, -111 ] + +racc_goto_table = [ + 76, 95, 69, 52, 74, 158, 110, 175, 118, 119, + 145, 208, 1, 212, 186, 2, 43, 212, 212, 4, + 42, 72, 91, 84, 84, 84, 84, 5, 40, 203, + 122, 214, 80, 85, 86, 87, 10, 210, 11, 111, + 115, 76, 12, 223, 138, 116, 118, 183, 110, 92, + 53, 55, 56, 194, 198, 199, 13, 72, 72, 219, + 49, 97, 128, 169, 213, 118, 104, 151, 224, 84, + 84, 110, 227, 105, 152, 106, 153, 107, 134, 154, + 76, 232, 115, 108, 137, 155, 68, 73, 112, 135, + 139, 121, 201, 205, 222, 126, 167, 72, 102, 72, + 149, 144, 190, 115, 220, 84, 123, 84, nil, nil, + nil, 164, nil, nil, nil, nil, nil, nil, nil, 185, + nil, nil, 72, nil, nil, 179, 84, nil, nil, nil, + nil, nil, 191, nil, 202, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, nil, nil, 206, 164, + 209, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, nil, 179, nil, nil, + 209, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, 230, 209, 231, 225 ] + +racc_goto_check = [ + 43, 44, 33, 35, 49, 40, 34, 39, 56, 55, + 60, 46, 1, 64, 45, 2, 57, 64, 64, 3, + 4, 35, 5, 35, 35, 35, 35, 6, 7, 45, + 8, 46, 32, 32, 32, 32, 9, 39, 10, 33, + 43, 43, 11, 46, 55, 49, 56, 60, 34, 57, + 15, 15, 15, 21, 21, 21, 12, 35, 35, 45, + 13, 14, 16, 17, 40, 56, 18, 19, 39, 35, + 35, 34, 39, 22, 23, 24, 25, 26, 33, 27, + 43, 39, 43, 28, 49, 29, 30, 31, 36, 37, + 38, 41, 42, 47, 48, 51, 52, 35, 53, 35, + 54, 59, 61, 43, 62, 35, 63, 35, nil, nil, + nil, 43, nil, nil, nil, nil, nil, nil, nil, 44, + nil, nil, 35, nil, nil, 43, 35, nil, nil, nil, + nil, nil, 43, nil, 44, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, nil, nil, 43, 43, + 43, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, nil, 43, nil, nil, + 43, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, 44, 43, 44, 43 ] + +racc_goto_pointer = [ + nil, 12, 15, 17, 11, -20, 25, 22, -60, 32, + 34, 38, 52, 45, 12, 34, -41, -87, 8, -62, + nil, -119, 14, -56, 15, -55, 16, -53, 21, -48, + 53, 53, -3, -31, -63, -12, 16, -23, -30, -149, + -136, 2, -86, -34, -45, -150, -173, -88, -121, -30, + nil, -6, -52, 44, -27, -73, -73, 7, nil, -23, + -114, -63, -107, 13, -181 ] + +racc_goto_default = [ + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + 45, nil, nil, nil, nil, nil, nil, nil, nil, nil, + 24, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, 71, 77, nil, nil, nil, nil, + nil, 46, 159, 196, nil, nil, nil, nil, nil, nil, + 78, nil, nil, nil, nil, 81, 83, nil, 44, nil, + nil, nil, nil, nil, 195 ] + +racc_reduce_table = [ + 0, 0, :racc_error, + 5, 55, :_reduce_none, + 0, 56, :_reduce_none, + 2, 56, :_reduce_none, + 0, 61, :_reduce_4, + 0, 62, :_reduce_5, + 5, 60, :_reduce_6, + 2, 60, :_reduce_none, + 0, 57, :_reduce_8, + 2, 57, :_reduce_none, + 1, 63, :_reduce_none, + 1, 63, :_reduce_none, + 1, 63, :_reduce_none, + 2, 63, :_reduce_13, + 3, 63, :_reduce_none, + 2, 63, :_reduce_none, + 2, 63, :_reduce_16, + 2, 63, :_reduce_17, + 0, 70, :_reduce_18, + 0, 71, :_reduce_19, + 7, 63, :_reduce_20, + 0, 72, :_reduce_21, + 0, 73, :_reduce_22, + 6, 63, :_reduce_23, + 1, 63, :_reduce_24, + 1, 63, :_reduce_none, + 0, 76, :_reduce_26, + 0, 77, :_reduce_27, + 6, 64, :_reduce_28, + 1, 64, :_reduce_none, + 0, 78, :_reduce_30, + 0, 79, :_reduce_31, + 7, 64, :_reduce_32, + 0, 80, :_reduce_33, + 0, 81, :_reduce_34, + 7, 64, :_reduce_35, + 0, 82, :_reduce_36, + 0, 83, :_reduce_37, + 7, 64, :_reduce_38, + 2, 64, :_reduce_39, + 2, 64, :_reduce_40, + 2, 64, :_reduce_41, + 2, 64, :_reduce_42, + 2, 64, :_reduce_43, + 2, 74, :_reduce_none, + 2, 74, :_reduce_45, + 2, 74, :_reduce_46, + 2, 74, :_reduce_47, + 2, 74, :_reduce_48, + 2, 74, :_reduce_49, + 1, 84, :_reduce_50, + 2, 84, :_reduce_51, + 3, 84, :_reduce_52, + 1, 87, :_reduce_53, + 2, 87, :_reduce_54, + 3, 88, :_reduce_55, + 8, 65, :_reduce_56, + 5, 66, :_reduce_57, + 1, 92, :_reduce_58, + 3, 92, :_reduce_59, + 1, 94, :_reduce_60, + 3, 94, :_reduce_61, + 0, 96, :_reduce_62, + 1, 96, :_reduce_63, + 3, 96, :_reduce_64, + 3, 96, :_reduce_65, + 6, 96, :_reduce_66, + 0, 101, :_reduce_67, + 0, 102, :_reduce_68, + 7, 96, :_reduce_69, + 3, 96, :_reduce_70, + 0, 90, :_reduce_none, + 1, 90, :_reduce_none, + 0, 91, :_reduce_none, + 1, 91, :_reduce_none, + 1, 85, :_reduce_75, + 2, 85, :_reduce_76, + 3, 85, :_reduce_77, + 1, 103, :_reduce_78, + 2, 103, :_reduce_79, + 1, 97, :_reduce_none, + 1, 97, :_reduce_none, + 0, 105, :_reduce_82, + 0, 106, :_reduce_83, + 6, 69, :_reduce_84, + 0, 107, :_reduce_85, + 0, 108, :_reduce_86, + 5, 69, :_reduce_87, + 1, 86, :_reduce_88, + 2, 86, :_reduce_89, + 3, 86, :_reduce_90, + 1, 109, :_reduce_91, + 2, 109, :_reduce_92, + 1, 110, :_reduce_none, + 1, 89, :_reduce_94, + 1, 89, :_reduce_95, + 1, 58, :_reduce_none, + 2, 58, :_reduce_none, + 1, 111, :_reduce_none, + 2, 111, :_reduce_none, + 4, 112, :_reduce_100, + 1, 113, :_reduce_101, + 3, 113, :_reduce_102, + 2, 113, :_reduce_none, + 0, 114, :_reduce_104, + 1, 114, :_reduce_105, + 3, 114, :_reduce_106, + 4, 114, :_reduce_107, + 6, 114, :_reduce_108, + 0, 115, :_reduce_109, + 0, 116, :_reduce_110, + 8, 114, :_reduce_111, + 3, 114, :_reduce_112, + 1, 99, :_reduce_113, + 1, 99, :_reduce_114, + 1, 99, :_reduce_115, + 1, 100, :_reduce_116, + 3, 100, :_reduce_117, + 2, 100, :_reduce_118, + 4, 100, :_reduce_119, + 0, 98, :_reduce_none, + 3, 98, :_reduce_121, + 1, 95, :_reduce_none, + 0, 59, :_reduce_none, + 0, 117, :_reduce_124, + 3, 59, :_reduce_125, + 1, 67, :_reduce_none, + 0, 68, :_reduce_none, + 1, 68, :_reduce_none, + 1, 68, :_reduce_none, + 1, 68, :_reduce_none, + 1, 75, :_reduce_131, + 2, 75, :_reduce_132, + 1, 118, :_reduce_none, + 1, 118, :_reduce_none, + 1, 104, :_reduce_135, + 0, 93, :_reduce_none, + 1, 93, :_reduce_none ] + +racc_reduce_n = 138 + +racc_shift_n = 233 + +racc_token_table = { + false => 0, + :error => 1, + :C_DECLARATION => 2, + :CHARACTER => 3, + :IDENT_COLON => 4, + :IDENTIFIER => 5, + :INTEGER => 6, + :STRING => 7, + :TAG => 8, + "%%" => 9, + "%{" => 10, + "%}" => 11, + "%require" => 12, + "%expect" => 13, + "%define" => 14, + "%param" => 15, + "%lex-param" => 16, + "%parse-param" => 17, + "%code" => 18, + "{" => 19, + "}" => 20, + "%initial-action" => 21, + "%no-stdlib" => 22, + ";" => 23, + "%union" => 24, + "%destructor" => 25, + "%printer" => 26, + "%error-token" => 27, + "%after-shift" => 28, + "%before-reduce" => 29, + "%after-reduce" => 30, + "%after-shift-error-token" => 31, + "%after-pop-stack" => 32, + "%token" => 33, + "%type" => 34, + "%left" => 35, + "%right" => 36, + "%precedence" => 37, + "%nonassoc" => 38, + "%rule" => 39, + "(" => 40, + ")" => 41, + ":" => 42, + "%inline" => 43, + "," => 44, + "|" => 45, + "%empty" => 46, + "%prec" => 47, + "?" => 48, + "+" => 49, + "*" => 50, + "[" => 51, + "]" => 52, + "{...}" => 53 } + +racc_nt_base = 54 + +racc_use_result_var = true + +Racc_arg = [ + racc_action_table, + racc_action_check, + racc_action_default, + racc_action_pointer, + racc_goto_table, + racc_goto_check, + racc_goto_default, + racc_goto_pointer, + racc_nt_base, + racc_reduce_table, + racc_token_table, + racc_shift_n, + racc_reduce_n, + racc_use_result_var ] +Ractor.make_shareable(Racc_arg) if defined?(Ractor) + +Racc_token_to_s_table = [ + "$end", + "error", + "C_DECLARATION", + "CHARACTER", + "IDENT_COLON", + "IDENTIFIER", + "INTEGER", + "STRING", + "TAG", + "\"%%\"", + "\"%{\"", + "\"%}\"", + "\"%require\"", + "\"%expect\"", + "\"%define\"", + "\"%param\"", + "\"%lex-param\"", + "\"%parse-param\"", + "\"%code\"", + "\"{\"", + "\"}\"", + "\"%initial-action\"", + "\"%no-stdlib\"", + "\";\"", + "\"%union\"", + "\"%destructor\"", + "\"%printer\"", + "\"%error-token\"", + "\"%after-shift\"", + "\"%before-reduce\"", + "\"%after-reduce\"", + "\"%after-shift-error-token\"", + "\"%after-pop-stack\"", + "\"%token\"", + "\"%type\"", + "\"%left\"", + "\"%right\"", + "\"%precedence\"", + "\"%nonassoc\"", + "\"%rule\"", + "\"(\"", + "\")\"", + "\":\"", + "\"%inline\"", + "\",\"", + "\"|\"", + "\"%empty\"", + "\"%prec\"", + "\"?\"", + "\"+\"", + "\"*\"", + "\"[\"", + "\"]\"", + "\"{...}\"", + "$start", + "input", + "prologue_declarations", + "bison_declarations", + "grammar", + "epilogue_opt", + "prologue_declaration", + "@1", + "@2", + "bison_declaration", + "grammar_declaration", + "rule_declaration", + "inline_declaration", + "variable", + "value", + "params", + "@3", + "@4", + "@5", + "@6", + "symbol_declaration", + "generic_symlist", + "@7", + "@8", + "@9", + "@10", + "@11", + "@12", + "@13", + "@14", + "token_declarations", + "symbol_declarations", + "token_declarations_for_precedence", + "token_declaration_list", + "token_declaration", + "id", + "int_opt", + "alias", + "rule_args", + "tag_opt", + "rule_rhs_list", + "id_colon", + "rule_rhs", + "symbol", + "named_ref_opt", + "parameterizing_suffix", + "parameterizing_args", + "@15", + "@16", + "symbol_declaration_list", + "string_as_id", + "@17", + "@18", + "@19", + "@20", + "token_declaration_list_for_precedence", + "token_declaration_for_precedence", + "rules_or_grammar_declaration", + "rules", + "rhs_list", + "rhs", + "@21", + "@22", + "@23", + "generic_symlist_item" ] +Ractor.make_shareable(Racc_token_to_s_table) if defined?(Ractor) + +Racc_debug_parser = true + +##### State transition tables end ##### + +# reduce 0 omitted + +# reduce 1 omitted + +# reduce 2 omitted + +# reduce 3 omitted + +module_eval(<<'.,.,', 'parser.y', 14) + def _reduce_4(val, _values, result) + begin_c_declaration("%}") + @grammar.prologue_first_lineno = @lexer.line + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 19) + def _reduce_5(val, _values, result) + end_c_declaration + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 23) + def _reduce_6(val, _values, result) + @grammar.prologue = val[2].s_value + + result + end +.,., + +# reduce 7 omitted + +module_eval(<<'.,.,', 'parser.y', 27) + def _reduce_8(val, _values, result) + result = "" + result + end +.,., + +# reduce 9 omitted + +# reduce 10 omitted + +# reduce 11 omitted + +# reduce 12 omitted + +module_eval(<<'.,.,', 'parser.y', 33) + def _reduce_13(val, _values, result) + @grammar.expect = val[1] + result + end +.,., + +# reduce 14 omitted + +# reduce 15 omitted + +module_eval(<<'.,.,', 'parser.y', 38) + def _reduce_16(val, _values, result) + val[1].each {|token| + @grammar.lex_param = Grammar::Code::NoReferenceCode.new(type: :lex_param, token_code: token).token_code.s_value + } + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 44) + def _reduce_17(val, _values, result) + val[1].each {|token| + @grammar.parse_param = Grammar::Code::NoReferenceCode.new(type: :parse_param, token_code: token).token_code.s_value + } + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 50) + def _reduce_18(val, _values, result) + begin_c_declaration("}") + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 54) + def _reduce_19(val, _values, result) + end_c_declaration + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 58) + def _reduce_20(val, _values, result) + @grammar.add_percent_code(id: val[1], code: val[4]) + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 62) + def _reduce_21(val, _values, result) + begin_c_declaration("}") + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 66) + def _reduce_22(val, _values, result) + end_c_declaration + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 70) + def _reduce_23(val, _values, result) + @grammar.initial_action = Grammar::Code::InitialActionCode.new(type: :initial_action, token_code: val[3]) + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 72) + def _reduce_24(val, _values, result) + @grammar.no_stdlib = true + result + end +.,., + +# reduce 25 omitted + +module_eval(<<'.,.,', 'parser.y', 77) + def _reduce_26(val, _values, result) + begin_c_declaration("}") + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 81) + def _reduce_27(val, _values, result) + end_c_declaration + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 85) + def _reduce_28(val, _values, result) + @grammar.set_union( + Grammar::Code::NoReferenceCode.new(type: :union, token_code: val[3]), + val[3].line + ) + + result + end +.,., + +# reduce 29 omitted + +module_eval(<<'.,.,', 'parser.y', 93) + def _reduce_30(val, _values, result) + begin_c_declaration("}") + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 97) + def _reduce_31(val, _values, result) + end_c_declaration + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 101) + def _reduce_32(val, _values, result) + @grammar.add_destructor( + ident_or_tags: val[6], + token_code: val[3], + lineno: val[3].line + ) + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 109) + def _reduce_33(val, _values, result) + begin_c_declaration("}") + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 113) + def _reduce_34(val, _values, result) + end_c_declaration + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 117) + def _reduce_35(val, _values, result) + @grammar.add_printer( + ident_or_tags: val[6], + token_code: val[3], + lineno: val[3].line + ) + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 125) + def _reduce_36(val, _values, result) + begin_c_declaration("}") + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 129) + def _reduce_37(val, _values, result) + end_c_declaration + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 133) + def _reduce_38(val, _values, result) + @grammar.add_error_token( + ident_or_tags: val[6], + token_code: val[3], + lineno: val[3].line + ) + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 141) + def _reduce_39(val, _values, result) + @grammar.after_shift = val[1] + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 145) + def _reduce_40(val, _values, result) + @grammar.before_reduce = val[1] + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 149) + def _reduce_41(val, _values, result) + @grammar.after_reduce = val[1] + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 153) + def _reduce_42(val, _values, result) + @grammar.after_shift_error_token = val[1] + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 157) + def _reduce_43(val, _values, result) + @grammar.after_pop_stack = val[1] + + result + end +.,., + +# reduce 44 omitted + +module_eval(<<'.,.,', 'parser.y', 163) + def _reduce_45(val, _values, result) + val[1].each {|hash| + hash[:tokens].each {|id| + @grammar.add_type(id: id, tag: hash[:tag]) + } + } + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 171) + def _reduce_46(val, _values, result) + val[1].each {|hash| + hash[:tokens].each {|id| + sym = @grammar.add_term(id: id) + @grammar.add_left(sym, @precedence_number) + } + } + @precedence_number += 1 + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 181) + def _reduce_47(val, _values, result) + val[1].each {|hash| + hash[:tokens].each {|id| + sym = @grammar.add_term(id: id) + @grammar.add_right(sym, @precedence_number) + } + } + @precedence_number += 1 + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 191) + def _reduce_48(val, _values, result) + val[1].each {|hash| + hash[:tokens].each {|id| + sym = @grammar.add_term(id: id) + @grammar.add_precedence(sym, @precedence_number) + } + } + @precedence_number += 1 + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 201) + def _reduce_49(val, _values, result) + val[1].each {|hash| + hash[:tokens].each {|id| + sym = @grammar.add_term(id: id) + @grammar.add_nonassoc(sym, @precedence_number) + } + } + @precedence_number += 1 + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 212) + def _reduce_50(val, _values, result) + val[0].each {|token_declaration| + @grammar.add_term(id: token_declaration[0], alias_name: token_declaration[2], token_id: token_declaration[1], tag: nil, replace: true) + } + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 218) + def _reduce_51(val, _values, result) + val[1].each {|token_declaration| + @grammar.add_term(id: token_declaration[0], alias_name: token_declaration[2], token_id: token_declaration[1], tag: val[0], replace: true) + } + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 224) + def _reduce_52(val, _values, result) + val[2].each {|token_declaration| + @grammar.add_term(id: token_declaration[0], alias_name: token_declaration[2], token_id: token_declaration[1], tag: val[1], replace: true) + } + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 229) + def _reduce_53(val, _values, result) + result = [val[0]] + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 230) + def _reduce_54(val, _values, result) + result = val[0].append(val[1]) + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 232) + def _reduce_55(val, _values, result) + result = val + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 236) + def _reduce_56(val, _values, result) + rule = Grammar::ParameterizingRule::Rule.new(val[1].s_value, val[3], val[7], tag: val[5]) + @grammar.add_parameterizing_rule(rule) + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 242) + def _reduce_57(val, _values, result) + rule = Grammar::ParameterizingRule::Rule.new(val[2].s_value, [], val[4], is_inline: true) + @grammar.add_parameterizing_rule(rule) + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 246) + def _reduce_58(val, _values, result) + result = [val[0]] + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 247) + def _reduce_59(val, _values, result) + result = val[0].append(val[2]) + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 251) + def _reduce_60(val, _values, result) + builder = val[0] + result = [builder] + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 256) + def _reduce_61(val, _values, result) + builder = val[2] + result = val[0].append(builder) + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 262) + def _reduce_62(val, _values, result) + reset_precs + result = Grammar::ParameterizingRule::Rhs.new + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 267) + def _reduce_63(val, _values, result) + reset_precs + result = Grammar::ParameterizingRule::Rhs.new + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 272) + def _reduce_64(val, _values, result) + token = val[1] + token.alias_name = val[2] + builder = val[0] + builder.symbols << token + result = builder + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 280) + def _reduce_65(val, _values, result) + builder = val[0] + builder.symbols << Lrama::Lexer::Token::InstantiateRule.new(s_value: val[2], location: @lexer.location, args: [val[1]]) + result = builder + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 286) + def _reduce_66(val, _values, result) + builder = val[0] + builder.symbols << Lrama::Lexer::Token::InstantiateRule.new(s_value: val[1].s_value, location: @lexer.location, args: val[3], lhs_tag: val[5]) + result = builder + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 292) + def _reduce_67(val, _values, result) + if @prec_seen + on_action_error("multiple User_code after %prec", val[0]) if @code_after_prec + @code_after_prec = true + end + begin_c_declaration("}") + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 300) + def _reduce_68(val, _values, result) + end_c_declaration + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 304) + def _reduce_69(val, _values, result) + user_code = val[3] + user_code.alias_name = val[6] + builder = val[0] + builder.user_code = user_code + result = builder + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 312) + def _reduce_70(val, _values, result) + sym = @grammar.find_symbol_by_id!(val[2]) + @prec_seen = true + builder = val[0] + builder.precedence_sym = sym + result = builder + + result + end +.,., + +# reduce 71 omitted + +# reduce 72 omitted + +# reduce 73 omitted + +# reduce 74 omitted + +module_eval(<<'.,.,', 'parser.y', 327) + def _reduce_75(val, _values, result) + result = [{tag: nil, tokens: val[0]}] + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 331) + def _reduce_76(val, _values, result) + result = [{tag: val[0], tokens: val[1]}] + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 335) + def _reduce_77(val, _values, result) + result = val[0].append({tag: val[1], tokens: val[2]}) + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 338) + def _reduce_78(val, _values, result) + result = [val[0]] + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 339) + def _reduce_79(val, _values, result) + result = val[0].append(val[1]) + result + end +.,., + +# reduce 80 omitted + +# reduce 81 omitted + +module_eval(<<'.,.,', 'parser.y', 346) + def _reduce_82(val, _values, result) + begin_c_declaration("}") + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 350) + def _reduce_83(val, _values, result) + end_c_declaration + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 354) + def _reduce_84(val, _values, result) + result = val[0].append(val[3]) + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 358) + def _reduce_85(val, _values, result) + begin_c_declaration("}") + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 362) + def _reduce_86(val, _values, result) + end_c_declaration + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 366) + def _reduce_87(val, _values, result) + result = [val[2]] + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 371) + def _reduce_88(val, _values, result) + result = [{tag: nil, tokens: val[0]}] + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 375) + def _reduce_89(val, _values, result) + result = [{tag: val[0], tokens: val[1]}] + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 379) + def _reduce_90(val, _values, result) + result = val[0].append({tag: val[1], tokens: val[2]}) + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 382) + def _reduce_91(val, _values, result) + result = [val[0]] + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 383) + def _reduce_92(val, _values, result) + result = val[0].append(val[1]) + result + end +.,., + +# reduce 93 omitted + +module_eval(<<'.,.,', 'parser.y', 387) + def _reduce_94(val, _values, result) + on_action_error("ident after %prec", val[0]) if @prec_seen + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 388) + def _reduce_95(val, _values, result) + on_action_error("char after %prec", val[0]) if @prec_seen + result + end +.,., + +# reduce 96 omitted + +# reduce 97 omitted + +# reduce 98 omitted + +# reduce 99 omitted + +module_eval(<<'.,.,', 'parser.y', 398) + def _reduce_100(val, _values, result) + lhs = val[0] + lhs.alias_name = val[1] + val[3].each do |builder| + builder.lhs = lhs + builder.complete_input + @grammar.add_rule_builder(builder) + end + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 409) + def _reduce_101(val, _values, result) + builder = val[0] + if !builder.line + builder.line = @lexer.line - 1 + end + result = [builder] + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 417) + def _reduce_102(val, _values, result) + builder = val[2] + if !builder.line + builder.line = @lexer.line - 1 + end + result = val[0].append(builder) + + result + end +.,., + +# reduce 103 omitted + +module_eval(<<'.,.,', 'parser.y', 427) + def _reduce_104(val, _values, result) + reset_precs + result = Grammar::RuleBuilder.new(@rule_counter, @midrule_action_counter) + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 432) + def _reduce_105(val, _values, result) + reset_precs + result = Grammar::RuleBuilder.new(@rule_counter, @midrule_action_counter) + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 437) + def _reduce_106(val, _values, result) + token = val[1] + token.alias_name = val[2] + builder = val[0] + builder.add_rhs(token) + result = builder + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 445) + def _reduce_107(val, _values, result) + token = Lrama::Lexer::Token::InstantiateRule.new(s_value: val[2], location: @lexer.location, args: [val[1]], lhs_tag: val[3]) + builder = val[0] + builder.add_rhs(token) + builder.line = val[1].first_line + result = builder + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 453) + def _reduce_108(val, _values, result) + token = Lrama::Lexer::Token::InstantiateRule.new(s_value: val[1].s_value, location: @lexer.location, args: val[3], lhs_tag: val[5]) + builder = val[0] + builder.add_rhs(token) + builder.line = val[1].first_line + result = builder + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 461) + def _reduce_109(val, _values, result) + if @prec_seen + on_action_error("multiple User_code after %prec", val[0]) if @code_after_prec + @code_after_prec = true + end + begin_c_declaration("}") + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 469) + def _reduce_110(val, _values, result) + end_c_declaration + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 473) + def _reduce_111(val, _values, result) + user_code = val[3] + user_code.alias_name = val[6] + user_code.tag = val[7] + builder = val[0] + builder.user_code = user_code + result = builder + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 482) + def _reduce_112(val, _values, result) + sym = @grammar.find_symbol_by_id!(val[2]) + @prec_seen = true + builder = val[0] + builder.precedence_sym = sym + result = builder + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 489) + def _reduce_113(val, _values, result) + result = "option" + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 490) + def _reduce_114(val, _values, result) + result = "nonempty_list" + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 491) + def _reduce_115(val, _values, result) + result = "list" + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 493) + def _reduce_116(val, _values, result) + result = [val[0]] + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 494) + def _reduce_117(val, _values, result) + result = val[0].append(val[2]) + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 495) + def _reduce_118(val, _values, result) + result = [Lrama::Lexer::Token::InstantiateRule.new(s_value: val[1].s_value, location: @lexer.location, args: val[0])] + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 496) + def _reduce_119(val, _values, result) + result = [Lrama::Lexer::Token::InstantiateRule.new(s_value: val[0].s_value, location: @lexer.location, args: val[2])] + result + end +.,., + +# reduce 120 omitted + +module_eval(<<'.,.,', 'parser.y', 499) + def _reduce_121(val, _values, result) + result = val[1].s_value + result + end +.,., + +# reduce 122 omitted + +# reduce 123 omitted + +module_eval(<<'.,.,', 'parser.y', 506) + def _reduce_124(val, _values, result) + begin_c_declaration('\Z') + @grammar.epilogue_first_lineno = @lexer.line + 1 + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 511) + def _reduce_125(val, _values, result) + end_c_declaration + @grammar.epilogue = val[2].s_value + + result + end +.,., + +# reduce 126 omitted + +# reduce 127 omitted + +# reduce 128 omitted + +# reduce 129 omitted + +# reduce 130 omitted + +module_eval(<<'.,.,', 'parser.y', 522) + def _reduce_131(val, _values, result) + result = [val[0]] + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 523) + def _reduce_132(val, _values, result) + result = val[0].append(val[1]) + result + end +.,., + +# reduce 133 omitted + +# reduce 134 omitted + +module_eval(<<'.,.,', 'parser.y', 528) + def _reduce_135(val, _values, result) + result = Lrama::Lexer::Token::Ident.new(s_value: val[0]) + result + end +.,., + +# reduce 136 omitted + +# reduce 137 omitted + +def _reduce_none(val, _values, result) + val[0] +end + + end # class Parser +end # module Lrama diff --git a/tools/lrama/lib/lrama/report.rb b/tools/lrama/lib/lrama/report.rb new file mode 100644 index 000000000..650ac09d5 --- /dev/null +++ b/tools/lrama/lib/lrama/report.rb @@ -0,0 +1,2 @@ +require 'lrama/report/duration' +require 'lrama/report/profile' diff --git a/tools/lrama/lib/lrama/report/duration.rb b/tools/lrama/lib/lrama/report/duration.rb new file mode 100644 index 000000000..7afe284f1 --- /dev/null +++ b/tools/lrama/lib/lrama/report/duration.rb @@ -0,0 +1,25 @@ +module Lrama + class Report + module Duration + def self.enable + @_report_duration_enabled = true + end + + def self.enabled? + !!@_report_duration_enabled + end + + def report_duration(method_name) + time1 = Time.now.to_f + result = yield + time2 = Time.now.to_f + + if Duration.enabled? + puts sprintf("%s %10.5f s", method_name, time2 - time1) + end + + return result + end + end + end +end diff --git a/tools/lrama/lib/lrama/report/profile.rb b/tools/lrama/lib/lrama/report/profile.rb new file mode 100644 index 000000000..36156800a --- /dev/null +++ b/tools/lrama/lib/lrama/report/profile.rb @@ -0,0 +1,14 @@ +module Lrama + class Report + module Profile + # See "Profiling Lrama" in README.md for how to use. + def self.report_profile + require "stackprof" + + StackProf.run(mode: :cpu, raw: true, out: 'tmp/stackprof-cpu-myapp.dump') do + yield + end + end + end + end +end diff --git a/tools/lrama/lib/lrama/state.rb b/tools/lrama/lib/lrama/state.rb new file mode 100644 index 000000000..ceb74d856 --- /dev/null +++ b/tools/lrama/lib/lrama/state.rb @@ -0,0 +1,144 @@ +require "lrama/state/reduce" +require "lrama/state/reduce_reduce_conflict" +require "lrama/state/resolved_conflict" +require "lrama/state/shift" +require "lrama/state/shift_reduce_conflict" + +module Lrama + class State + attr_reader :id, :accessing_symbol, :kernels, :conflicts, :resolved_conflicts, + :default_reduction_rule, :closure, :items + attr_accessor :shifts, :reduces + + def initialize(id, accessing_symbol, kernels) + @id = id + @accessing_symbol = accessing_symbol + @kernels = kernels.freeze + @items = @kernels + # Manage relationships between items to state + # to resolve next state + @items_to_state = {} + @conflicts = [] + @resolved_conflicts = [] + @default_reduction_rule = nil + end + + def closure=(closure) + @closure = closure + @items = @kernels + @closure + end + + def non_default_reduces + reduces.reject do |reduce| + reduce.rule == @default_reduction_rule + end + end + + def compute_shifts_reduces + _shifts = {} + reduces = [] + items.each do |item| + # TODO: Consider what should be pushed + if item.end_of_rule? + reduces << Reduce.new(item) + else + key = item.next_sym + _shifts[key] ||= [] + _shifts[key] << item.new_by_next_position + end + end + + # It seems Bison 3.8.2 iterates transitions order by symbol number + shifts = _shifts.sort_by do |next_sym, new_items| + next_sym.number + end.map do |next_sym, new_items| + Shift.new(next_sym, new_items.flatten) + end + self.shifts = shifts.freeze + self.reduces = reduces.freeze + end + + def set_items_to_state(items, next_state) + @items_to_state[items] = next_state + end + + def set_look_ahead(rule, look_ahead) + reduce = reduces.find do |r| + r.rule == rule + end + + reduce.look_ahead = look_ahead + end + + def nterm_transitions + @nterm_transitions ||= transitions.select {|shift, _| shift.next_sym.nterm? } + end + + def term_transitions + @term_transitions ||= transitions.select {|shift, _| shift.next_sym.term? } + end + + def transitions + @transitions ||= shifts.map {|shift| [shift, @items_to_state[shift.next_items]] } + end + + def selected_term_transitions + term_transitions.reject do |shift, next_state| + shift.not_selected + end + end + + # Move to next state by sym + def transition(sym) + result = nil + + if sym.term? + term_transitions.each do |shift, next_state| + term = shift.next_sym + result = next_state if term == sym + end + else + nterm_transitions.each do |shift, next_state| + nterm = shift.next_sym + result = next_state if nterm == sym + end + end + + raise "Can not transit by #{sym} #{self}" if result.nil? + + result + end + + def find_reduce_by_item!(item) + reduces.find do |r| + r.item == item + end || (raise "reduce is not found. #{item}") + end + + def default_reduction_rule=(default_reduction_rule) + @default_reduction_rule = default_reduction_rule + + reduces.each do |r| + if r.rule == default_reduction_rule + r.default_reduction = true + end + end + end + + def has_conflicts? + !@conflicts.empty? + end + + def sr_conflicts + @conflicts.select do |conflict| + conflict.type == :shift_reduce + end + end + + def rr_conflicts + @conflicts.select do |conflict| + conflict.type == :reduce_reduce + end + end + end +end diff --git a/tools/lrama/lib/lrama/state/reduce.rb b/tools/lrama/lib/lrama/state/reduce.rb new file mode 100644 index 000000000..8ba51f45f --- /dev/null +++ b/tools/lrama/lib/lrama/state/reduce.rb @@ -0,0 +1,35 @@ +module Lrama + class State + class Reduce + # https://www.gnu.org/software/bison/manual/html_node/Default-Reductions.html + attr_reader :item, :look_ahead, :not_selected_symbols + attr_accessor :default_reduction + + def initialize(item) + @item = item + @look_ahead = nil + @not_selected_symbols = [] + end + + def rule + @item.rule + end + + def look_ahead=(look_ahead) + @look_ahead = look_ahead.freeze + end + + def add_not_selected_symbol(sym) + @not_selected_symbols << sym + end + + def selected_look_ahead + if @look_ahead + @look_ahead - @not_selected_symbols + else + [] + end + end + end + end +end diff --git a/tools/lrama/lib/lrama/state/reduce_reduce_conflict.rb b/tools/lrama/lib/lrama/state/reduce_reduce_conflict.rb new file mode 100644 index 000000000..0a0e4dc20 --- /dev/null +++ b/tools/lrama/lib/lrama/state/reduce_reduce_conflict.rb @@ -0,0 +1,9 @@ +module Lrama + class State + class ReduceReduceConflict < Struct.new(:symbols, :reduce1, :reduce2, keyword_init: true) + def type + :reduce_reduce + end + end + end +end diff --git a/tools/lrama/lib/lrama/state/resolved_conflict.rb b/tools/lrama/lib/lrama/state/resolved_conflict.rb new file mode 100644 index 000000000..02ea89214 --- /dev/null +++ b/tools/lrama/lib/lrama/state/resolved_conflict.rb @@ -0,0 +1,29 @@ +module Lrama + class State + # * symbol: A symbol under discussion + # * reduce: A reduce under discussion + # * which: For which a conflict is resolved. :shift, :reduce or :error (for nonassociative) + class ResolvedConflict < Struct.new(:symbol, :reduce, :which, :same_prec, keyword_init: true) + def report_message + s = symbol.display_name + r = reduce.rule.precedence_sym.display_name + case + when which == :shift && same_prec + msg = "resolved as #{which} (%right #{s})" + when which == :shift + msg = "resolved as #{which} (#{r} < #{s})" + when which == :reduce && same_prec + msg = "resolved as #{which} (%left #{s})" + when which == :reduce + msg = "resolved as #{which} (#{s} < #{r})" + when which == :error + msg = "resolved as an #{which} (%nonassoc #{s})" + else + raise "Unknown direction. #{self}" + end + + "Conflict between rule #{reduce.rule.id} and token #{s} #{msg}." + end + end + end +end diff --git a/tools/lrama/lib/lrama/state/shift.rb b/tools/lrama/lib/lrama/state/shift.rb new file mode 100644 index 000000000..2021eb61f --- /dev/null +++ b/tools/lrama/lib/lrama/state/shift.rb @@ -0,0 +1,13 @@ +module Lrama + class State + class Shift + attr_reader :next_sym, :next_items + attr_accessor :not_selected + + def initialize(next_sym, next_items) + @next_sym = next_sym + @next_items = next_items + end + end + end +end diff --git a/tools/lrama/lib/lrama/state/shift_reduce_conflict.rb b/tools/lrama/lib/lrama/state/shift_reduce_conflict.rb new file mode 100644 index 000000000..f80bd5f35 --- /dev/null +++ b/tools/lrama/lib/lrama/state/shift_reduce_conflict.rb @@ -0,0 +1,9 @@ +module Lrama + class State + class ShiftReduceConflict < Struct.new(:symbols, :shift, :reduce, keyword_init: true) + def type + :shift_reduce + end + end + end +end diff --git a/tools/lrama/lib/lrama/states.rb b/tools/lrama/lib/lrama/states.rb new file mode 100644 index 000000000..290e996b8 --- /dev/null +++ b/tools/lrama/lib/lrama/states.rb @@ -0,0 +1,556 @@ +require "forwardable" +require "lrama/report/duration" +require "lrama/states/item" + +module Lrama + # States is passed to a template file + # + # "Efficient Computation of LALR(1) Look-Ahead Sets" + # https://dl.acm.org/doi/pdf/10.1145/69622.357187 + class States + extend Forwardable + include Lrama::Report::Duration + + def_delegators "@grammar", :symbols, :terms, :nterms, :rules, + :accept_symbol, :eof_symbol, :undef_symbol, :find_symbol_by_s_value! + + attr_reader :states, :reads_relation, :includes_relation, :lookback_relation + + def initialize(grammar, warning, trace_state: false) + @grammar = grammar + @warning = warning + @trace_state = trace_state + + @states = [] + + # `DR(p, A) = {t ∈ T | p -(A)-> r -(t)-> }` + # where p is state, A is nterm, t is term. + # + # `@direct_read_sets` is a hash whose + # key is [state.id, nterm.token_id], + # value is bitmap of term. + @direct_read_sets = {} + + # Reads relation on nonterminal transitions (pair of state and nterm) + # `(p, A) reads (r, C) iff p -(A)-> r -(C)-> and C =>* ε` + # where p, r are state, A, C are nterm. + # + # `@reads_relation` is a hash whose + # key is [state.id, nterm.token_id], + # value is array of [state.id, nterm.token_id]. + @reads_relation = {} + + # `@read_sets` is a hash whose + # key is [state.id, nterm.token_id], + # value is bitmap of term. + @read_sets = {} + + # `(p, A) includes (p', B) iff B -> βAγ, γ =>* ε, p' -(β)-> p` + # where p, p' are state, A, B are nterm, β, γ is sequence of symbol. + # + # `@includes_relation` is a hash whose + # key is [state.id, nterm.token_id], + # value is array of [state.id, nterm.token_id]. + @includes_relation = {} + + # `(q, A -> ω) lookback (p, A) iff p -(ω)-> q` + # where p, q are state, A -> ω is rule, A is nterm, ω is sequence of symbol. + # + # `@lookback_relation` is a hash whose + # key is [state.id, rule.id], + # value is array of [state.id, nterm.token_id]. + @lookback_relation = {} + + # `@follow_sets` is a hash whose + # key is [state.id, rule.id], + # value is bitmap of term. + @follow_sets = {} + + # `LA(q, A -> ω) = ∪{Follow(p, A) | (q, A -> ω) lookback (p, A)` + # + # `@la` is a hash whose + # key is [state.id, rule.id], + # value is bitmap of term. + @la = {} + end + + def compute + # Look Ahead Sets + report_duration(:compute_lr0_states) { compute_lr0_states } + report_duration(:compute_direct_read_sets) { compute_direct_read_sets } + report_duration(:compute_reads_relation) { compute_reads_relation } + report_duration(:compute_read_sets) { compute_read_sets } + report_duration(:compute_includes_relation) { compute_includes_relation } + report_duration(:compute_lookback_relation) { compute_lookback_relation } + report_duration(:compute_follow_sets) { compute_follow_sets } + report_duration(:compute_look_ahead_sets) { compute_look_ahead_sets } + + # Conflicts + report_duration(:compute_conflicts) { compute_conflicts } + + report_duration(:compute_default_reduction) { compute_default_reduction } + + check_conflicts + end + + def reporter + StatesReporter.new(self) + end + + def states_count + @states.count + end + + def direct_read_sets + @direct_read_sets.transform_values do |v| + bitmap_to_terms(v) + end + end + + def read_sets + @read_sets.transform_values do |v| + bitmap_to_terms(v) + end + end + + def follow_sets + @follow_sets.transform_values do |v| + bitmap_to_terms(v) + end + end + + def la + @la.transform_values do |v| + bitmap_to_terms(v) + end + end + + private + + def sr_conflicts + @states.flat_map(&:sr_conflicts) + end + + def rr_conflicts + @states.flat_map(&:rr_conflicts) + end + + def trace_state + if @trace_state + yield STDERR + end + end + + def create_state(accessing_symbol, kernels, states_created) + # A item can appear in some states, + # so need to use `kernels` (not `kernels.first`) as a key. + # + # For example... + # + # %% + # program: '+' strings_1 + # | '-' strings_2 + # ; + # + # strings_1: string_1 + # ; + # + # strings_2: string_1 + # | string_2 + # ; + # + # string_1: string + # ; + # + # string_2: string '+' + # ; + # + # string: tSTRING + # ; + # %% + # + # For these grammar, there are 2 states + # + # State A + # string_1: string • + # + # State B + # string_1: string • + # string_2: string • '+' + # + return [states_created[kernels], false] if states_created[kernels] + + state = State.new(@states.count, accessing_symbol, kernels) + @states << state + states_created[kernels] = state + + return [state, true] + end + + def setup_state(state) + # closure + closure = [] + visited = {} + queued = {} + items = state.kernels.dup + + items.each do |item| + queued[item] = true + end + + while (item = items.shift) do + visited[item] = true + + if (sym = item.next_sym) && sym.nterm? + @grammar.find_rules_by_symbol!(sym).each do |rule| + i = Item.new(rule: rule, position: 0) + next if queued[i] + closure << i + items << i + queued[i] = true + end + end + end + + state.closure = closure.sort_by {|i| i.rule.id } + + # Trace + trace_state do |out| + out << "Closure: input\n" + state.kernels.each do |item| + out << " #{item.display_rest}\n" + end + out << "\n\n" + out << "Closure: output\n" + state.items.each do |item| + out << " #{item.display_rest}\n" + end + out << "\n\n" + end + + # shift & reduce + state.compute_shifts_reduces + end + + def enqueue_state(states, state) + # Trace + previous = state.kernels.first.previous_sym + trace_state do |out| + out << sprintf("state_list_append (state = %d, symbol = %d (%s))", + @states.count, previous.number, previous.display_name) + end + + states << state + end + + def compute_lr0_states + # State queue + states = [] + states_created = {} + + state, _ = create_state(symbols.first, [Item.new(rule: @grammar.rules.first, position: 0)], states_created) + enqueue_state(states, state) + + while (state = states.shift) do + # Trace + # + # Bison 3.8.2 renders "(reached by "end-of-input")" for State 0 but + # I think it is not correct... + previous = state.kernels.first.previous_sym + trace_state do |out| + out << "Processing state #{state.id} (reached by #{previous.display_name})\n" + end + + setup_state(state) + + state.shifts.each do |shift| + new_state, created = create_state(shift.next_sym, shift.next_items, states_created) + state.set_items_to_state(shift.next_items, new_state) + enqueue_state(states, new_state) if created + end + end + end + + def nterm_transitions + a = [] + + @states.each do |state| + state.nterm_transitions.each do |shift, next_state| + nterm = shift.next_sym + a << [state, nterm, next_state] + end + end + + a + end + + def compute_direct_read_sets + @states.each do |state| + state.nterm_transitions.each do |shift, next_state| + nterm = shift.next_sym + + ary = next_state.term_transitions.map do |shift, _| + shift.next_sym.number + end + + key = [state.id, nterm.token_id] + @direct_read_sets[key] = Bitmap.from_array(ary) + end + end + end + + def compute_reads_relation + @states.each do |state| + state.nterm_transitions.each do |shift, next_state| + nterm = shift.next_sym + next_state.nterm_transitions.each do |shift2, _next_state2| + nterm2 = shift2.next_sym + if nterm2.nullable + key = [state.id, nterm.token_id] + @reads_relation[key] ||= [] + @reads_relation[key] << [next_state.id, nterm2.token_id] + end + end + end + end + end + + def compute_read_sets + sets = nterm_transitions.map do |state, nterm, next_state| + [state.id, nterm.token_id] + end + + @read_sets = Digraph.new(sets, @reads_relation, @direct_read_sets).compute + end + + # Execute transition of state by symbols + # then return final state. + def transition(state, symbols) + symbols.each do |sym| + state = state.transition(sym) + end + + state + end + + def compute_includes_relation + @states.each do |state| + state.nterm_transitions.each do |shift, next_state| + nterm = shift.next_sym + @grammar.find_rules_by_symbol!(nterm).each do |rule| + i = rule.rhs.count - 1 + + while (i > -1) do + sym = rule.rhs[i] + + break if sym.term? + state2 = transition(state, rule.rhs[0...i]) + # p' = state, B = nterm, p = state2, A = sym + key = [state2.id, sym.token_id] + # TODO: need to omit if state == state2 ? + @includes_relation[key] ||= [] + @includes_relation[key] << [state.id, nterm.token_id] + break if !sym.nullable + i -= 1 + end + end + end + end + end + + def compute_lookback_relation + @states.each do |state| + state.nterm_transitions.each do |shift, next_state| + nterm = shift.next_sym + @grammar.find_rules_by_symbol!(nterm).each do |rule| + state2 = transition(state, rule.rhs) + # p = state, A = nterm, q = state2, A -> ω = rule + key = [state2.id, rule.id] + @lookback_relation[key] ||= [] + @lookback_relation[key] << [state.id, nterm.token_id] + end + end + end + end + + def compute_follow_sets + sets = nterm_transitions.map do |state, nterm, next_state| + [state.id, nterm.token_id] + end + + @follow_sets = Digraph.new(sets, @includes_relation, @read_sets).compute + end + + def compute_look_ahead_sets + @states.each do |state| + rules.each do |rule| + ary = @lookback_relation[[state.id, rule.id]] + next if !ary + + ary.each do |state2_id, nterm_token_id| + # q = state, A -> ω = rule, p = state2, A = nterm + follows = @follow_sets[[state2_id, nterm_token_id]] + + next if follows == 0 + + key = [state.id, rule.id] + @la[key] ||= 0 + look_ahead = @la[key] | follows + @la[key] |= look_ahead + + # No risk of conflict when + # * the state only has single reduce + # * the state only has nterm_transitions (GOTO) + next if state.reduces.count == 1 && state.term_transitions.count == 0 + + state.set_look_ahead(rule, bitmap_to_terms(look_ahead)) + end + end + end + end + + def bitmap_to_terms(bit) + ary = Bitmap.to_array(bit) + ary.map do |i| + @grammar.find_symbol_by_number!(i) + end + end + + def compute_conflicts + compute_shift_reduce_conflicts + compute_reduce_reduce_conflicts + end + + def compute_shift_reduce_conflicts + states.each do |state| + state.shifts.each do |shift| + state.reduces.each do |reduce| + sym = shift.next_sym + + next unless reduce.look_ahead + next if !reduce.look_ahead.include?(sym) + + # Shift/Reduce conflict + shift_prec = sym.precedence + reduce_prec = reduce.item.rule.precedence + + # Can resolve only when both have prec + unless shift_prec && reduce_prec + state.conflicts << State::ShiftReduceConflict.new(symbols: [sym], shift: shift, reduce: reduce) + next + end + + case + when shift_prec < reduce_prec + # Reduce is selected + state.resolved_conflicts << State::ResolvedConflict.new(symbol: sym, reduce: reduce, which: :reduce) + shift.not_selected = true + next + when shift_prec > reduce_prec + # Shift is selected + state.resolved_conflicts << State::ResolvedConflict.new(symbol: sym, reduce: reduce, which: :shift) + reduce.add_not_selected_symbol(sym) + next + end + + # shift_prec == reduce_prec, then check associativity + case sym.precedence.type + when :precedence + # %precedence only specifies precedence and not specify associativity + # then a conflict is unresolved if precedence is same. + state.conflicts << State::ShiftReduceConflict.new(symbols: [sym], shift: shift, reduce: reduce) + next + when :right + # Shift is selected + state.resolved_conflicts << State::ResolvedConflict.new(symbol: sym, reduce: reduce, which: :shift, same_prec: true) + reduce.add_not_selected_symbol(sym) + next + when :left + # Reduce is selected + state.resolved_conflicts << State::ResolvedConflict.new(symbol: sym, reduce: reduce, which: :reduce, same_prec: true) + shift.not_selected = true + next + when :nonassoc + # Can not resolve + # + # nonassoc creates "run-time" error, precedence creates "compile-time" error. + # Then omit both the shift and reduce. + # + # https://www.gnu.org/software/bison/manual/html_node/Using-Precedence.html + state.resolved_conflicts << State::ResolvedConflict.new(symbol: sym, reduce: reduce, which: :error) + shift.not_selected = true + reduce.add_not_selected_symbol(sym) + else + raise "Unknown precedence type. #{sym}" + end + end + end + end + end + + def compute_reduce_reduce_conflicts + states.each do |state| + count = state.reduces.count + + for i in 0...count do + reduce1 = state.reduces[i] + next if reduce1.look_ahead.nil? + + for j in (i+1)...count do + reduce2 = state.reduces[j] + next if reduce2.look_ahead.nil? + + intersection = reduce1.look_ahead & reduce2.look_ahead + + if !intersection.empty? + state.conflicts << State::ReduceReduceConflict.new(symbols: intersection, reduce1: reduce1, reduce2: reduce2) + end + end + end + end + end + + def compute_default_reduction + states.each do |state| + next if state.reduces.empty? + # Do not set, if conflict exist + next if !state.conflicts.empty? + # Do not set, if shift with `error` exists. + next if state.shifts.map(&:next_sym).include?(@grammar.error_symbol) + + state.default_reduction_rule = state.reduces.map do |r| + [r.rule, r.rule.id, (r.look_ahead || []).count] + end.min_by do |rule, rule_id, count| + [-count, rule_id] + end.first + end + end + + def check_conflicts + sr_count = sr_conflicts.count + rr_count = rr_conflicts.count + + if @grammar.expect + + expected_sr_conflicts = @grammar.expect + expected_rr_conflicts = 0 + + if expected_sr_conflicts != sr_count + @warning.error("shift/reduce conflicts: #{sr_count} found, #{expected_sr_conflicts} expected") + end + + if expected_rr_conflicts != rr_count + @warning.error("reduce/reduce conflicts: #{rr_count} found, #{expected_rr_conflicts} expected") + end + else + if sr_count != 0 + @warning.warn("shift/reduce conflicts: #{sr_count} found") + end + + if rr_count != 0 + @warning.warn("reduce/reduce conflicts: #{rr_count} found") + end + end + end + end +end diff --git a/tools/lrama/lib/lrama/states/item.rb b/tools/lrama/lib/lrama/states/item.rb new file mode 100644 index 000000000..31b74b9d3 --- /dev/null +++ b/tools/lrama/lib/lrama/states/item.rb @@ -0,0 +1,81 @@ +# TODO: Validate position is not over rule rhs + +require "forwardable" + +module Lrama + class States + class Item < Struct.new(:rule, :position, keyword_init: true) + extend Forwardable + + def_delegators "rule", :lhs, :rhs + + # Optimization for States#setup_state + def hash + [rule_id, position].hash + end + + def rule_id + rule.id + end + + def empty_rule? + rule.empty_rule? + end + + def number_of_rest_symbols + rhs.count - position + end + + def next_sym + rhs[position] + end + + def next_next_sym + rhs[position + 1] + end + + def previous_sym + rhs[position - 1] + end + + def end_of_rule? + rhs.count == position + end + + def beginning_of_rule? + position == 0 + end + + def start_item? + rule.initial_rule? && beginning_of_rule? + end + + def new_by_next_position + Item.new(rule: rule, position: position + 1) + end + + def symbols_before_dot + rhs[0...position] + end + + def symbols_after_dot + rhs[position..-1] + end + + def to_s + "#{lhs.id.s_value}: #{display_name}" + end + + def display_name + r = rhs.map(&:display_name).insert(position, "•").join(" ") + "#{r} (rule #{rule_id})" + end + + # Right after position + def display_rest + r = rhs[position..-1].map(&:display_name).join(" ") + ". #{r} (rule #{rule_id})" + end + end + end +end diff --git a/tools/lrama/lib/lrama/states_reporter.rb b/tools/lrama/lib/lrama/states_reporter.rb new file mode 100644 index 000000000..6f96cc6f6 --- /dev/null +++ b/tools/lrama/lib/lrama/states_reporter.rb @@ -0,0 +1,321 @@ +module Lrama + class StatesReporter + include Lrama::Report::Duration + + def initialize(states) + @states = states + end + + def report(io, **options) + report_duration(:report) do + _report(io, **options) + end + end + + private + + def _report(io, grammar: false, states: false, itemsets: false, lookaheads: false, solved: false, counterexamples: false, verbose: false) + # TODO: Unused terms + # TODO: Unused rules + + report_conflicts(io) + report_grammar(io) if grammar + report_states(io, itemsets, lookaheads, solved, counterexamples, verbose) + end + + def report_conflicts(io) + has_conflict = false + + @states.states.each do |state| + messages = [] + cs = state.conflicts.group_by(&:type) + if cs[:shift_reduce] + messages << "#{cs[:shift_reduce].count} shift/reduce" + end + + if cs[:reduce_reduce] + messages << "#{cs[:reduce_reduce].count} reduce/reduce" + end + + if !messages.empty? + has_conflict = true + io << "State #{state.id} conflicts: #{messages.join(', ')}\n" + end + end + + if has_conflict + io << "\n\n" + end + end + + def report_grammar(io) + io << "Grammar\n" + last_lhs = nil + + @states.rules.each do |rule| + if rule.empty_rule? + r = "ε" + else + r = rule.rhs.map(&:display_name).join(" ") + end + + if rule.lhs == last_lhs + io << sprintf("%5d %s| %s\n", rule.id, " " * rule.lhs.display_name.length, r) + else + io << "\n" + io << sprintf("%5d %s: %s\n", rule.id, rule.lhs.display_name, r) + end + + last_lhs = rule.lhs + end + io << "\n\n" + end + + def report_states(io, itemsets, lookaheads, solved, counterexamples, verbose) + if counterexamples + cex = Counterexamples.new(@states) + end + + @states.states.each do |state| + # Report State + io << "State #{state.id}\n\n" + + # Report item + last_lhs = nil + list = itemsets ? state.items : state.kernels + list.sort_by {|i| [i.rule_id, i.position] }.each do |item| + if item.empty_rule? + r = "ε •" + else + r = item.rhs.map(&:display_name).insert(item.position, "•").join(" ") + end + if item.lhs == last_lhs + l = " " * item.lhs.id.s_value.length + "|" + else + l = item.lhs.id.s_value + ":" + end + la = "" + if lookaheads && item.end_of_rule? + reduce = state.find_reduce_by_item!(item) + look_ahead = reduce.selected_look_ahead + if !look_ahead.empty? + la = " [#{look_ahead.map(&:display_name).join(", ")}]" + end + end + last_lhs = item.lhs + + io << sprintf("%5i %s %s%s\n", item.rule_id, l, r, la) + end + io << "\n" + + # Report shifts + tmp = state.term_transitions.reject do |shift, _| + shift.not_selected + end.map do |shift, next_state| + [shift.next_sym, next_state.id] + end + max_len = tmp.map(&:first).map(&:display_name).map(&:length).max + tmp.each do |term, state_id| + io << " #{term.display_name.ljust(max_len)} shift, and go to state #{state_id}\n" + end + io << "\n" if !tmp.empty? + + # Report error caused by %nonassoc + nl = false + tmp = state.resolved_conflicts.select do |resolved| + resolved.which == :error + end.map do |error| + error.symbol.display_name + end + max_len = tmp.map(&:length).max + tmp.each do |name| + nl = true + io << " #{name.ljust(max_len)} error (nonassociative)\n" + end + io << "\n" if !tmp.empty? + + # Report reduces + nl = false + max_len = state.non_default_reduces.flat_map(&:look_ahead).compact.map(&:display_name).map(&:length).max || 0 + max_len = [max_len, "$default".length].max if state.default_reduction_rule + ary = [] + + state.non_default_reduces.each do |reduce| + reduce.look_ahead.each do |term| + ary << [term, reduce] + end + end + + ary.sort_by do |term, reduce| + term.number + end.each do |term, reduce| + rule = reduce.item.rule + io << " #{term.display_name.ljust(max_len)} reduce using rule #{rule.id} (#{rule.lhs.display_name})\n" + nl = true + end + + if (r = state.default_reduction_rule) + nl = true + s = "$default".ljust(max_len) + + if r.initial_rule? + io << " #{s} accept\n" + else + io << " #{s} reduce using rule #{r.id} (#{r.lhs.display_name})\n" + end + end + io << "\n" if nl + + # Report nonterminal transitions + tmp = [] + max_len = 0 + state.nterm_transitions.each do |shift, next_state| + nterm = shift.next_sym + tmp << [nterm, next_state.id] + max_len = [max_len, nterm.id.s_value.length].max + end + tmp.uniq! + tmp.sort_by! do |nterm, state_id| + nterm.number + end + tmp.each do |nterm, state_id| + io << " #{nterm.id.s_value.ljust(max_len)} go to state #{state_id}\n" + end + io << "\n" if !tmp.empty? + + if solved + # Report conflict resolutions + state.resolved_conflicts.each do |resolved| + io << " #{resolved.report_message}\n" + end + io << "\n" if !state.resolved_conflicts.empty? + end + + if counterexamples && state.has_conflicts? + # Report counterexamples + examples = cex.compute(state) + examples.each do |example| + label0 = example.type == :shift_reduce ? "shift/reduce" : "reduce/reduce" + label1 = example.type == :shift_reduce ? "Shift derivation" : "First Reduce derivation" + label2 = example.type == :shift_reduce ? "Reduce derivation" : "Second Reduce derivation" + + io << " #{label0} conflict on token #{example.conflict_symbol.id.s_value}:\n" + io << " #{example.path1_item}\n" + io << " #{example.path2_item}\n" + io << " #{label1}\n" + example.derivations1.render_strings_for_report.each do |str| + io << " #{str}\n" + end + io << " #{label2}\n" + example.derivations2.render_strings_for_report.each do |str| + io << " #{str}\n" + end + end + end + + if verbose + # Report direct_read_sets + io << " [Direct Read sets]\n" + direct_read_sets = @states.direct_read_sets + @states.nterms.each do |nterm| + terms = direct_read_sets[[state.id, nterm.token_id]] + next if !terms + next if terms.empty? + + str = terms.map {|sym| sym.id.s_value }.join(", ") + io << " read #{nterm.id.s_value} shift #{str}\n" + end + io << "\n" + + # Report reads_relation + io << " [Reads Relation]\n" + @states.nterms.each do |nterm| + a = @states.reads_relation[[state.id, nterm.token_id]] + next if !a + + a.each do |state_id2, nterm_id2| + n = @states.nterms.find {|n| n.token_id == nterm_id2 } + io << " (State #{state_id2}, #{n.id.s_value})\n" + end + end + io << "\n" + + # Report read_sets + io << " [Read sets]\n" + read_sets = @states.read_sets + @states.nterms.each do |nterm| + terms = read_sets[[state.id, nterm.token_id]] + next if !terms + next if terms.empty? + + terms.each do |sym| + io << " #{sym.id.s_value}\n" + end + end + io << "\n" + + # Report includes_relation + io << " [Includes Relation]\n" + @states.nterms.each do |nterm| + a = @states.includes_relation[[state.id, nterm.token_id]] + next if !a + + a.each do |state_id2, nterm_id2| + n = @states.nterms.find {|n| n.token_id == nterm_id2 } + io << " (State #{state.id}, #{nterm.id.s_value}) -> (State #{state_id2}, #{n.id.s_value})\n" + end + end + io << "\n" + + # Report lookback_relation + io << " [Lookback Relation]\n" + @states.rules.each do |rule| + a = @states.lookback_relation[[state.id, rule.id]] + next if !a + + a.each do |state_id2, nterm_id2| + n = @states.nterms.find {|n| n.token_id == nterm_id2 } + io << " (Rule: #{rule}) -> (State #{state_id2}, #{n.id.s_value})\n" + end + end + io << "\n" + + # Report follow_sets + io << " [Follow sets]\n" + follow_sets = @states.follow_sets + @states.nterms.each do |nterm| + terms = follow_sets[[state.id, nterm.token_id]] + + next if !terms + + terms.each do |sym| + io << " #{nterm.id.s_value} -> #{sym.id.s_value}\n" + end + end + io << "\n" + + # Report LA + io << " [Look-Ahead Sets]\n" + tmp = [] + max_len = 0 + @states.rules.each do |rule| + syms = @states.la[[state.id, rule.id]] + next if !syms + + tmp << [rule, syms] + max_len = ([max_len] + syms.map {|s| s.id.s_value.length }).max + end + tmp.each do |rule, syms| + syms.each do |sym| + io << " #{sym.id.s_value.ljust(max_len)} reduce using rule #{rule.id} (#{rule.lhs.id.s_value})\n" + end + end + io << "\n" if !tmp.empty? + end + + # End of Report State + io << "\n" + end + end + end +end diff --git a/tools/lrama/lib/lrama/version.rb b/tools/lrama/lib/lrama/version.rb new file mode 100644 index 000000000..ef840ce43 --- /dev/null +++ b/tools/lrama/lib/lrama/version.rb @@ -0,0 +1,3 @@ +module Lrama + VERSION = "0.6.9".freeze +end diff --git a/tools/lrama/lib/lrama/warning.rb b/tools/lrama/lib/lrama/warning.rb new file mode 100644 index 000000000..3c99791eb --- /dev/null +++ b/tools/lrama/lib/lrama/warning.rb @@ -0,0 +1,25 @@ +module Lrama + class Warning + attr_reader :errors, :warns + + def initialize(out = STDERR) + @out = out + @errors = [] + @warns = [] + end + + def error(message) + @out << message << "\n" + @errors << message + end + + def warn(message) + @out << message << "\n" + @warns << message + end + + def has_error? + !@errors.empty? + end + end +end diff --git a/tools/lrama/template/bison/_yacc.h b/tools/lrama/template/bison/_yacc.h new file mode 100644 index 000000000..34ed6d81f --- /dev/null +++ b/tools/lrama/template/bison/_yacc.h @@ -0,0 +1,71 @@ +<%# b4_shared_declarations -%> + <%-# b4_cpp_guard_open([b4_spec_mapped_header_file]) -%> + <%- if output.spec_mapped_header_file -%> +#ifndef <%= output.b4_cpp_guard__b4_spec_mapped_header_file %> +# define <%= output.b4_cpp_guard__b4_spec_mapped_header_file %> + <%- end -%> + <%-# b4_declare_yydebug & b4_YYDEBUG_define -%> +/* Debug traces. */ +#ifndef YYDEBUG +# define YYDEBUG 0 +#endif +#if YYDEBUG && !defined(yydebug) +extern int yydebug; +#endif +<%= output.percent_code("requires") %> + + <%-# b4_token_enums_defines -%> +/* Token kinds. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + enum yytokentype + { +<%= output.token_enums -%> + }; + typedef enum yytokentype yytoken_kind_t; +#endif + + <%-# b4_declare_yylstype -%> + <%-# b4_value_type_define -%> +/* Value type. */ +#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED +union YYSTYPE +{ +#line <%= output.grammar.union.lineno %> "<%= output.grammar_file_path %>" +<%= output.grammar.union.braces_less_code %> +#line [@oline@] [@ofile@] + +}; +typedef union YYSTYPE YYSTYPE; +# define YYSTYPE_IS_TRIVIAL 1 +# define YYSTYPE_IS_DECLARED 1 +#endif + + <%-# b4_location_type_define -%> +/* Location type. */ +#if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED +typedef struct YYLTYPE YYLTYPE; +struct YYLTYPE +{ + int first_line; + int first_column; + int last_line; + int last_column; +}; +# define YYLTYPE_IS_DECLARED 1 +# define YYLTYPE_IS_TRIVIAL 1 +#endif + + + + + <%-# b4_declare_yyerror_and_yylex. Not supported -%> + <%-# b4_declare_yyparse -%> +int yyparse (<%= output.parse_param %>); + + +<%= output.percent_code("provides") %> + <%-# b4_cpp_guard_close([b4_spec_mapped_header_file]) -%> + <%- if output.spec_mapped_header_file -%> +#endif /* !<%= output.b4_cpp_guard__b4_spec_mapped_header_file %> */ + <%- end -%> diff --git a/tools/lrama/template/bison/yacc.c b/tools/lrama/template/bison/yacc.c new file mode 100644 index 000000000..bcefa03f7 --- /dev/null +++ b/tools/lrama/template/bison/yacc.c @@ -0,0 +1,2062 @@ +<%# b4_generated_by -%> +/* A Bison parser, made by Lrama <%= Lrama::VERSION %>. */ + +<%# b4_copyright -%> +/* Bison implementation for Yacc-like parsers in C + + Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation, + Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + special exception, which will cause the skeleton and the resulting + Bison output files to be licensed under the GNU General Public + License without this special exception. + + This special exception was added by the Free Software Foundation in + version 2.2 of Bison. */ + +/* C LALR(1) parser skeleton written by Richard Stallman, by + simplifying the original so-called "semantic" parser. */ + +<%# b4_disclaimer -%> +/* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual, + especially those whose name start with YY_ or yy_. They are + private implementation details that can be changed or removed. */ + +/* All symbols defined below should begin with yy or YY, to avoid + infringing on user name space. This should be done even for local + variables, as they might otherwise be expanded by user macros. + There are some unavoidable exceptions within include files to + define necessary library symbols; they are noted "INFRINGES ON + USER NAME SPACE" below. */ + +<%# b4_identification -%> +/* Identify Bison output, and Bison version. */ +#define YYBISON 30802 + +/* Bison version string. */ +#define YYBISON_VERSION "3.8.2" + +/* Skeleton name. */ +#define YYSKELETON_NAME "<%= output.template_basename %>" + +/* Pure parsers. */ +#define YYPURE 1 + +/* Push parsers. */ +#define YYPUSH 0 + +/* Pull parsers. */ +#define YYPULL 1 + + +<%# b4_user_pre_prologue -%> +<%- if output.aux.prologue -%> +/* First part of user prologue. */ +#line <%= output.aux.prologue_first_lineno %> "<%= output.grammar_file_path %>" +<%= output.aux.prologue %> +#line [@oline@] [@ofile@] +<%- end -%> + +<%# b4_cast_define -%> +# ifndef YY_CAST +# ifdef __cplusplus +# define YY_CAST(Type, Val) static_cast (Val) +# define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast (Val) +# else +# define YY_CAST(Type, Val) ((Type) (Val)) +# define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val)) +# endif +# endif +<%# b4_null_define -%> +# ifndef YY_NULLPTR +# if defined __cplusplus +# if 201103L <= __cplusplus +# define YY_NULLPTR nullptr +# else +# define YY_NULLPTR 0 +# endif +# else +# define YY_NULLPTR ((void*)0) +# endif +# endif + +<%# b4_header_include_if -%> +<%- if output.include_header -%> +#include "<%= output.include_header %>" +<%- else -%> +/* Use api.header.include to #include this header + instead of duplicating it here. */ +<%= output.render_partial("bison/_yacc.h") %> +<%- end -%> +<%# b4_declare_symbol_enum -%> +/* Symbol kind. */ +enum yysymbol_kind_t +{ +<%= output.symbol_enum -%> +}; +typedef enum yysymbol_kind_t yysymbol_kind_t; + + + + +<%# b4_user_post_prologue -%> +<%# b4_c99_int_type_define -%> +#ifdef short +# undef short +#endif + +/* On compilers that do not define __PTRDIFF_MAX__ etc., make sure + and (if available) are included + so that the code can choose integer types of a good width. */ + +#ifndef __PTRDIFF_MAX__ +# include /* INFRINGES ON USER NAME SPACE */ +# if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__ +# include /* INFRINGES ON USER NAME SPACE */ +# define YY_STDINT_H +# endif +#endif + +/* Narrow types that promote to a signed type and that can represent a + signed or unsigned integer of at least N bits. In tables they can + save space and decrease cache pressure. Promoting to a signed type + helps avoid bugs in integer arithmetic. */ + +#ifdef __INT_LEAST8_MAX__ +typedef __INT_LEAST8_TYPE__ yytype_int8; +#elif defined YY_STDINT_H +typedef int_least8_t yytype_int8; +#else +typedef signed char yytype_int8; +#endif + +#ifdef __INT_LEAST16_MAX__ +typedef __INT_LEAST16_TYPE__ yytype_int16; +#elif defined YY_STDINT_H +typedef int_least16_t yytype_int16; +#else +typedef short yytype_int16; +#endif + +/* Work around bug in HP-UX 11.23, which defines these macros + incorrectly for preprocessor constants. This workaround can likely + be removed in 2023, as HPE has promised support for HP-UX 11.23 + (aka HP-UX 11i v2) only through the end of 2022; see Table 2 of + . */ +#ifdef __hpux +# undef UINT_LEAST8_MAX +# undef UINT_LEAST16_MAX +# define UINT_LEAST8_MAX 255 +# define UINT_LEAST16_MAX 65535 +#endif + +#if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__ +typedef __UINT_LEAST8_TYPE__ yytype_uint8; +#elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \ + && UINT_LEAST8_MAX <= INT_MAX) +typedef uint_least8_t yytype_uint8; +#elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX +typedef unsigned char yytype_uint8; +#else +typedef short yytype_uint8; +#endif + +#if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__ +typedef __UINT_LEAST16_TYPE__ yytype_uint16; +#elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H \ + && UINT_LEAST16_MAX <= INT_MAX) +typedef uint_least16_t yytype_uint16; +#elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX +typedef unsigned short yytype_uint16; +#else +typedef int yytype_uint16; +#endif + +<%# b4_sizes_types_define -%> +#ifndef YYPTRDIFF_T +# if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__ +# define YYPTRDIFF_T __PTRDIFF_TYPE__ +# define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__ +# elif defined PTRDIFF_MAX +# ifndef ptrdiff_t +# include /* INFRINGES ON USER NAME SPACE */ +# endif +# define YYPTRDIFF_T ptrdiff_t +# define YYPTRDIFF_MAXIMUM PTRDIFF_MAX +# else +# define YYPTRDIFF_T long +# define YYPTRDIFF_MAXIMUM LONG_MAX +# endif +#endif + +#ifndef YYSIZE_T +# ifdef __SIZE_TYPE__ +# define YYSIZE_T __SIZE_TYPE__ +# elif defined size_t +# define YYSIZE_T size_t +# elif defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__ +# include /* INFRINGES ON USER NAME SPACE */ +# define YYSIZE_T size_t +# else +# define YYSIZE_T unsigned +# endif +#endif + +#define YYSIZE_MAXIMUM \ + YY_CAST (YYPTRDIFF_T, \ + (YYPTRDIFF_MAXIMUM < YY_CAST (YYSIZE_T, -1) \ + ? YYPTRDIFF_MAXIMUM \ + : YY_CAST (YYSIZE_T, -1))) + +#define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X)) + + +/* Stored state numbers (used for stacks). */ +typedef <%= output.int_type_for([output.yynstates - 1]) %> yy_state_t; + +/* State numbers in computations. */ +typedef int yy_state_fast_t; + +#ifndef YY_ +# if defined YYENABLE_NLS && YYENABLE_NLS +# if ENABLE_NLS +# include /* INFRINGES ON USER NAME SPACE */ +# define YY_(Msgid) dgettext ("bison-runtime", Msgid) +# endif +# endif +# ifndef YY_ +# define YY_(Msgid) Msgid +# endif +#endif + + +<%# b4_attribute_define -%> +#ifndef YY_ATTRIBUTE_PURE +# if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__) +# define YY_ATTRIBUTE_PURE __attribute__ ((__pure__)) +# else +# define YY_ATTRIBUTE_PURE +# endif +#endif + +#ifndef YY_ATTRIBUTE_UNUSED +# if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__) +# define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__)) +# else +# define YY_ATTRIBUTE_UNUSED +# endif +#endif + +/* Suppress unused-variable warnings by "using" E. */ +#if ! defined lint || defined __GNUC__ +# define YY_USE(E) ((void) (E)) +#else +# define YY_USE(E) /* empty */ +#endif + +/* Suppress an incorrect diagnostic about yylval being uninitialized. */ +#if defined __GNUC__ && ! defined __ICC && 406 <= __GNUC__ * 100 + __GNUC_MINOR__ +# if __GNUC__ * 100 + __GNUC_MINOR__ < 407 +# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") +# else +# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \ + _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") +# endif +# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ + _Pragma ("GCC diagnostic pop") +#else +# define YY_INITIAL_VALUE(Value) Value +#endif +#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN +# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN +# define YY_IGNORE_MAYBE_UNINITIALIZED_END +#endif +#ifndef YY_INITIAL_VALUE +# define YY_INITIAL_VALUE(Value) /* Nothing. */ +#endif + +#if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__ +# define YY_IGNORE_USELESS_CAST_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"") +# define YY_IGNORE_USELESS_CAST_END \ + _Pragma ("GCC diagnostic pop") +#endif +#ifndef YY_IGNORE_USELESS_CAST_BEGIN +# define YY_IGNORE_USELESS_CAST_BEGIN +# define YY_IGNORE_USELESS_CAST_END +#endif + + +#define YY_ASSERT(E) ((void) (0 && (E))) + +#if 1 + +/* The parser invokes alloca or malloc; define the necessary symbols. */ + +# ifdef YYSTACK_USE_ALLOCA +# if YYSTACK_USE_ALLOCA +# ifdef __GNUC__ +# define YYSTACK_ALLOC __builtin_alloca +# elif defined __BUILTIN_VA_ARG_INCR +# include /* INFRINGES ON USER NAME SPACE */ +# elif defined _AIX +# define YYSTACK_ALLOC __alloca +# elif defined _MSC_VER +# include /* INFRINGES ON USER NAME SPACE */ +# define alloca _alloca +# else +# define YYSTACK_ALLOC alloca +# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS +# include /* INFRINGES ON USER NAME SPACE */ + /* Use EXIT_SUCCESS as a witness for stdlib.h. */ +# ifndef EXIT_SUCCESS +# define EXIT_SUCCESS 0 +# endif +# endif +# endif +# endif +# endif + +# ifdef YYSTACK_ALLOC + /* Pacify GCC's 'empty if-body' warning. */ +# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) +# ifndef YYSTACK_ALLOC_MAXIMUM + /* The OS might guarantee only one guard page at the bottom of the stack, + and a page size can be as small as 4096 bytes. So we cannot safely + invoke alloca (N) if N exceeds 4096. Use a slightly smaller number + to allow for a few compiler-allocated temporary stack slots. */ +# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ +# endif +# else +# define YYSTACK_ALLOC YYMALLOC +# define YYSTACK_FREE YYFREE +# ifndef YYSTACK_ALLOC_MAXIMUM +# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM +# endif +# if (defined __cplusplus && ! defined EXIT_SUCCESS \ + && ! ((defined YYMALLOC || defined malloc) \ + && (defined YYFREE || defined free))) +# include /* INFRINGES ON USER NAME SPACE */ +# ifndef EXIT_SUCCESS +# define EXIT_SUCCESS 0 +# endif +# endif +# ifndef YYMALLOC +# define YYMALLOC malloc +# if ! defined malloc && ! defined EXIT_SUCCESS +void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ +# endif +# endif +# ifndef YYFREE +# define YYFREE free +# if ! defined free && ! defined EXIT_SUCCESS +void free (void *); /* INFRINGES ON USER NAME SPACE */ +# endif +# endif +# endif +#endif /* 1 */ + +#if (! defined yyoverflow \ + && (! defined __cplusplus \ + || (defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL \ + && defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) + +/* A type that is properly aligned for any stack member. */ +union yyalloc +{ + yy_state_t yyss_alloc; + YYSTYPE yyvs_alloc; + YYLTYPE yyls_alloc; +}; + +/* The size of the maximum gap between one aligned stack and the next. */ +# define YYSTACK_GAP_MAXIMUM (YYSIZEOF (union yyalloc) - 1) + +/* The size of an array large to enough to hold all stacks, each with + N elements. */ +# define YYSTACK_BYTES(N) \ + ((N) * (YYSIZEOF (yy_state_t) + YYSIZEOF (YYSTYPE) \ + + YYSIZEOF (YYLTYPE)) \ + + 2 * YYSTACK_GAP_MAXIMUM) + +# define YYCOPY_NEEDED 1 + +/* Relocate STACK from its old location to the new one. The + local variables YYSIZE and YYSTACKSIZE give the old and new number of + elements in the stack, and YYPTR gives the new location of the + stack. Advance YYPTR to a properly aligned location for the next + stack. */ +# define YYSTACK_RELOCATE(Stack_alloc, Stack) \ + do \ + { \ + YYPTRDIFF_T yynewbytes; \ + YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ + Stack = &yyptr->Stack_alloc; \ + yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \ + yyptr += yynewbytes / YYSIZEOF (*yyptr); \ + } \ + while (0) + +#endif + +#if defined YYCOPY_NEEDED && YYCOPY_NEEDED +/* Copy COUNT objects from SRC to DST. The source and destination do + not overlap. */ +# ifndef YYCOPY +# if defined __GNUC__ && 1 < __GNUC__ +# define YYCOPY(Dst, Src, Count) \ + __builtin_memcpy (Dst, Src, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src))) +# else +# define YYCOPY(Dst, Src, Count) \ + do \ + { \ + YYPTRDIFF_T yyi; \ + for (yyi = 0; yyi < (Count); yyi++) \ + (Dst)[yyi] = (Src)[yyi]; \ + } \ + while (0) +# endif +# endif +#endif /* !YYCOPY_NEEDED */ + +/* YYFINAL -- State number of the termination state. */ +#define YYFINAL <%= output.yyfinal %> +/* YYLAST -- Last index in YYTABLE. */ +#define YYLAST <%= output.yylast %> + +/* YYNTOKENS -- Number of terminals. */ +#define YYNTOKENS <%= output.yyntokens %> +/* YYNNTS -- Number of nonterminals. */ +#define YYNNTS <%= output.yynnts %> +/* YYNRULES -- Number of rules. */ +#define YYNRULES <%= output.yynrules %> +/* YYNSTATES -- Number of states. */ +#define YYNSTATES <%= output.yynstates %> + +/* YYMAXUTOK -- Last valid token kind. */ +#define YYMAXUTOK <%= output.yymaxutok %> + + +/* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM + as returned by yylex, with out-of-bounds checking. */ +#define YYTRANSLATE(YYX) \ + (0 <= (YYX) && (YYX) <= YYMAXUTOK \ + ? YY_CAST (yysymbol_kind_t, yytranslate[YYX]) \ + : YYSYMBOL_YYUNDEF) + +/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM + as returned by yylex. */ +static const <%= output.int_type_for(output.context.yytranslate) %> yytranslate[] = +{ +<%= output.yytranslate %> +}; + +<%- if output.error_recovery -%> +/* YYTRANSLATE_INVERTED[SYMBOL-NUM] -- Token number corresponding to SYMBOL-NUM */ +static const <%= output.int_type_for(output.context.yytranslate_inverted) %> yytranslate_inverted[] = +{ +<%= output.yytranslate_inverted %> +}; +<%- end -%> +#if YYDEBUG +/* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ +static const <%= output.int_type_for(output.context.yyrline) %> yyrline[] = +{ +<%= output.yyrline %> +}; +#endif + +/** Accessing symbol of state STATE. */ +#define YY_ACCESSING_SYMBOL(State) YY_CAST (yysymbol_kind_t, yystos[State]) + +#if 1 +/* The user-facing name of the symbol whose (internal) number is + YYSYMBOL. No bounds checking. */ +static const char *yysymbol_name (yysymbol_kind_t yysymbol) YY_ATTRIBUTE_UNUSED; + +/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. + First, the terminals, then, starting at YYNTOKENS, nonterminals. */ +static const char *const yytname[] = +{ +<%= output.yytname %> +}; + +static const char * +yysymbol_name (yysymbol_kind_t yysymbol) +{ + return yytname[yysymbol]; +} +#endif + +#define YYPACT_NINF (<%= output.yypact_ninf %>) + +#define yypact_value_is_default(Yyn) \ + <%= output.table_value_equals(output.context.yypact, "Yyn", output.yypact_ninf, "YYPACT_NINF") %> + +#define YYTABLE_NINF (<%= output.yytable_ninf %>) + +#define yytable_value_is_error(Yyn) \ + <%= output.table_value_equals(output.context.yytable, "Yyn", output.yytable_ninf, "YYTABLE_NINF") %> + +<%# b4_parser_tables_define -%> +/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing + STATE-NUM. */ +static const <%= output.int_type_for(output.context.yypact) %> yypact[] = +{ +<%= output.int_array_to_string(output.context.yypact) %> +}; + +/* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. + Performed when YYTABLE does not specify something else to do. Zero + means the default is an error. */ +static const <%= output.int_type_for(output.context.yydefact) %> yydefact[] = +{ +<%= output.int_array_to_string(output.context.yydefact) %> +}; + +/* YYPGOTO[NTERM-NUM]. */ +static const <%= output.int_type_for(output.context.yypgoto) %> yypgoto[] = +{ +<%= output.int_array_to_string(output.context.yypgoto) %> +}; + +/* YYDEFGOTO[NTERM-NUM]. */ +static const <%= output.int_type_for(output.context.yydefgoto) %> yydefgoto[] = +{ +<%= output.int_array_to_string(output.context.yydefgoto) %> +}; + +/* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If + positive, shift that token. If negative, reduce the rule whose + number is the opposite. If YYTABLE_NINF, syntax error. */ +static const <%= output.int_type_for(output.context.yytable) %> yytable[] = +{ +<%= output.int_array_to_string(output.context.yytable) %> +}; + +static const <%= output.int_type_for(output.context.yycheck) %> yycheck[] = +{ +<%= output.int_array_to_string(output.context.yycheck) %> +}; + +/* YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of + state STATE-NUM. */ +static const <%= output.int_type_for(output.context.yystos) %> yystos[] = +{ +<%= output.int_array_to_string(output.context.yystos) %> +}; + +/* YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM. */ +static const <%= output.int_type_for(output.context.yyr1) %> yyr1[] = +{ +<%= output.int_array_to_string(output.context.yyr1) %> +}; + +/* YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM. */ +static const <%= output.int_type_for(output.context.yyr2) %> yyr2[] = +{ +<%= output.int_array_to_string(output.context.yyr2) %> +}; + + +enum { YYENOMEM = -2 }; + +#define yyerrok (yyerrstatus = 0) +#define yyclearin (yychar = YYEMPTY) + +#define YYACCEPT goto yyacceptlab +#define YYABORT goto yyabortlab +#define YYERROR goto yyerrorlab +#define YYNOMEM goto yyexhaustedlab + + +#define YYRECOVERING() (!!yyerrstatus) + +#define YYBACKUP(Token, Value) \ + do \ + if (yychar == YYEMPTY) \ + { \ + yychar = (Token); \ + yylval = (Value); \ + YYPOPSTACK (yylen); \ + yystate = *yyssp; \ + goto yybackup; \ + } \ + else \ + { \ + yyerror (<%= output.yyerror_args %>, YY_("syntax error: cannot back up")); \ + YYERROR; \ + } \ + while (0) + +/* Backward compatibility with an undocumented macro. + Use YYerror or YYUNDEF. */ +#define YYERRCODE YYUNDEF + +<%# b4_yylloc_default_define -%> +/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. + If N is 0, then set CURRENT to the empty location which ends + the previous symbol: RHS[0] (always defined). */ + +#ifndef YYLLOC_DEFAULT +# define YYLLOC_DEFAULT(Current, Rhs, N) \ + do \ + if (N) \ + { \ + (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ + (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ + (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ + (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ + } \ + else \ + { \ + (Current).first_line = (Current).last_line = \ + YYRHSLOC (Rhs, 0).last_line; \ + (Current).first_column = (Current).last_column = \ + YYRHSLOC (Rhs, 0).last_column; \ + } \ + while (0) +#endif + +#define YYRHSLOC(Rhs, K) ((Rhs)[K]) + + +/* Enable debugging if requested. */ +#if YYDEBUG + +# ifndef YYFPRINTF +# include /* INFRINGES ON USER NAME SPACE */ +# define YYFPRINTF fprintf +# endif + +# define YYDPRINTF(Args) \ +do { \ + if (yydebug) \ + YYFPRINTF Args; \ +} while (0) + + +<%# b4_yylocation_print_define -%> +/* YYLOCATION_PRINT -- Print the location on the stream. + This macro was not mandated originally: define only if we know + we won't break user code: when these are the locations we know. */ + +# ifndef YYLOCATION_PRINT + +# if defined YY_LOCATION_PRINT + + /* Temporary convenience wrapper in case some people defined the + undocumented and private YY_LOCATION_PRINT macros. */ +# define YYLOCATION_PRINT(File, Loc<%= output.user_args %>) YY_LOCATION_PRINT(File, *(Loc)<%= output.user_args %>) + +# elif defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL + +/* Print *YYLOCP on YYO. Private, do not rely on its existence. */ + +YY_ATTRIBUTE_UNUSED +static int +yy_location_print_ (FILE *yyo, YYLTYPE const * const yylocp) +{ + int res = 0; + int end_col = 0 != yylocp->last_column ? yylocp->last_column - 1 : 0; + if (0 <= yylocp->first_line) + { + res += YYFPRINTF (yyo, "%d", yylocp->first_line); + if (0 <= yylocp->first_column) + res += YYFPRINTF (yyo, ".%d", yylocp->first_column); + } + if (0 <= yylocp->last_line) + { + if (yylocp->first_line < yylocp->last_line) + { + res += YYFPRINTF (yyo, "-%d", yylocp->last_line); + if (0 <= end_col) + res += YYFPRINTF (yyo, ".%d", end_col); + } + else if (0 <= end_col && yylocp->first_column < end_col) + res += YYFPRINTF (yyo, "-%d", end_col); + } + return res; +} + +# define YYLOCATION_PRINT yy_location_print_ + + /* Temporary convenience wrapper in case some people defined the + undocumented and private YY_LOCATION_PRINT macros. */ +# define YY_LOCATION_PRINT(File, Loc<%= output.user_args %>) YYLOCATION_PRINT(File, &(Loc)<%= output.user_args %>) + +# else + +# define YYLOCATION_PRINT(File, Loc<%= output.user_args %>) ((void) 0) + /* Temporary convenience wrapper in case some people defined the + undocumented and private YY_LOCATION_PRINT macros. */ +# define YY_LOCATION_PRINT YYLOCATION_PRINT + +# endif +# endif /* !defined YYLOCATION_PRINT */ + + +# define YY_SYMBOL_PRINT(Title, Kind, Value, Location<%= output.user_args %>) \ +do { \ + if (yydebug) \ + { \ + YYFPRINTF (stderr, "%s ", Title); \ + yy_symbol_print (stderr, \ + Kind, Value, Location<%= output.user_args %>); \ + YYFPRINTF (stderr, "\n"); \ + } \ +} while (0) + + +<%# b4_yy_symbol_print_define -%> +/*-----------------------------------. +| Print this symbol's value on YYO. | +`-----------------------------------*/ + +static void +yy_symbol_value_print (FILE *yyo, + yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp<%= output.user_formals %>) +{ + FILE *yyoutput = yyo; +<%= output.parse_param_use("yyoutput", "yylocationp") %> + if (!yyvaluep) + return; + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN +<%# b4_symbol_actions(printer) -%> +switch (yykind) + { +<%= output.symbol_actions_for_printer -%> + default: + break; + } + YY_IGNORE_MAYBE_UNINITIALIZED_END +} + + +/*---------------------------. +| Print this symbol on YYO. | +`---------------------------*/ + +static void +yy_symbol_print (FILE *yyo, + yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp<%= output.user_formals %>) +{ + YYFPRINTF (yyo, "%s %s (", + yykind < YYNTOKENS ? "token" : "nterm", yysymbol_name (yykind)); + + YYLOCATION_PRINT (yyo, yylocationp<%= output.user_args %>); + YYFPRINTF (yyo, ": "); + yy_symbol_value_print (yyo, yykind, yyvaluep, yylocationp<%= output.user_args %>); + YYFPRINTF (yyo, ")"); +} + +/*------------------------------------------------------------------. +| yy_stack_print -- Print the state stack from its BOTTOM up to its | +| TOP (included). | +`------------------------------------------------------------------*/ + +static void +yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop<%= output.user_formals %>) +{ + YYFPRINTF (stderr, "Stack now"); + for (; yybottom <= yytop; yybottom++) + { + int yybot = *yybottom; + YYFPRINTF (stderr, " %d", yybot); + } + YYFPRINTF (stderr, "\n"); +} + +# define YY_STACK_PRINT(Bottom, Top<%= output.user_args %>) \ +do { \ + if (yydebug) \ + yy_stack_print ((Bottom), (Top)<%= output.user_args %>); \ +} while (0) + + +/*------------------------------------------------. +| Report that the YYRULE is going to be reduced. | +`------------------------------------------------*/ + +static void +yy_reduce_print (yy_state_t *yyssp, YYSTYPE *yyvsp, YYLTYPE *yylsp, + int yyrule<%= output.user_formals %>) +{ + int yylno = yyrline[yyrule]; + int yynrhs = yyr2[yyrule]; + int yyi; + YYFPRINTF (stderr, "Reducing stack by rule %d (line %d):\n", + yyrule - 1, yylno); + /* The symbols being reduced. */ + for (yyi = 0; yyi < yynrhs; yyi++) + { + YYFPRINTF (stderr, " $%d = ", yyi + 1); + yy_symbol_print (stderr, + YY_ACCESSING_SYMBOL (+yyssp[yyi + 1 - yynrhs]), + &yyvsp[(yyi + 1) - (yynrhs)], + &(yylsp[(yyi + 1) - (yynrhs)])<%= output.user_args %>); + YYFPRINTF (stderr, "\n"); + } +} + +# define YY_REDUCE_PRINT(Rule<%= output.user_args %>) \ +do { \ + if (yydebug) \ + yy_reduce_print (yyssp, yyvsp, yylsp, Rule<%= output.user_args %>); \ +} while (0) + +/* Nonzero means print parse trace. It is left uninitialized so that + multiple parsers can coexist. */ +#ifndef yydebug +int yydebug; +#endif +#else /* !YYDEBUG */ +# define YYDPRINTF(Args) ((void) 0) +# define YY_SYMBOL_PRINT(Title, Kind, Value, Location<%= output.user_args %>) +# define YY_STACK_PRINT(Bottom, Top<%= output.user_args %>) +# define YY_REDUCE_PRINT(Rule<%= output.user_args %>) +#endif /* !YYDEBUG */ + + +/* YYINITDEPTH -- initial size of the parser's stacks. */ +#ifndef YYINITDEPTH +# define YYINITDEPTH 200 +#endif + +/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only + if the built-in stack extension method is used). + + Do not make this value too large; the results are undefined if + YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) + evaluated with infinite-precision integer arithmetic. */ + +#ifndef YYMAXDEPTH +# define YYMAXDEPTH 10000 +#endif + + +/* Context of a parse error. */ +typedef struct +{ + yy_state_t *yyssp; + yysymbol_kind_t yytoken; + YYLTYPE *yylloc; +} yypcontext_t; + +/* Put in YYARG at most YYARGN of the expected tokens given the + current YYCTX, and return the number of tokens stored in YYARG. If + YYARG is null, return the number of expected tokens (guaranteed to + be less than YYNTOKENS). Return YYENOMEM on memory exhaustion. + Return 0 if there are more than YYARGN expected tokens, yet fill + YYARG up to YYARGN. */ +static int +yypcontext_expected_tokens (const yypcontext_t *yyctx, + yysymbol_kind_t yyarg[], int yyargn) +{ + /* Actual size of YYARG. */ + int yycount = 0; + int yyn = yypact[+*yyctx->yyssp]; + if (!yypact_value_is_default (yyn)) + { + /* Start YYX at -YYN if negative to avoid negative indexes in + YYCHECK. In other words, skip the first -YYN actions for + this state because they are default actions. */ + int yyxbegin = yyn < 0 ? -yyn : 0; + /* Stay within bounds of both yycheck and yytname. */ + int yychecklim = YYLAST - yyn + 1; + int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; + int yyx; + for (yyx = yyxbegin; yyx < yyxend; ++yyx) + if (yycheck[yyx + yyn] == yyx && yyx != YYSYMBOL_YYerror + && !yytable_value_is_error (yytable[yyx + yyn])) + { + if (!yyarg) + ++yycount; + else if (yycount == yyargn) + return 0; + else + yyarg[yycount++] = YY_CAST (yysymbol_kind_t, yyx); + } + } + if (yyarg && yycount == 0 && 0 < yyargn) + yyarg[0] = YYSYMBOL_YYEMPTY; + return yycount; +} + + + + +#ifndef yystrlen +# if defined __GLIBC__ && defined _STRING_H +# define yystrlen(S) (YY_CAST (YYPTRDIFF_T, strlen (S))) +# else +/* Return the length of YYSTR. */ +static YYPTRDIFF_T +yystrlen (const char *yystr) +{ + YYPTRDIFF_T yylen; + for (yylen = 0; yystr[yylen]; yylen++) + continue; + return yylen; +} +# endif +#endif + +#ifndef yystpcpy +# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE +# define yystpcpy stpcpy +# else +/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in + YYDEST. */ +static char * +yystpcpy (char *yydest, const char *yysrc) +{ + char *yyd = yydest; + const char *yys = yysrc; + + while ((*yyd++ = *yys++) != '\0') + continue; + + return yyd - 1; +} +# endif +#endif + +#ifndef yytnamerr +/* Copy to YYRES the contents of YYSTR after stripping away unnecessary + quotes and backslashes, so that it's suitable for yyerror. The + heuristic is that double-quoting is unnecessary unless the string + contains an apostrophe, a comma, or backslash (other than + backslash-backslash). YYSTR is taken from yytname. If YYRES is + null, do not copy; instead, return the length of what the result + would have been. */ +static YYPTRDIFF_T +yytnamerr (char *yyres, const char *yystr) +{ + if (*yystr == '"') + { + YYPTRDIFF_T yyn = 0; + char const *yyp = yystr; + for (;;) + switch (*++yyp) + { + case '\'': + case ',': + goto do_not_strip_quotes; + + case '\\': + if (*++yyp != '\\') + goto do_not_strip_quotes; + else + goto append; + + append: + default: + if (yyres) + yyres[yyn] = *yyp; + yyn++; + break; + + case '"': + if (yyres) + yyres[yyn] = '\0'; + return yyn; + } + do_not_strip_quotes: ; + } + + if (yyres) + return yystpcpy (yyres, yystr) - yyres; + else + return yystrlen (yystr); +} +#endif + + +static int +yy_syntax_error_arguments (const yypcontext_t *yyctx, + yysymbol_kind_t yyarg[], int yyargn) +{ + /* Actual size of YYARG. */ + int yycount = 0; + /* There are many possibilities here to consider: + - If this state is a consistent state with a default action, then + the only way this function was invoked is if the default action + is an error action. In that case, don't check for expected + tokens because there are none. + - The only way there can be no lookahead present (in yychar) is if + this state is a consistent state with a default action. Thus, + detecting the absence of a lookahead is sufficient to determine + that there is no unexpected or expected token to report. In that + case, just report a simple "syntax error". + - Don't assume there isn't a lookahead just because this state is a + consistent state with a default action. There might have been a + previous inconsistent state, consistent state with a non-default + action, or user semantic action that manipulated yychar. + - Of course, the expected token list depends on states to have + correct lookahead information, and it depends on the parser not + to perform extra reductions after fetching a lookahead from the + scanner and before detecting a syntax error. Thus, state merging + (from LALR or IELR) and default reductions corrupt the expected + token list. However, the list is correct for canonical LR with + one exception: it will still contain any token that will not be + accepted due to an error action in a later state. + */ + if (yyctx->yytoken != YYSYMBOL_YYEMPTY) + { + int yyn; + if (yyarg) + yyarg[yycount] = yyctx->yytoken; + ++yycount; + yyn = yypcontext_expected_tokens (yyctx, + yyarg ? yyarg + 1 : yyarg, yyargn - 1); + if (yyn == YYENOMEM) + return YYENOMEM; + else + yycount += yyn; + } + return yycount; +} + +/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message + about the unexpected token YYTOKEN for the state stack whose top is + YYSSP. + + Return 0 if *YYMSG was successfully written. Return -1 if *YYMSG is + not large enough to hold the message. In that case, also set + *YYMSG_ALLOC to the required number of bytes. Return YYENOMEM if the + required number of bytes is too large to store. */ +static int +yysyntax_error (YYPTRDIFF_T *yymsg_alloc, char **yymsg, + const yypcontext_t *yyctx<%= output.user_formals %>) +{ + enum { YYARGS_MAX = 5 }; + /* Internationalized format string. */ + const char *yyformat = YY_NULLPTR; + /* Arguments of yyformat: reported tokens (one for the "unexpected", + one per "expected"). */ + yysymbol_kind_t yyarg[YYARGS_MAX]; + /* Cumulated lengths of YYARG. */ + YYPTRDIFF_T yysize = 0; + + /* Actual size of YYARG. */ + int yycount = yy_syntax_error_arguments (yyctx, yyarg, YYARGS_MAX); + if (yycount == YYENOMEM) + return YYENOMEM; + + switch (yycount) + { +#define YYCASE_(N, S) \ + case N: \ + yyformat = S; \ + break + default: /* Avoid compiler warnings. */ + YYCASE_(0, YY_("syntax error")); + YYCASE_(1, YY_("syntax error, unexpected %s")); + YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); + YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s")); + YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s")); + YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s")); +#undef YYCASE_ + } + + /* Compute error message size. Don't count the "%s"s, but reserve + room for the terminator. */ + yysize = yystrlen (yyformat) - 2 * yycount + 1; + { + int yyi; + for (yyi = 0; yyi < yycount; ++yyi) + { + YYPTRDIFF_T yysize1 + = yysize + yytnamerr (YY_NULLPTR, yytname[yyarg[yyi]]); + if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM) + yysize = yysize1; + else + return YYENOMEM; + } + } + + if (*yymsg_alloc < yysize) + { + *yymsg_alloc = 2 * yysize; + if (! (yysize <= *yymsg_alloc + && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM)) + *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM; + return -1; + } + + /* Avoid sprintf, as that infringes on the user's name space. + Don't have undefined behavior even if the translation + produced a string with the wrong number of "%s"s. */ + { + char *yyp = *yymsg; + int yyi = 0; + while ((*yyp = *yyformat) != '\0') + if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount) + { + yyp += yytnamerr (yyp, yytname[yyarg[yyi++]]); + yyformat += 2; + } + else + { + ++yyp; + ++yyformat; + } + } + return 0; +} + +<%# b4_yydestruct_define %> +/*-----------------------------------------------. +| Release the memory associated to this symbol. | +`-----------------------------------------------*/ + +static void +yydestruct (const char *yymsg, + yysymbol_kind_t yykind, YYSTYPE *yyvaluep, YYLTYPE *yylocationp<%= output.user_formals %>) +{ +<%= output.parse_param_use("yyvaluep", "yylocationp") %> + if (!yymsg) + yymsg = "Deleting"; + YY_SYMBOL_PRINT (yymsg, yykind, yyvaluep, yylocationp<%= output.user_args %>); + + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN + switch (yykind) + { +<%= output.symbol_actions_for_destructor -%> + default: + break; + } + YY_IGNORE_MAYBE_UNINITIALIZED_END +} + + + +<%- if output.error_recovery -%> +#ifndef YYMAXREPAIR +# define YYMAXREPAIR(<%= output.parse_param_name %>) (3) +#endif + +#ifndef YYERROR_RECOVERY_ENABLED +# define YYERROR_RECOVERY_ENABLED(<%= output.parse_param_name %>) (1) +#endif + +enum yy_repair_type { + insert, + delete, + shift, +}; + +struct yy_repair { + enum yy_repair_type type; + yysymbol_kind_t term; +}; +typedef struct yy_repair yy_repair; + +struct yy_repairs { + /* For debug */ + int id; + /* For breadth-first traversing */ + struct yy_repairs *next; + YYPTRDIFF_T stack_length; + /* Bottom of states */ + yy_state_t *states; + /* Top of states */ + yy_state_t *state; + /* repair length */ + int repair_length; + /* */ + struct yy_repairs *prev_repair; + struct yy_repair repair; +}; +typedef struct yy_repairs yy_repairs; + +struct yy_term { + yysymbol_kind_t kind; + YYSTYPE value; + YYLTYPE location; +}; +typedef struct yy_term yy_term; + +struct yy_repair_terms { + int id; + int length; + yy_term terms[]; +}; +typedef struct yy_repair_terms yy_repair_terms; + +static void +yy_error_token_initialize (yysymbol_kind_t yykind, YYSTYPE * const yyvaluep, YYLTYPE * const yylocationp<%= output.user_formals %>) +{ + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN +switch (yykind) + { +<%= output.symbol_actions_for_error_token -%> + default: + break; + } + YY_IGNORE_MAYBE_UNINITIALIZED_END +} + +static yy_repair_terms * +yy_create_repair_terms(yy_repairs *reps<%= output.user_formals %>) +{ + yy_repairs *r = reps; + yy_repair_terms *rep_terms; + int count = 0; + + while (r->prev_repair) + { + count++; + r = r->prev_repair; + } + + rep_terms = (yy_repair_terms *) YYMALLOC (sizeof (yy_repair_terms) + sizeof (yy_term) * count); + rep_terms->id = reps->id; + rep_terms->length = count; + + r = reps; + while (r->prev_repair) + { + rep_terms->terms[count-1].kind = r->repair.term; + count--; + r = r->prev_repair; + } + + return rep_terms; +} + +static void +yy_print_repairs(yy_repairs *reps<%= output.user_formals %>) +{ + yy_repairs *r = reps; + + YYDPRINTF ((stderr, + "id: %d, repair_length: %d, repair_state: %d, prev_repair_id: %d\n", + reps->id, reps->repair_length, *reps->state, reps->prev_repair->id)); + + while (r->prev_repair) + { + YYDPRINTF ((stderr, "%s ", yysymbol_name (r->repair.term))); + r = r->prev_repair; + } + + YYDPRINTF ((stderr, "\n")); +} + +static void +yy_print_repair_terms(yy_repair_terms *rep_terms<%= output.user_formals %>) +{ + for (int i = 0; i < rep_terms->length; i++) + YYDPRINTF ((stderr, "%s ", yysymbol_name (rep_terms->terms[i].kind))); + + YYDPRINTF ((stderr, "\n")); +} + +static void +yy_free_repairs(yy_repairs *reps<%= output.user_formals %>) +{ + while (reps) + { + yy_repairs *r = reps; + reps = reps->next; + YYFREE (r->states); + YYFREE (r); + } +} + +static int +yy_process_repairs(yy_repairs *reps, yysymbol_kind_t token) +{ + int yyn; + int yystate = *reps->state; + int yylen = 0; + yysymbol_kind_t yytoken = token; + + goto yyrecover_backup; + +yyrecover_newstate: + // TODO: check reps->stack_length + reps->state += 1; + *reps->state = (yy_state_t) yystate; + + +yyrecover_backup: + yyn = yypact[yystate]; + if (yypact_value_is_default (yyn)) + goto yyrecover_default; + + /* "Reading a token" */ + if (yytoken == YYSYMBOL_YYEMPTY) + return 1; + + yyn += yytoken; + if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) + goto yyrecover_default; + yyn = yytable[yyn]; + if (yyn <= 0) + { + if (yytable_value_is_error (yyn)) + goto yyrecover_errlab; + yyn = -yyn; + goto yyrecover_reduce; + } + + /* shift */ + yystate = yyn; + yytoken = YYSYMBOL_YYEMPTY; + goto yyrecover_newstate; + + +yyrecover_default: + yyn = yydefact[yystate]; + if (yyn == 0) + goto yyrecover_errlab; + goto yyrecover_reduce; + + +yyrecover_reduce: + yylen = yyr2[yyn]; + /* YYPOPSTACK */ + reps->state -= yylen; + yylen = 0; + + { + const int yylhs = yyr1[yyn] - YYNTOKENS; + const int yyi = yypgoto[yylhs] + *reps->state; + yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *reps->state + ? yytable[yyi] + : yydefgoto[yylhs]); + } + + goto yyrecover_newstate; + +yyrecover_errlab: + return 0; +} + +static yy_repair_terms * +yyrecover(yy_state_t *yyss, yy_state_t *yyssp, int yychar<%= output.user_formals %>) +{ + yysymbol_kind_t yytoken = YYTRANSLATE (yychar); + yy_repair_terms *rep_terms = YY_NULLPTR; + int count = 0; + + yy_repairs *head = (yy_repairs *) YYMALLOC (sizeof (yy_repairs)); + yy_repairs *current = head; + yy_repairs *tail = head; + YYPTRDIFF_T stack_length = yyssp - yyss + 1; + + head->id = count; + head->next = 0; + head->stack_length = stack_length; + head->states = (yy_state_t *) YYMALLOC (sizeof (yy_state_t) * (stack_length)); + head->state = head->states + (yyssp - yyss); + YYCOPY (head->states, yyss, stack_length); + head->repair_length = 0; + head->prev_repair = 0; + + stack_length = (stack_length * 2 > 100) ? (stack_length * 2) : 100; + count++; + + while (current) + { + int yystate = *current->state; + int yyn = yypact[yystate]; + /* See also: yypcontext_expected_tokens */ + if (!yypact_value_is_default (yyn)) + { + int yyxbegin = yyn < 0 ? -yyn : 0; + int yychecklim = YYLAST - yyn + 1; + int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; + int yyx; + for (yyx = yyxbegin; yyx < yyxend; ++yyx) + { + if (yyx != YYSYMBOL_YYerror) + { + if (current->repair_length + 1 > YYMAXREPAIR(<%= output.parse_param_name %>)) + continue; + + yy_repairs *new = (yy_repairs *) YYMALLOC (sizeof (yy_repairs)); + new->id = count; + new->next = 0; + new->stack_length = stack_length; + new->states = (yy_state_t *) YYMALLOC (sizeof (yy_state_t) * (stack_length)); + new->state = new->states + (current->state - current->states); + YYCOPY (new->states, current->states, current->state - current->states + 1); + new->repair_length = current->repair_length + 1; + new->prev_repair = current; + new->repair.type = insert; + new->repair.term = (yysymbol_kind_t) yyx; + + /* Process PDA assuming next token is yyx */ + if (! yy_process_repairs (new, yyx)) + { + YYFREE (new); + continue; + } + + tail->next = new; + tail = new; + count++; + + if (yyx == yytoken) + { + rep_terms = yy_create_repair_terms (current<%= output.user_args %>); + YYDPRINTF ((stderr, "repair_terms found. id: %d, length: %d\n", rep_terms->id, rep_terms->length)); + yy_print_repairs (current<%= output.user_args %>); + yy_print_repair_terms (rep_terms<%= output.user_args %>); + + goto done; + } + + YYDPRINTF ((stderr, + "New repairs is enqueued. count: %d, yystate: %d, yyx: %d\n", + count, yystate, yyx)); + yy_print_repairs (new<%= output.user_args %>); + } + } + } + + current = current->next; + } + +done: + + yy_free_repairs(head<%= output.user_args %>); + + if (!rep_terms) + { + YYDPRINTF ((stderr, "repair_terms not found\n")); + } + + return rep_terms; +} +<%- end -%> + + + +/*----------. +| yyparse. | +`----------*/ + +int +yyparse (<%= output.parse_param %>) +{ +<%# b4_declare_scanner_communication_variables -%> +/* Lookahead token kind. */ +int yychar; + + +/* The semantic value of the lookahead symbol. */ +/* Default value used for initialization, for pacifying older GCCs + or non-GCC compilers. */ +YY_INITIAL_VALUE (static const YYSTYPE yyval_default;) +YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); + +/* Location data for the lookahead symbol. */ +static const YYLTYPE yyloc_default +# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL + = { 1, 1, 1, 1 } +# endif +; +YYLTYPE yylloc = yyloc_default; + +<%# b4_declare_parser_state_variables -%> + /* Number of syntax errors so far. */ + int yynerrs = 0; + YY_USE (yynerrs); /* Silence compiler warning. */ + + yy_state_fast_t yystate = 0; + /* Number of tokens to shift before error messages enabled. */ + int yyerrstatus = 0; + + /* Refer to the stacks through separate pointers, to allow yyoverflow + to reallocate them elsewhere. */ + + /* Their size. */ + YYPTRDIFF_T yystacksize = YYINITDEPTH; + + /* The state stack: array, bottom, top. */ + yy_state_t yyssa[YYINITDEPTH]; + yy_state_t *yyss = yyssa; + yy_state_t *yyssp = yyss; + + /* The semantic value stack: array, bottom, top. */ + YYSTYPE yyvsa[YYINITDEPTH]; + YYSTYPE *yyvs = yyvsa; + YYSTYPE *yyvsp = yyvs; + + /* The location stack: array, bottom, top. */ + YYLTYPE yylsa[YYINITDEPTH]; + YYLTYPE *yyls = yylsa; + YYLTYPE *yylsp = yyls; + + int yyn; + /* The return value of yyparse. */ + int yyresult; + /* Lookahead symbol kind. */ + yysymbol_kind_t yytoken = YYSYMBOL_YYEMPTY; + /* The variables used to return semantic value and location from the + action routines. */ + YYSTYPE yyval; + YYLTYPE yyloc; + + /* The locations where the error started and ended. */ + YYLTYPE yyerror_range[3]; +<%- if output.error_recovery -%> + yy_repair_terms *rep_terms = 0; + yy_term term_backup; + int rep_terms_index; + int yychar_backup; +<%- end -%> + + /* Buffer for error messages, and its allocated size. */ + char yymsgbuf[128]; + char *yymsg = yymsgbuf; + YYPTRDIFF_T yymsg_alloc = sizeof yymsgbuf; + +#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N), yylsp -= (N)) + + /* The number of symbols on the RHS of the reduced rule. + Keep to zero when no symbol should be popped. */ + int yylen = 0; + + YYDPRINTF ((stderr, "Starting parse\n")); + + yychar = YYEMPTY; /* Cause a token to be read. */ + + +<%# b4_user_initial_action -%> +<%= output.user_initial_action("/* User initialization code. */") %> +#line [@oline@] [@ofile@] + + yylsp[0] = yylloc; + goto yysetstate; + + +/*------------------------------------------------------------. +| yynewstate -- push a new state, which is found in yystate. | +`------------------------------------------------------------*/ +yynewstate: + /* In all cases, when you get here, the value and location stacks + have just been pushed. So pushing a state here evens the stacks. */ + yyssp++; + + +/*--------------------------------------------------------------------. +| yysetstate -- set current state (the top of the stack) to yystate. | +`--------------------------------------------------------------------*/ +yysetstate: + YYDPRINTF ((stderr, "Entering state %d\n", yystate)); + YY_ASSERT (0 <= yystate && yystate < YYNSTATES); + YY_IGNORE_USELESS_CAST_BEGIN + *yyssp = YY_CAST (yy_state_t, yystate); + YY_IGNORE_USELESS_CAST_END + YY_STACK_PRINT (yyss, yyssp<%= output.user_args %>); + + if (yyss + yystacksize - 1 <= yyssp) +#if !defined yyoverflow && !defined YYSTACK_RELOCATE + YYNOMEM; +#else + { + /* Get the current used size of the three stacks, in elements. */ + YYPTRDIFF_T yysize = yyssp - yyss + 1; + +# if defined yyoverflow + { + /* Give user a chance to reallocate the stack. Use copies of + these so that the &'s don't force the real ones into + memory. */ + yy_state_t *yyss1 = yyss; + YYSTYPE *yyvs1 = yyvs; + YYLTYPE *yyls1 = yyls; + + /* Each stack pointer address is followed by the size of the + data in use in that stack, in bytes. This used to be a + conditional around just the two extra args, but that might + be undefined if yyoverflow is a macro. */ + yyoverflow (YY_("memory exhausted"), + &yyss1, yysize * YYSIZEOF (*yyssp), + &yyvs1, yysize * YYSIZEOF (*yyvsp), + &yyls1, yysize * YYSIZEOF (*yylsp), + &yystacksize); + yyss = yyss1; + yyvs = yyvs1; + yyls = yyls1; + } +# else /* defined YYSTACK_RELOCATE */ + /* Extend the stack our own way. */ + if (YYMAXDEPTH <= yystacksize) + YYNOMEM; + yystacksize *= 2; + if (YYMAXDEPTH < yystacksize) + yystacksize = YYMAXDEPTH; + + { + yy_state_t *yyss1 = yyss; + union yyalloc *yyptr = + YY_CAST (union yyalloc *, + YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize)))); + if (! yyptr) + YYNOMEM; + YYSTACK_RELOCATE (yyss_alloc, yyss); + YYSTACK_RELOCATE (yyvs_alloc, yyvs); + YYSTACK_RELOCATE (yyls_alloc, yyls); +# undef YYSTACK_RELOCATE + if (yyss1 != yyssa) + YYSTACK_FREE (yyss1); + } +# endif + + yyssp = yyss + yysize - 1; + yyvsp = yyvs + yysize - 1; + yylsp = yyls + yysize - 1; + + YY_IGNORE_USELESS_CAST_BEGIN + YYDPRINTF ((stderr, "Stack size increased to %ld\n", + YY_CAST (long, yystacksize))); + YY_IGNORE_USELESS_CAST_END + + if (yyss + yystacksize - 1 <= yyssp) + YYABORT; + } +#endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */ + + + if (yystate == YYFINAL) + YYACCEPT; + + goto yybackup; + + +/*-----------. +| yybackup. | +`-----------*/ +yybackup: + /* Do appropriate processing given the current state. Read a + lookahead token if we need one and don't already have one. */ + + /* First try to decide what to do without reference to lookahead token. */ + yyn = yypact[yystate]; + if (yypact_value_is_default (yyn)) + goto yydefault; + + /* Not known => get a lookahead token if don't already have one. */ + +<%- if output.error_recovery -%> + if (YYERROR_RECOVERY_ENABLED(<%= output.parse_param_name %>)) + { + if (yychar == YYEMPTY && rep_terms) + { + + if (rep_terms_index < rep_terms->length) + { + YYDPRINTF ((stderr, "An error recovery token is used\n")); + yy_term term = rep_terms->terms[rep_terms_index]; + yytoken = term.kind; + yylval = term.value; + yylloc = term.location; + yychar = yytranslate_inverted[yytoken]; + YY_SYMBOL_PRINT ("Next error recovery token is", yytoken, &yylval, &yylloc<%= output.user_args %>); + rep_terms_index++; + } + else + { + YYDPRINTF ((stderr, "Error recovery is completed\n")); + yytoken = term_backup.kind; + yylval = term_backup.value; + yylloc = term_backup.location; + yychar = yychar_backup; + YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc<%= output.user_args %>); + + YYFREE (rep_terms); + rep_terms = 0; + yychar_backup = 0; + } + } + } +<%- end -%> + /* YYCHAR is either empty, or end-of-input, or a valid lookahead. */ + if (yychar == YYEMPTY) + { + YYDPRINTF ((stderr, "Reading a token\n")); + yychar = yylex <%= output.yylex_formals %>; + } + + if (yychar <= <%= output.eof_symbol.id.s_value %>) + { + yychar = <%= output.eof_symbol.id.s_value %>; + yytoken = <%= output.eof_symbol.enum_name %>; + YYDPRINTF ((stderr, "Now at end of input.\n")); + } + else if (yychar == <%= output.error_symbol.id.s_value %>) + { + /* The scanner already issued an error message, process directly + to error recovery. But do not keep the error token as + lookahead, it is too special and may lead us to an endless + loop in error recovery. */ + yychar = <%= output.undef_symbol.id.s_value %>; + yytoken = <%= output.error_symbol.enum_name %>; + yyerror_range[1] = yylloc; + goto yyerrlab1; + } + else + { + yytoken = YYTRANSLATE (yychar); + YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc<%= output.user_args %>); + } + + /* If the proper action on seeing token YYTOKEN is to reduce or to + detect an error, take that action. */ + yyn += yytoken; + if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) + goto yydefault; + yyn = yytable[yyn]; + if (yyn <= 0) + { + if (yytable_value_is_error (yyn)) + goto yyerrlab; + yyn = -yyn; + goto yyreduce; + } + + /* Count tokens shifted since error; after three, turn off error + status. */ + if (yyerrstatus) + yyerrstatus--; + + /* Shift the lookahead token. */ + YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc<%= output.user_args %>); + yystate = yyn; + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN + *++yyvsp = yylval; + YY_IGNORE_MAYBE_UNINITIALIZED_END + *++yylsp = yylloc; +<%= output.after_shift_function("/* %after-shift code. */") %> + + /* Discard the shifted token. */ + yychar = YYEMPTY; + goto yynewstate; + + +/*-----------------------------------------------------------. +| yydefault -- do the default action for the current state. | +`-----------------------------------------------------------*/ +yydefault: + yyn = yydefact[yystate]; + if (yyn == 0) + goto yyerrlab; + goto yyreduce; + + +/*-----------------------------. +| yyreduce -- do a reduction. | +`-----------------------------*/ +yyreduce: + /* yyn is the number of a rule to reduce with. */ + yylen = yyr2[yyn]; + + /* If YYLEN is nonzero, implement the default value of the action: + '$$ = $1'. + + Otherwise, the following line sets YYVAL to garbage. + This behavior is undocumented and Bison + users should not rely upon it. Assigning to YYVAL + unconditionally makes the parser a bit smaller, and it avoids a + GCC warning that YYVAL may be used uninitialized. */ + yyval = yyvsp[1-yylen]; +<%= output.before_reduce_function("/* %before-reduce function. */") %> + + /* Default location. */ + YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen); + yyerror_range[1] = yyloc; + YY_REDUCE_PRINT (yyn<%= output.user_args %>); + switch (yyn) + { +<%= output.user_actions -%> + + default: break; + } + /* User semantic actions sometimes alter yychar, and that requires + that yytoken be updated with the new translation. We take the + approach of translating immediately before every use of yytoken. + One alternative is translating here after every semantic action, + but that translation would be missed if the semantic action invokes + YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or + if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an + incorrect destructor might then be invoked immediately. In the + case of YYERROR or YYBACKUP, subsequent parser actions might lead + to an incorrect destructor call or verbose syntax error message + before the lookahead is translated. */ + YY_SYMBOL_PRINT ("-> $$ =", YY_CAST (yysymbol_kind_t, yyr1[yyn]), &yyval, &yyloc<%= output.user_args %>); + + YYPOPSTACK (yylen); +<%= output.after_reduce_function("/* %after-reduce function. */") %> + yylen = 0; + + *++yyvsp = yyval; + *++yylsp = yyloc; + + /* Now 'shift' the result of the reduction. Determine what state + that goes to, based on the state we popped back to and the rule + number reduced by. */ + { + const int yylhs = yyr1[yyn] - YYNTOKENS; + const int yyi = yypgoto[yylhs] + *yyssp; + yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp + ? yytable[yyi] + : yydefgoto[yylhs]); + } + + goto yynewstate; + + +/*--------------------------------------. +| yyerrlab -- here on detecting error. | +`--------------------------------------*/ +yyerrlab: + /* Make sure we have latest lookahead translation. See comments at + user semantic actions for why this is necessary. */ + yytoken = yychar == YYEMPTY ? YYSYMBOL_YYEMPTY : YYTRANSLATE (yychar); + /* If not already recovering from an error, report this error. */ + if (!yyerrstatus) + { + ++yynerrs; + { + yypcontext_t yyctx + = {yyssp, yytoken, &yylloc}; + char const *yymsgp = YY_("syntax error"); + int yysyntax_error_status; + yysyntax_error_status = yysyntax_error (&yymsg_alloc, &yymsg, &yyctx<%= output.user_args %>); + if (yysyntax_error_status == 0) + yymsgp = yymsg; + else if (yysyntax_error_status == -1) + { + if (yymsg != yymsgbuf) + YYSTACK_FREE (yymsg); + yymsg = YY_CAST (char *, + YYSTACK_ALLOC (YY_CAST (YYSIZE_T, yymsg_alloc))); + if (yymsg) + { + yysyntax_error_status + = yysyntax_error (&yymsg_alloc, &yymsg, &yyctx<%= output.user_args %>); + yymsgp = yymsg; + } + else + { + yymsg = yymsgbuf; + yymsg_alloc = sizeof yymsgbuf; + yysyntax_error_status = YYENOMEM; + } + } + yyerror (<%= output.yyerror_args %>, yymsgp); + if (yysyntax_error_status == YYENOMEM) + YYNOMEM; + } + } + + yyerror_range[1] = yylloc; + if (yyerrstatus == 3) + { + /* If just tried and failed to reuse lookahead token after an + error, discard it. */ + + if (yychar <= <%= output.eof_symbol.id.s_value %>) + { + /* Return failure if at end of input. */ + if (yychar == <%= output.eof_symbol.id.s_value %>) + YYABORT; + } + else + { + yydestruct ("Error: discarding", + yytoken, &yylval, &yylloc<%= output.user_args %>); + yychar = YYEMPTY; + } + } + + /* Else will try to reuse lookahead token after shifting the error + token. */ + goto yyerrlab1; + + +/*---------------------------------------------------. +| yyerrorlab -- error raised explicitly by YYERROR. | +`---------------------------------------------------*/ +yyerrorlab: + /* Pacify compilers when the user code never invokes YYERROR and the + label yyerrorlab therefore never appears in user code. */ + if (0) + YYERROR; + ++yynerrs; + + /* Do not reclaim the symbols of the rule whose action triggered + this YYERROR. */ + YYPOPSTACK (yylen); +<%= output.after_pop_stack_function("yylen", "/* %after-pop-stack function. */") %> + yylen = 0; + YY_STACK_PRINT (yyss, yyssp<%= output.user_args %>); + yystate = *yyssp; + goto yyerrlab1; + + +/*-------------------------------------------------------------. +| yyerrlab1 -- common code for both syntax error and YYERROR. | +`-------------------------------------------------------------*/ +yyerrlab1: +<%- if output.error_recovery -%> + if (YYERROR_RECOVERY_ENABLED(<%= output.parse_param_name %>)) + { + rep_terms = yyrecover (yyss, yyssp, yychar<%= output.user_args %>); + if (rep_terms) + { + for (int i = 0; i < rep_terms->length; i++) + { + yy_term *term = &rep_terms->terms[i]; + yy_error_token_initialize (term->kind, &term->value, &term->location<%= output.user_args %>); + } + + yychar_backup = yychar; + /* Can be packed into (the tail of) rep_terms? */ + term_backup.kind = yytoken; + term_backup.value = yylval; + term_backup.location = yylloc; + rep_terms_index = 0; + yychar = YYEMPTY; + + goto yybackup; + } + } +<%- end -%> + yyerrstatus = 3; /* Each real token shifted decrements this. */ + + /* Pop stack until we find a state that shifts the error token. */ + for (;;) + { + yyn = yypact[yystate]; + if (!yypact_value_is_default (yyn)) + { + yyn += YYSYMBOL_YYerror; + if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYSYMBOL_YYerror) + { + yyn = yytable[yyn]; + if (0 < yyn) + break; + } + } + + /* Pop the current state because it cannot handle the error token. */ + if (yyssp == yyss) + YYABORT; + + yyerror_range[1] = *yylsp; + yydestruct ("Error: popping", + YY_ACCESSING_SYMBOL (yystate), yyvsp, yylsp<%= output.user_args %>); + YYPOPSTACK (1); +<%= output.after_pop_stack_function(1, "/* %after-pop-stack function. */") %> + yystate = *yyssp; + YY_STACK_PRINT (yyss, yyssp<%= output.user_args %>); + } + + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN + *++yyvsp = yylval; + YY_IGNORE_MAYBE_UNINITIALIZED_END + + yyerror_range[2] = yylloc; + ++yylsp; + YYLLOC_DEFAULT (*yylsp, yyerror_range, 2); + + /* Shift the error token. */ + YY_SYMBOL_PRINT ("Shifting", YY_ACCESSING_SYMBOL (yyn), yyvsp, yylsp<%= output.user_args %>); +<%= output.after_shift_error_token_function("/* %after-shift-error-token code. */") %> + + yystate = yyn; + goto yynewstate; + + +/*-------------------------------------. +| yyacceptlab -- YYACCEPT comes here. | +`-------------------------------------*/ +yyacceptlab: + yyresult = 0; + goto yyreturnlab; + + +/*-----------------------------------. +| yyabortlab -- YYABORT comes here. | +`-----------------------------------*/ +yyabortlab: + yyresult = 1; + goto yyreturnlab; + + +/*-----------------------------------------------------------. +| yyexhaustedlab -- YYNOMEM (memory exhaustion) comes here. | +`-----------------------------------------------------------*/ +yyexhaustedlab: + yyerror (<%= output.yyerror_args %>, YY_("memory exhausted")); + yyresult = 2; + goto yyreturnlab; + + +/*----------------------------------------------------------. +| yyreturnlab -- parsing is finished, clean up and return. | +`----------------------------------------------------------*/ +yyreturnlab: + if (yychar != YYEMPTY) + { + /* Make sure we have latest lookahead translation. See comments at + user semantic actions for why this is necessary. */ + yytoken = YYTRANSLATE (yychar); + yydestruct ("Cleanup: discarding lookahead", + yytoken, &yylval, &yylloc<%= output.user_args %>); + } + /* Do not reclaim the symbols of the rule whose action triggered + this YYABORT or YYACCEPT. */ + YYPOPSTACK (yylen); + YY_STACK_PRINT (yyss, yyssp<%= output.user_args %>); + while (yyssp != yyss) + { + yydestruct ("Cleanup: popping", + YY_ACCESSING_SYMBOL (+*yyssp), yyvsp, yylsp<%= output.user_args %>); + YYPOPSTACK (1); + } +#ifndef yyoverflow + if (yyss != yyssa) + YYSTACK_FREE (yyss); +#endif + if (yymsg != yymsgbuf) + YYSTACK_FREE (yymsg); + return yyresult; +} + +<%# b4_percent_code_get([[epilogue]]) -%> +<%- if output.aux.epilogue -%> +#line <%= output.aux.epilogue_first_lineno - 1 %> "<%= output.grammar_file_path %>" +<%= output.aux.epilogue -%> +<%- end -%> diff --git a/tools/lrama/template/bison/yacc.h b/tools/lrama/template/bison/yacc.h new file mode 100644 index 000000000..848dbf596 --- /dev/null +++ b/tools/lrama/template/bison/yacc.h @@ -0,0 +1,40 @@ +<%# b4_generated_by -%> +/* A Bison parser, made by Lrama <%= Lrama::VERSION %>. */ + +<%# b4_copyright -%> +/* Bison interface for Yacc-like parsers in C + + Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation, + Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + special exception, which will cause the skeleton and the resulting + Bison output files to be licensed under the GNU General Public + License without this special exception. + + This special exception was added by the Free Software Foundation in + version 2.2 of Bison. */ + +<%# b4_disclaimer -%> +/* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual, + especially those whose name start with YY_ or yy_. They are + private implementation details that can be changed or removed. */ +<%= output.render_partial("bison/_yacc.h") %>