diff --git a/examples/parsers/arithmetic.c b/examples/parsers/arithmetic.c index eac6df51..353ebb57 100644 --- a/examples/parsers/arithmetic.c +++ b/examples/parsers/arithmetic.c @@ -26,6 +26,18 @@ SYMBOL_NAMES = { "token2", }; +HIDDEN_SYMBOL_FLAGS = { + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, +}; + LEX_FN() { START_LEXER(); switch (LEX_STATE()) { @@ -144,9 +156,9 @@ PARSE_TABLE() { STATE(2); SET_LEX_STATE(15); - REDUCE(ts_sym_plus, ts_sym_term, 1, COLLAPSE({0})) + REDUCE(ts_sym_plus, ts_sym_term, 1) SHIFT(ts_sym_times, 3) - REDUCE(ts_builtin_sym_end, ts_sym_term, 1, COLLAPSE({0})) + REDUCE(ts_builtin_sym_end, ts_sym_term, 1) END_STATE(); STATE(3); @@ -159,14 +171,14 @@ PARSE_TABLE() { STATE(4); SET_LEX_STATE(1); - REDUCE(ts_sym_plus, ts_sym_term, 3, COLLAPSE({0, 0, 0})) - REDUCE(ts_builtin_sym_end, ts_sym_term, 3, COLLAPSE({0, 0, 0})) + REDUCE(ts_sym_plus, ts_sym_term, 3) + REDUCE(ts_builtin_sym_end, ts_sym_term, 3) END_STATE(); STATE(5); SET_LEX_STATE(1); - REDUCE(ts_sym_plus, ts_sym_factor, 1, COLLAPSE({0})) - REDUCE(ts_builtin_sym_end, ts_sym_factor, 1, COLLAPSE({0})) + REDUCE(ts_sym_plus, ts_sym_factor, 1) + REDUCE(ts_builtin_sym_end, ts_sym_factor, 1) END_STATE(); STATE(6); @@ -187,15 +199,15 @@ PARSE_TABLE() { STATE(8); SET_LEX_STATE(1); - REDUCE(ts_sym_plus, ts_sym_factor, 3, COLLAPSE({1, 0, 1})) - REDUCE(ts_builtin_sym_end, ts_sym_factor, 3, COLLAPSE({1, 0, 1})) + REDUCE(ts_sym_plus, ts_sym_factor, 3) + REDUCE(ts_builtin_sym_end, ts_sym_factor, 3) END_STATE(); STATE(9); SET_LEX_STATE(6); - REDUCE(ts_sym_plus, ts_sym_term, 1, COLLAPSE({0})) + REDUCE(ts_sym_plus, ts_sym_term, 1) SHIFT(ts_sym_times, 10) - REDUCE(ts_aux_sym_token2, ts_sym_term, 1, COLLAPSE({0})) + REDUCE(ts_aux_sym_token2, ts_sym_term, 1) END_STATE(); STATE(10); @@ -208,14 +220,14 @@ PARSE_TABLE() { STATE(11); SET_LEX_STATE(5); - REDUCE(ts_sym_plus, ts_sym_term, 3, COLLAPSE({0, 0, 0})) - REDUCE(ts_aux_sym_token2, ts_sym_term, 3, COLLAPSE({0, 0, 0})) + REDUCE(ts_sym_plus, ts_sym_term, 3) + REDUCE(ts_aux_sym_token2, ts_sym_term, 3) END_STATE(); STATE(12); SET_LEX_STATE(5); - REDUCE(ts_sym_plus, ts_sym_factor, 1, COLLAPSE({0})) - REDUCE(ts_aux_sym_token2, ts_sym_factor, 1, COLLAPSE({0})) + REDUCE(ts_sym_plus, ts_sym_factor, 1) + REDUCE(ts_aux_sym_token2, ts_sym_factor, 1) END_STATE(); STATE(13); @@ -236,21 +248,21 @@ PARSE_TABLE() { STATE(15); SET_LEX_STATE(5); - REDUCE(ts_sym_plus, ts_sym_factor, 3, COLLAPSE({1, 0, 1})) - REDUCE(ts_aux_sym_token2, ts_sym_factor, 3, COLLAPSE({1, 0, 1})) + REDUCE(ts_sym_plus, ts_sym_factor, 3) + REDUCE(ts_aux_sym_token2, ts_sym_factor, 3) END_STATE(); STATE(16); SET_LEX_STATE(6); - REDUCE(ts_sym_plus, ts_sym_factor, 1, COLLAPSE({0})) - REDUCE(ts_sym_times, ts_sym_factor, 1, COLLAPSE({0})) - REDUCE(ts_aux_sym_token2, ts_sym_factor, 1, COLLAPSE({0})) + REDUCE(ts_sym_plus, ts_sym_factor, 1) + REDUCE(ts_sym_times, ts_sym_factor, 1) + REDUCE(ts_aux_sym_token2, ts_sym_factor, 1) END_STATE(); STATE(17); SET_LEX_STATE(5); SHIFT(ts_sym_plus, 18) - REDUCE(ts_aux_sym_token2, ts_sym_expression, 1, COLLAPSE({0})) + REDUCE(ts_aux_sym_token2, ts_sym_expression, 1) END_STATE(); STATE(18); @@ -265,7 +277,7 @@ PARSE_TABLE() { STATE(19); SET_LEX_STATE(14); SHIFT(ts_sym_times, 20) - REDUCE(ts_aux_sym_token2, ts_sym_term, 1, COLLAPSE({0})) + REDUCE(ts_aux_sym_token2, ts_sym_term, 1) END_STATE(); STATE(20); @@ -278,12 +290,12 @@ PARSE_TABLE() { STATE(21); SET_LEX_STATE(3); - REDUCE(ts_aux_sym_token2, ts_sym_term, 3, COLLAPSE({0, 0, 0})) + REDUCE(ts_aux_sym_token2, ts_sym_term, 3) END_STATE(); STATE(22); SET_LEX_STATE(3); - REDUCE(ts_aux_sym_token2, ts_sym_factor, 1, COLLAPSE({0})) + REDUCE(ts_aux_sym_token2, ts_sym_factor, 1) END_STATE(); STATE(23); @@ -304,7 +316,7 @@ PARSE_TABLE() { STATE(25); SET_LEX_STATE(3); - REDUCE(ts_aux_sym_token2, ts_sym_factor, 3, COLLAPSE({1, 0, 1})) + REDUCE(ts_aux_sym_token2, ts_sym_factor, 3) END_STATE(); STATE(26); @@ -325,20 +337,20 @@ PARSE_TABLE() { STATE(28); SET_LEX_STATE(6); - REDUCE(ts_sym_plus, ts_sym_factor, 3, COLLAPSE({1, 0, 1})) - REDUCE(ts_sym_times, ts_sym_factor, 3, COLLAPSE({1, 0, 1})) - REDUCE(ts_aux_sym_token2, ts_sym_factor, 3, COLLAPSE({1, 0, 1})) + REDUCE(ts_sym_plus, ts_sym_factor, 3) + REDUCE(ts_sym_times, ts_sym_factor, 3) + REDUCE(ts_aux_sym_token2, ts_sym_factor, 3) END_STATE(); STATE(29); SET_LEX_STATE(14); - REDUCE(ts_sym_times, ts_sym_factor, 1, COLLAPSE({0})) - REDUCE(ts_aux_sym_token2, ts_sym_factor, 1, COLLAPSE({0})) + REDUCE(ts_sym_times, ts_sym_factor, 1) + REDUCE(ts_aux_sym_token2, ts_sym_factor, 1) END_STATE(); STATE(30); SET_LEX_STATE(3); - REDUCE(ts_aux_sym_token2, ts_sym_expression, 3, COLLAPSE({0, 0, 0})) + REDUCE(ts_aux_sym_token2, ts_sym_expression, 3) END_STATE(); STATE(31); @@ -359,21 +371,21 @@ PARSE_TABLE() { STATE(33); SET_LEX_STATE(14); - REDUCE(ts_sym_times, ts_sym_factor, 3, COLLAPSE({1, 0, 1})) - REDUCE(ts_aux_sym_token2, ts_sym_factor, 3, COLLAPSE({1, 0, 1})) + REDUCE(ts_sym_times, ts_sym_factor, 3) + REDUCE(ts_aux_sym_token2, ts_sym_factor, 3) END_STATE(); STATE(34); SET_LEX_STATE(15); - REDUCE(ts_sym_plus, ts_sym_factor, 1, COLLAPSE({0})) - REDUCE(ts_sym_times, ts_sym_factor, 1, COLLAPSE({0})) - REDUCE(ts_builtin_sym_end, ts_sym_factor, 1, COLLAPSE({0})) + REDUCE(ts_sym_plus, ts_sym_factor, 1) + REDUCE(ts_sym_times, ts_sym_factor, 1) + REDUCE(ts_builtin_sym_end, ts_sym_factor, 1) END_STATE(); STATE(35); SET_LEX_STATE(1); SHIFT(ts_sym_plus, 36) - REDUCE(ts_builtin_sym_end, ts_sym_expression, 1, COLLAPSE({0})) + REDUCE(ts_builtin_sym_end, ts_sym_expression, 1) END_STATE(); STATE(36); @@ -388,7 +400,7 @@ PARSE_TABLE() { STATE(37); SET_LEX_STATE(16); SHIFT(ts_sym_times, 38) - REDUCE(ts_builtin_sym_end, ts_sym_term, 1, COLLAPSE({0})) + REDUCE(ts_builtin_sym_end, ts_sym_term, 1) END_STATE(); STATE(38); @@ -401,12 +413,12 @@ PARSE_TABLE() { STATE(39); SET_LEX_STATE(0); - REDUCE(ts_builtin_sym_end, ts_sym_term, 3, COLLAPSE({0, 0, 0})) + REDUCE(ts_builtin_sym_end, ts_sym_term, 3) END_STATE(); STATE(40); SET_LEX_STATE(0); - REDUCE(ts_builtin_sym_end, ts_sym_factor, 1, COLLAPSE({0})) + REDUCE(ts_builtin_sym_end, ts_sym_factor, 1) END_STATE(); STATE(41); @@ -427,18 +439,18 @@ PARSE_TABLE() { STATE(43); SET_LEX_STATE(0); - REDUCE(ts_builtin_sym_end, ts_sym_factor, 3, COLLAPSE({1, 0, 1})) + REDUCE(ts_builtin_sym_end, ts_sym_factor, 3) END_STATE(); STATE(44); SET_LEX_STATE(16); - REDUCE(ts_sym_times, ts_sym_factor, 1, COLLAPSE({0})) - REDUCE(ts_builtin_sym_end, ts_sym_factor, 1, COLLAPSE({0})) + REDUCE(ts_sym_times, ts_sym_factor, 1) + REDUCE(ts_builtin_sym_end, ts_sym_factor, 1) END_STATE(); STATE(45); SET_LEX_STATE(0); - REDUCE(ts_builtin_sym_end, ts_sym_expression, 3, COLLAPSE({0, 0, 0})) + REDUCE(ts_builtin_sym_end, ts_sym_expression, 3) END_STATE(); STATE(46); @@ -459,8 +471,8 @@ PARSE_TABLE() { STATE(48); SET_LEX_STATE(16); - REDUCE(ts_sym_times, ts_sym_factor, 3, COLLAPSE({1, 0, 1})) - REDUCE(ts_builtin_sym_end, ts_sym_factor, 3, COLLAPSE({1, 0, 1})) + REDUCE(ts_sym_times, ts_sym_factor, 3) + REDUCE(ts_builtin_sym_end, ts_sym_factor, 3) END_STATE(); STATE(49); @@ -481,9 +493,9 @@ PARSE_TABLE() { STATE(51); SET_LEX_STATE(15); - REDUCE(ts_sym_plus, ts_sym_factor, 3, COLLAPSE({1, 0, 1})) - REDUCE(ts_sym_times, ts_sym_factor, 3, COLLAPSE({1, 0, 1})) - REDUCE(ts_builtin_sym_end, ts_sym_factor, 3, COLLAPSE({1, 0, 1})) + REDUCE(ts_sym_plus, ts_sym_factor, 3) + REDUCE(ts_sym_times, ts_sym_factor, 3) + REDUCE(ts_builtin_sym_end, ts_sym_factor, 3) END_STATE(); END_TABLE(); diff --git a/examples/parsers/javascript.c b/examples/parsers/javascript.c index 19ce245f..117051ad 100644 --- a/examples/parsers/javascript.c +++ b/examples/parsers/javascript.c @@ -74,6 +74,42 @@ SYMBOL_NAMES = { "token9", }; +HIDDEN_SYMBOL_FLAGS = { + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, +}; + LEX_FN() { START_LEXER(); switch (LEX_STATE()) { @@ -729,7 +765,7 @@ PARSE_TABLE() { SHIFT(ts_aux_sym_repeat_helper1, 112) SHIFT(ts_aux_sym_token10, 20) SHIFT(ts_aux_sym_token5, 69) - REDUCE(ts_builtin_sym_end, ts_aux_sym_repeat_helper1, 0, COLLAPSE({})) + REDUCE(ts_builtin_sym_end, ts_aux_sym_repeat_helper1, 0) END_STATE(); STATE(1); @@ -755,7 +791,7 @@ PARSE_TABLE() { STATE(3); SET_LEX_STATE(0); - REDUCE(ts_aux_sym_token4, ts_sym_literal, 1, COLLAPSE({0})) + REDUCE(ts_aux_sym_token4, ts_sym_literal, 1) END_STATE(); STATE(4); @@ -771,17 +807,17 @@ PARSE_TABLE() { STATE(6); SET_LEX_STATE(2); - REDUCE(ts_sym__IF, ts_sym_if_statement, 5, COLLAPSE({1, 1, 0, 1, 0})) - REDUCE(ts_sym__VAR, ts_sym_if_statement, 5, COLLAPSE({1, 1, 0, 1, 0})) - REDUCE(ts_sym_false, ts_sym_if_statement, 5, COLLAPSE({1, 1, 0, 1, 0})) - REDUCE(ts_sym_identifier, ts_sym_if_statement, 5, COLLAPSE({1, 1, 0, 1, 0})) - REDUCE(ts_sym_null, ts_sym_if_statement, 5, COLLAPSE({1, 1, 0, 1, 0})) - REDUCE(ts_sym_number, ts_sym_if_statement, 5, COLLAPSE({1, 1, 0, 1, 0})) - REDUCE(ts_sym_string, ts_sym_if_statement, 5, COLLAPSE({1, 1, 0, 1, 0})) - REDUCE(ts_sym_true, ts_sym_if_statement, 5, COLLAPSE({1, 1, 0, 1, 0})) - REDUCE(ts_aux_sym_token10, ts_sym_if_statement, 5, COLLAPSE({1, 1, 0, 1, 0})) - REDUCE(ts_aux_sym_token5, ts_sym_if_statement, 5, COLLAPSE({1, 1, 0, 1, 0})) - REDUCE(ts_builtin_sym_end, ts_sym_if_statement, 5, COLLAPSE({1, 1, 0, 1, 0})) + REDUCE(ts_sym__IF, ts_sym_if_statement, 5) + REDUCE(ts_sym__VAR, ts_sym_if_statement, 5) + REDUCE(ts_sym_false, ts_sym_if_statement, 5) + REDUCE(ts_sym_identifier, ts_sym_if_statement, 5) + REDUCE(ts_sym_null, ts_sym_if_statement, 5) + REDUCE(ts_sym_number, ts_sym_if_statement, 5) + REDUCE(ts_sym_string, ts_sym_if_statement, 5) + REDUCE(ts_sym_true, ts_sym_if_statement, 5) + REDUCE(ts_aux_sym_token10, ts_sym_if_statement, 5) + REDUCE(ts_aux_sym_token5, ts_sym_if_statement, 5) + REDUCE(ts_builtin_sym_end, ts_sym_if_statement, 5) END_STATE(); STATE(7); @@ -804,7 +840,7 @@ PARSE_TABLE() { SHIFT(ts_aux_sym_repeat_helper2, 103) SHIFT(ts_aux_sym_token10, 20) SHIFT(ts_aux_sym_token5, 69) - REDUCE(ts_aux_sym_token6, ts_aux_sym_repeat_helper2, 0, COLLAPSE({})) + REDUCE(ts_aux_sym_token6, ts_aux_sym_repeat_helper2, 0) END_STATE(); STATE(8); @@ -841,17 +877,17 @@ PARSE_TABLE() { STATE(12); SET_LEX_STATE(56); - REDUCE(ts_sym__IF, ts_sym_if_statement, 5, COLLAPSE({1, 1, 0, 1, 0})) - REDUCE(ts_sym__VAR, ts_sym_if_statement, 5, COLLAPSE({1, 1, 0, 1, 0})) - REDUCE(ts_sym_false, ts_sym_if_statement, 5, COLLAPSE({1, 1, 0, 1, 0})) - REDUCE(ts_sym_identifier, ts_sym_if_statement, 5, COLLAPSE({1, 1, 0, 1, 0})) - REDUCE(ts_sym_null, ts_sym_if_statement, 5, COLLAPSE({1, 1, 0, 1, 0})) - REDUCE(ts_sym_number, ts_sym_if_statement, 5, COLLAPSE({1, 1, 0, 1, 0})) - REDUCE(ts_sym_string, ts_sym_if_statement, 5, COLLAPSE({1, 1, 0, 1, 0})) - REDUCE(ts_sym_true, ts_sym_if_statement, 5, COLLAPSE({1, 1, 0, 1, 0})) - REDUCE(ts_aux_sym_token10, ts_sym_if_statement, 5, COLLAPSE({1, 1, 0, 1, 0})) - REDUCE(ts_aux_sym_token5, ts_sym_if_statement, 5, COLLAPSE({1, 1, 0, 1, 0})) - REDUCE(ts_aux_sym_token6, ts_sym_if_statement, 5, COLLAPSE({1, 1, 0, 1, 0})) + REDUCE(ts_sym__IF, ts_sym_if_statement, 5) + REDUCE(ts_sym__VAR, ts_sym_if_statement, 5) + REDUCE(ts_sym_false, ts_sym_if_statement, 5) + REDUCE(ts_sym_identifier, ts_sym_if_statement, 5) + REDUCE(ts_sym_null, ts_sym_if_statement, 5) + REDUCE(ts_sym_number, ts_sym_if_statement, 5) + REDUCE(ts_sym_string, ts_sym_if_statement, 5) + REDUCE(ts_sym_true, ts_sym_if_statement, 5) + REDUCE(ts_aux_sym_token10, ts_sym_if_statement, 5) + REDUCE(ts_aux_sym_token5, ts_sym_if_statement, 5) + REDUCE(ts_aux_sym_token6, ts_sym_if_statement, 5) END_STATE(); STATE(13); @@ -874,7 +910,7 @@ PARSE_TABLE() { SHIFT(ts_aux_sym_repeat_helper2, 85) SHIFT(ts_aux_sym_token10, 20) SHIFT(ts_aux_sym_token5, 69) - REDUCE(ts_aux_sym_token6, ts_aux_sym_repeat_helper2, 0, COLLAPSE({})) + REDUCE(ts_aux_sym_token6, ts_aux_sym_repeat_helper2, 0) END_STATE(); STATE(14); @@ -905,20 +941,20 @@ PARSE_TABLE() { STATE(17); SET_LEX_STATE(58); - REDUCE(ts_aux_sym_token1, ts_sym_literal, 1, COLLAPSE({0})) - REDUCE(ts_aux_sym_token2, ts_sym_literal, 1, COLLAPSE({0})) + REDUCE(ts_aux_sym_token1, ts_sym_literal, 1) + REDUCE(ts_aux_sym_token2, ts_sym_literal, 1) END_STATE(); STATE(18); SET_LEX_STATE(58); - REDUCE(ts_aux_sym_token1, ts_sym_assignment, 4, COLLAPSE({1, 0, 1, 0})) - REDUCE(ts_aux_sym_token2, ts_sym_assignment, 4, COLLAPSE({1, 0, 1, 0})) + REDUCE(ts_aux_sym_token1, ts_sym_assignment, 4) + REDUCE(ts_aux_sym_token2, ts_sym_assignment, 4) END_STATE(); STATE(19); SET_LEX_STATE(58); - REDUCE(ts_aux_sym_token1, ts_sym_expression, 1, COLLAPSE({0})) - REDUCE(ts_aux_sym_token2, ts_sym_expression, 1, COLLAPSE({0})) + REDUCE(ts_aux_sym_token1, ts_sym_expression, 1) + REDUCE(ts_aux_sym_token2, ts_sym_expression, 1) END_STATE(); STATE(20); @@ -941,14 +977,14 @@ PARSE_TABLE() { STATE(21); SET_LEX_STATE(61); - REDUCE(ts_aux_sym_token11, ts_sym_literal, 1, COLLAPSE({0})) - REDUCE(ts_aux_sym_token9, ts_sym_literal, 1, COLLAPSE({0})) + REDUCE(ts_aux_sym_token11, ts_sym_literal, 1) + REDUCE(ts_aux_sym_token9, ts_sym_literal, 1) END_STATE(); STATE(22); SET_LEX_STATE(61); SHIFT(ts_aux_sym_repeat_helper4, 23) - REDUCE(ts_aux_sym_token11, ts_aux_sym_repeat_helper4, 0, COLLAPSE({})) + REDUCE(ts_aux_sym_token11, ts_aux_sym_repeat_helper4, 0) SHIFT(ts_aux_sym_token9, 25) END_STATE(); @@ -959,8 +995,8 @@ PARSE_TABLE() { STATE(24); SET_LEX_STATE(58); - REDUCE(ts_aux_sym_token1, ts_sym_array, 4, COLLAPSE({1, 0, 1, 1})) - REDUCE(ts_aux_sym_token2, ts_sym_array, 4, COLLAPSE({1, 0, 1, 1})) + REDUCE(ts_aux_sym_token1, ts_sym_array, 4) + REDUCE(ts_aux_sym_token2, ts_sym_array, 4) END_STATE(); STATE(25); @@ -983,19 +1019,19 @@ PARSE_TABLE() { STATE(26); SET_LEX_STATE(61); SHIFT(ts_aux_sym_repeat_helper4, 27) - REDUCE(ts_aux_sym_token11, ts_aux_sym_repeat_helper4, 0, COLLAPSE({})) + REDUCE(ts_aux_sym_token11, ts_aux_sym_repeat_helper4, 0) SHIFT(ts_aux_sym_token9, 25) END_STATE(); STATE(27); SET_LEX_STATE(64); - REDUCE(ts_aux_sym_token11, ts_aux_sym_repeat_helper4, 3, COLLAPSE({1, 0, 1})) + REDUCE(ts_aux_sym_token11, ts_aux_sym_repeat_helper4, 3) END_STATE(); STATE(28); SET_LEX_STATE(61); - REDUCE(ts_aux_sym_token11, ts_sym_expression, 1, COLLAPSE({0})) - REDUCE(ts_aux_sym_token9, ts_sym_expression, 1, COLLAPSE({0})) + REDUCE(ts_aux_sym_token11, ts_sym_expression, 1) + REDUCE(ts_aux_sym_token9, ts_sym_expression, 1) END_STATE(); STATE(29); @@ -1019,7 +1055,7 @@ PARSE_TABLE() { STATE(30); SET_LEX_STATE(61); SHIFT(ts_aux_sym_repeat_helper4, 31) - REDUCE(ts_aux_sym_token11, ts_aux_sym_repeat_helper4, 0, COLLAPSE({})) + REDUCE(ts_aux_sym_token11, ts_aux_sym_repeat_helper4, 0) SHIFT(ts_aux_sym_token9, 25) END_STATE(); @@ -1030,14 +1066,14 @@ PARSE_TABLE() { STATE(32); SET_LEX_STATE(61); - REDUCE(ts_aux_sym_token11, ts_sym_array, 4, COLLAPSE({1, 0, 1, 1})) - REDUCE(ts_aux_sym_token9, ts_sym_array, 4, COLLAPSE({1, 0, 1, 1})) + REDUCE(ts_aux_sym_token11, ts_sym_array, 4) + REDUCE(ts_aux_sym_token9, ts_sym_array, 4) END_STATE(); STATE(33); SET_LEX_STATE(61); - REDUCE(ts_aux_sym_token11, ts_sym_array, 2, COLLAPSE({1, 1})) - REDUCE(ts_aux_sym_token9, ts_sym_array, 2, COLLAPSE({1, 1})) + REDUCE(ts_aux_sym_token11, ts_sym_array, 2) + REDUCE(ts_aux_sym_token9, ts_sym_array, 2) END_STATE(); STATE(34); @@ -1070,14 +1106,14 @@ PARSE_TABLE() { STATE(37); SET_LEX_STATE(65); - REDUCE(ts_aux_sym_token6, ts_sym_literal, 1, COLLAPSE({0})) - REDUCE(ts_aux_sym_token9, ts_sym_literal, 1, COLLAPSE({0})) + REDUCE(ts_aux_sym_token6, ts_sym_literal, 1) + REDUCE(ts_aux_sym_token9, ts_sym_literal, 1) END_STATE(); STATE(38); SET_LEX_STATE(65); SHIFT(ts_aux_sym_repeat_helper3, 39) - REDUCE(ts_aux_sym_token6, ts_aux_sym_repeat_helper3, 0, COLLAPSE({})) + REDUCE(ts_aux_sym_token6, ts_aux_sym_repeat_helper3, 0) SHIFT(ts_aux_sym_token9, 41) END_STATE(); @@ -1088,8 +1124,8 @@ PARSE_TABLE() { STATE(40); SET_LEX_STATE(61); - REDUCE(ts_aux_sym_token11, ts_sym_object, 6, COLLAPSE({1, 0, 1, 0, 1, 1})) - REDUCE(ts_aux_sym_token9, ts_sym_object, 6, COLLAPSE({1, 0, 1, 0, 1, 1})) + REDUCE(ts_aux_sym_token11, ts_sym_object, 6) + REDUCE(ts_aux_sym_token9, ts_sym_object, 6) END_STATE(); STATE(41); @@ -1122,19 +1158,19 @@ PARSE_TABLE() { STATE(44); SET_LEX_STATE(65); SHIFT(ts_aux_sym_repeat_helper3, 45) - REDUCE(ts_aux_sym_token6, ts_aux_sym_repeat_helper3, 0, COLLAPSE({})) + REDUCE(ts_aux_sym_token6, ts_aux_sym_repeat_helper3, 0) SHIFT(ts_aux_sym_token9, 41) END_STATE(); STATE(45); SET_LEX_STATE(66); - REDUCE(ts_aux_sym_token6, ts_aux_sym_repeat_helper3, 5, COLLAPSE({1, 0, 1, 0, 1})) + REDUCE(ts_aux_sym_token6, ts_aux_sym_repeat_helper3, 5) END_STATE(); STATE(46); SET_LEX_STATE(65); - REDUCE(ts_aux_sym_token6, ts_sym_expression, 1, COLLAPSE({0})) - REDUCE(ts_aux_sym_token9, ts_sym_expression, 1, COLLAPSE({0})) + REDUCE(ts_aux_sym_token6, ts_sym_expression, 1) + REDUCE(ts_aux_sym_token9, ts_sym_expression, 1) END_STATE(); STATE(47); @@ -1158,7 +1194,7 @@ PARSE_TABLE() { STATE(48); SET_LEX_STATE(61); SHIFT(ts_aux_sym_repeat_helper4, 49) - REDUCE(ts_aux_sym_token11, ts_aux_sym_repeat_helper4, 0, COLLAPSE({})) + REDUCE(ts_aux_sym_token11, ts_aux_sym_repeat_helper4, 0) SHIFT(ts_aux_sym_token9, 25) END_STATE(); @@ -1169,14 +1205,14 @@ PARSE_TABLE() { STATE(50); SET_LEX_STATE(65); - REDUCE(ts_aux_sym_token6, ts_sym_array, 4, COLLAPSE({1, 0, 1, 1})) - REDUCE(ts_aux_sym_token9, ts_sym_array, 4, COLLAPSE({1, 0, 1, 1})) + REDUCE(ts_aux_sym_token6, ts_sym_array, 4) + REDUCE(ts_aux_sym_token9, ts_sym_array, 4) END_STATE(); STATE(51); SET_LEX_STATE(65); - REDUCE(ts_aux_sym_token6, ts_sym_array, 2, COLLAPSE({1, 1})) - REDUCE(ts_aux_sym_token9, ts_sym_array, 2, COLLAPSE({1, 1})) + REDUCE(ts_aux_sym_token6, ts_sym_array, 2) + REDUCE(ts_aux_sym_token9, ts_sym_array, 2) END_STATE(); STATE(52); @@ -1210,7 +1246,7 @@ PARSE_TABLE() { STATE(55); SET_LEX_STATE(65); SHIFT(ts_aux_sym_repeat_helper3, 56) - REDUCE(ts_aux_sym_token6, ts_aux_sym_repeat_helper3, 0, COLLAPSE({})) + REDUCE(ts_aux_sym_token6, ts_aux_sym_repeat_helper3, 0) SHIFT(ts_aux_sym_token9, 41) END_STATE(); @@ -1221,20 +1257,20 @@ PARSE_TABLE() { STATE(57); SET_LEX_STATE(65); - REDUCE(ts_aux_sym_token6, ts_sym_object, 6, COLLAPSE({1, 0, 1, 0, 1, 1})) - REDUCE(ts_aux_sym_token9, ts_sym_object, 6, COLLAPSE({1, 0, 1, 0, 1, 1})) + REDUCE(ts_aux_sym_token6, ts_sym_object, 6) + REDUCE(ts_aux_sym_token9, ts_sym_object, 6) END_STATE(); STATE(58); SET_LEX_STATE(65); - REDUCE(ts_aux_sym_token6, ts_sym_object, 2, COLLAPSE({1, 1})) - REDUCE(ts_aux_sym_token9, ts_sym_object, 2, COLLAPSE({1, 1})) + REDUCE(ts_aux_sym_token6, ts_sym_object, 2) + REDUCE(ts_aux_sym_token9, ts_sym_object, 2) END_STATE(); STATE(59); SET_LEX_STATE(65); SHIFT(ts_aux_sym_repeat_helper3, 60) - REDUCE(ts_aux_sym_token6, ts_aux_sym_repeat_helper3, 0, COLLAPSE({})) + REDUCE(ts_aux_sym_token6, ts_aux_sym_repeat_helper3, 0) SHIFT(ts_aux_sym_token9, 41) END_STATE(); @@ -1245,32 +1281,32 @@ PARSE_TABLE() { STATE(61); SET_LEX_STATE(65); - REDUCE(ts_aux_sym_token6, ts_sym_object, 4, COLLAPSE({1, 0, 1, 1})) - REDUCE(ts_aux_sym_token9, ts_sym_object, 4, COLLAPSE({1, 0, 1, 1})) + REDUCE(ts_aux_sym_token6, ts_sym_object, 4) + REDUCE(ts_aux_sym_token9, ts_sym_object, 4) END_STATE(); STATE(62); SET_LEX_STATE(65); SHIFT(ts_aux_sym_repeat_helper3, 63) - REDUCE(ts_aux_sym_token6, ts_aux_sym_repeat_helper3, 0, COLLAPSE({})) + REDUCE(ts_aux_sym_token6, ts_aux_sym_repeat_helper3, 0) SHIFT(ts_aux_sym_token9, 41) END_STATE(); STATE(63); SET_LEX_STATE(66); - REDUCE(ts_aux_sym_token6, ts_aux_sym_repeat_helper3, 3, COLLAPSE({1, 0, 1})) + REDUCE(ts_aux_sym_token6, ts_aux_sym_repeat_helper3, 3) END_STATE(); STATE(64); SET_LEX_STATE(61); - REDUCE(ts_aux_sym_token11, ts_sym_object, 2, COLLAPSE({1, 1})) - REDUCE(ts_aux_sym_token9, ts_sym_object, 2, COLLAPSE({1, 1})) + REDUCE(ts_aux_sym_token11, ts_sym_object, 2) + REDUCE(ts_aux_sym_token9, ts_sym_object, 2) END_STATE(); STATE(65); SET_LEX_STATE(65); SHIFT(ts_aux_sym_repeat_helper3, 66) - REDUCE(ts_aux_sym_token6, ts_aux_sym_repeat_helper3, 0, COLLAPSE({})) + REDUCE(ts_aux_sym_token6, ts_aux_sym_repeat_helper3, 0) SHIFT(ts_aux_sym_token9, 41) END_STATE(); @@ -1281,14 +1317,14 @@ PARSE_TABLE() { STATE(67); SET_LEX_STATE(61); - REDUCE(ts_aux_sym_token11, ts_sym_object, 4, COLLAPSE({1, 0, 1, 1})) - REDUCE(ts_aux_sym_token9, ts_sym_object, 4, COLLAPSE({1, 0, 1, 1})) + REDUCE(ts_aux_sym_token11, ts_sym_object, 4) + REDUCE(ts_aux_sym_token9, ts_sym_object, 4) END_STATE(); STATE(68); SET_LEX_STATE(58); - REDUCE(ts_aux_sym_token1, ts_sym_array, 2, COLLAPSE({1, 1})) - REDUCE(ts_aux_sym_token2, ts_sym_array, 2, COLLAPSE({1, 1})) + REDUCE(ts_aux_sym_token1, ts_sym_array, 2) + REDUCE(ts_aux_sym_token2, ts_sym_array, 2) END_STATE(); STATE(69); @@ -1322,7 +1358,7 @@ PARSE_TABLE() { STATE(72); SET_LEX_STATE(65); SHIFT(ts_aux_sym_repeat_helper3, 73) - REDUCE(ts_aux_sym_token6, ts_aux_sym_repeat_helper3, 0, COLLAPSE({})) + REDUCE(ts_aux_sym_token6, ts_aux_sym_repeat_helper3, 0) SHIFT(ts_aux_sym_token9, 41) END_STATE(); @@ -1333,20 +1369,20 @@ PARSE_TABLE() { STATE(74); SET_LEX_STATE(58); - REDUCE(ts_aux_sym_token1, ts_sym_object, 6, COLLAPSE({1, 0, 1, 0, 1, 1})) - REDUCE(ts_aux_sym_token2, ts_sym_object, 6, COLLAPSE({1, 0, 1, 0, 1, 1})) + REDUCE(ts_aux_sym_token1, ts_sym_object, 6) + REDUCE(ts_aux_sym_token2, ts_sym_object, 6) END_STATE(); STATE(75); SET_LEX_STATE(58); - REDUCE(ts_aux_sym_token1, ts_sym_object, 2, COLLAPSE({1, 1})) - REDUCE(ts_aux_sym_token2, ts_sym_object, 2, COLLAPSE({1, 1})) + REDUCE(ts_aux_sym_token1, ts_sym_object, 2) + REDUCE(ts_aux_sym_token2, ts_sym_object, 2) END_STATE(); STATE(76); SET_LEX_STATE(65); SHIFT(ts_aux_sym_repeat_helper3, 77) - REDUCE(ts_aux_sym_token6, ts_aux_sym_repeat_helper3, 0, COLLAPSE({})) + REDUCE(ts_aux_sym_token6, ts_aux_sym_repeat_helper3, 0) SHIFT(ts_aux_sym_token9, 41) END_STATE(); @@ -1357,8 +1393,8 @@ PARSE_TABLE() { STATE(78); SET_LEX_STATE(58); - REDUCE(ts_aux_sym_token1, ts_sym_object, 4, COLLAPSE({1, 0, 1, 1})) - REDUCE(ts_aux_sym_token2, ts_sym_object, 4, COLLAPSE({1, 0, 1, 1})) + REDUCE(ts_aux_sym_token1, ts_sym_object, 4) + REDUCE(ts_aux_sym_token2, ts_sym_object, 4) END_STATE(); STATE(79); @@ -1370,47 +1406,47 @@ PARSE_TABLE() { STATE(80); SET_LEX_STATE(56); - REDUCE(ts_sym__IF, ts_sym_statement, 2, COLLAPSE({0, 1})) - REDUCE(ts_sym__VAR, ts_sym_statement, 2, COLLAPSE({0, 1})) - REDUCE(ts_sym_false, ts_sym_statement, 2, COLLAPSE({0, 1})) - REDUCE(ts_sym_identifier, ts_sym_statement, 2, COLLAPSE({0, 1})) - REDUCE(ts_sym_null, ts_sym_statement, 2, COLLAPSE({0, 1})) - REDUCE(ts_sym_number, ts_sym_statement, 2, COLLAPSE({0, 1})) - REDUCE(ts_sym_string, ts_sym_statement, 2, COLLAPSE({0, 1})) - REDUCE(ts_sym_true, ts_sym_statement, 2, COLLAPSE({0, 1})) - REDUCE(ts_aux_sym_token10, ts_sym_statement, 2, COLLAPSE({0, 1})) - REDUCE(ts_aux_sym_token5, ts_sym_statement, 2, COLLAPSE({0, 1})) - REDUCE(ts_aux_sym_token6, ts_sym_statement, 2, COLLAPSE({0, 1})) + REDUCE(ts_sym__IF, ts_sym_statement, 2) + REDUCE(ts_sym__VAR, ts_sym_statement, 2) + REDUCE(ts_sym_false, ts_sym_statement, 2) + REDUCE(ts_sym_identifier, ts_sym_statement, 2) + REDUCE(ts_sym_null, ts_sym_statement, 2) + REDUCE(ts_sym_number, ts_sym_statement, 2) + REDUCE(ts_sym_string, ts_sym_statement, 2) + REDUCE(ts_sym_true, ts_sym_statement, 2) + REDUCE(ts_aux_sym_token10, ts_sym_statement, 2) + REDUCE(ts_aux_sym_token5, ts_sym_statement, 2) + REDUCE(ts_aux_sym_token6, ts_sym_statement, 2) END_STATE(); STATE(81); SET_LEX_STATE(56); - REDUCE(ts_sym__IF, ts_sym__terminator, 1, COLLAPSE({1})) - REDUCE(ts_sym__VAR, ts_sym__terminator, 1, COLLAPSE({1})) - REDUCE(ts_sym_false, ts_sym__terminator, 1, COLLAPSE({1})) - REDUCE(ts_sym_identifier, ts_sym__terminator, 1, COLLAPSE({1})) - REDUCE(ts_sym_null, ts_sym__terminator, 1, COLLAPSE({1})) - REDUCE(ts_sym_number, ts_sym__terminator, 1, COLLAPSE({1})) - REDUCE(ts_sym_string, ts_sym__terminator, 1, COLLAPSE({1})) - REDUCE(ts_sym_true, ts_sym__terminator, 1, COLLAPSE({1})) - REDUCE(ts_aux_sym_token10, ts_sym__terminator, 1, COLLAPSE({1})) - REDUCE(ts_aux_sym_token5, ts_sym__terminator, 1, COLLAPSE({1})) - REDUCE(ts_aux_sym_token6, ts_sym__terminator, 1, COLLAPSE({1})) + REDUCE(ts_sym__IF, ts_sym__terminator, 1) + REDUCE(ts_sym__VAR, ts_sym__terminator, 1) + REDUCE(ts_sym_false, ts_sym__terminator, 1) + REDUCE(ts_sym_identifier, ts_sym__terminator, 1) + REDUCE(ts_sym_null, ts_sym__terminator, 1) + REDUCE(ts_sym_number, ts_sym__terminator, 1) + REDUCE(ts_sym_string, ts_sym__terminator, 1) + REDUCE(ts_sym_true, ts_sym__terminator, 1) + REDUCE(ts_aux_sym_token10, ts_sym__terminator, 1) + REDUCE(ts_aux_sym_token5, ts_sym__terminator, 1) + REDUCE(ts_aux_sym_token6, ts_sym__terminator, 1) END_STATE(); STATE(82); SET_LEX_STATE(56); - REDUCE(ts_sym__IF, ts_sym_statement, 1, COLLAPSE({0})) - REDUCE(ts_sym__VAR, ts_sym_statement, 1, COLLAPSE({0})) - REDUCE(ts_sym_false, ts_sym_statement, 1, COLLAPSE({0})) - REDUCE(ts_sym_identifier, ts_sym_statement, 1, COLLAPSE({0})) - REDUCE(ts_sym_null, ts_sym_statement, 1, COLLAPSE({0})) - REDUCE(ts_sym_number, ts_sym_statement, 1, COLLAPSE({0})) - REDUCE(ts_sym_string, ts_sym_statement, 1, COLLAPSE({0})) - REDUCE(ts_sym_true, ts_sym_statement, 1, COLLAPSE({0})) - REDUCE(ts_aux_sym_token10, ts_sym_statement, 1, COLLAPSE({0})) - REDUCE(ts_aux_sym_token5, ts_sym_statement, 1, COLLAPSE({0})) - REDUCE(ts_aux_sym_token6, ts_sym_statement, 1, COLLAPSE({0})) + REDUCE(ts_sym__IF, ts_sym_statement, 1) + REDUCE(ts_sym__VAR, ts_sym_statement, 1) + REDUCE(ts_sym_false, ts_sym_statement, 1) + REDUCE(ts_sym_identifier, ts_sym_statement, 1) + REDUCE(ts_sym_null, ts_sym_statement, 1) + REDUCE(ts_sym_number, ts_sym_statement, 1) + REDUCE(ts_sym_string, ts_sym_statement, 1) + REDUCE(ts_sym_true, ts_sym_statement, 1) + REDUCE(ts_aux_sym_token10, ts_sym_statement, 1) + REDUCE(ts_aux_sym_token5, ts_sym_statement, 1) + REDUCE(ts_aux_sym_token6, ts_sym_statement, 1) END_STATE(); STATE(83); @@ -1433,12 +1469,12 @@ PARSE_TABLE() { SHIFT(ts_aux_sym_repeat_helper2, 84) SHIFT(ts_aux_sym_token10, 20) SHIFT(ts_aux_sym_token5, 69) - REDUCE(ts_aux_sym_token6, ts_aux_sym_repeat_helper2, 0, COLLAPSE({})) + REDUCE(ts_aux_sym_token6, ts_aux_sym_repeat_helper2, 0) END_STATE(); STATE(84); SET_LEX_STATE(66); - REDUCE(ts_aux_sym_token6, ts_aux_sym_repeat_helper2, 2, COLLAPSE({0, 1})) + REDUCE(ts_aux_sym_token6, ts_aux_sym_repeat_helper2, 2) END_STATE(); STATE(85); @@ -1448,22 +1484,22 @@ PARSE_TABLE() { STATE(86); SET_LEX_STATE(56); - REDUCE(ts_sym__IF, ts_sym_statement_block, 3, COLLAPSE({1, 1, 1})) - REDUCE(ts_sym__VAR, ts_sym_statement_block, 3, COLLAPSE({1, 1, 1})) - REDUCE(ts_sym_false, ts_sym_statement_block, 3, COLLAPSE({1, 1, 1})) - REDUCE(ts_sym_identifier, ts_sym_statement_block, 3, COLLAPSE({1, 1, 1})) - REDUCE(ts_sym_null, ts_sym_statement_block, 3, COLLAPSE({1, 1, 1})) - REDUCE(ts_sym_number, ts_sym_statement_block, 3, COLLAPSE({1, 1, 1})) - REDUCE(ts_sym_string, ts_sym_statement_block, 3, COLLAPSE({1, 1, 1})) - REDUCE(ts_sym_true, ts_sym_statement_block, 3, COLLAPSE({1, 1, 1})) - REDUCE(ts_aux_sym_token10, ts_sym_statement_block, 3, COLLAPSE({1, 1, 1})) - REDUCE(ts_aux_sym_token5, ts_sym_statement_block, 3, COLLAPSE({1, 1, 1})) - REDUCE(ts_aux_sym_token6, ts_sym_statement_block, 3, COLLAPSE({1, 1, 1})) + REDUCE(ts_sym__IF, ts_sym_statement_block, 3) + REDUCE(ts_sym__VAR, ts_sym_statement_block, 3) + REDUCE(ts_sym_false, ts_sym_statement_block, 3) + REDUCE(ts_sym_identifier, ts_sym_statement_block, 3) + REDUCE(ts_sym_null, ts_sym_statement_block, 3) + REDUCE(ts_sym_number, ts_sym_statement_block, 3) + REDUCE(ts_sym_string, ts_sym_statement_block, 3) + REDUCE(ts_sym_true, ts_sym_statement_block, 3) + REDUCE(ts_aux_sym_token10, ts_sym_statement_block, 3) + REDUCE(ts_aux_sym_token5, ts_sym_statement_block, 3) + REDUCE(ts_aux_sym_token6, ts_sym_statement_block, 3) END_STATE(); STATE(87); SET_LEX_STATE(0); - REDUCE(ts_aux_sym_token4, ts_sym_expression, 1, COLLAPSE({0})) + REDUCE(ts_aux_sym_token4, ts_sym_expression, 1) END_STATE(); STATE(88); @@ -1487,7 +1523,7 @@ PARSE_TABLE() { STATE(89); SET_LEX_STATE(61); SHIFT(ts_aux_sym_repeat_helper4, 90) - REDUCE(ts_aux_sym_token11, ts_aux_sym_repeat_helper4, 0, COLLAPSE({})) + REDUCE(ts_aux_sym_token11, ts_aux_sym_repeat_helper4, 0) SHIFT(ts_aux_sym_token9, 25) END_STATE(); @@ -1498,12 +1534,12 @@ PARSE_TABLE() { STATE(91); SET_LEX_STATE(0); - REDUCE(ts_aux_sym_token4, ts_sym_array, 4, COLLAPSE({1, 0, 1, 1})) + REDUCE(ts_aux_sym_token4, ts_sym_array, 4) END_STATE(); STATE(92); SET_LEX_STATE(0); - REDUCE(ts_aux_sym_token4, ts_sym_array, 2, COLLAPSE({1, 1})) + REDUCE(ts_aux_sym_token4, ts_sym_array, 2) END_STATE(); STATE(93); @@ -1537,7 +1573,7 @@ PARSE_TABLE() { STATE(96); SET_LEX_STATE(65); SHIFT(ts_aux_sym_repeat_helper3, 97) - REDUCE(ts_aux_sym_token6, ts_aux_sym_repeat_helper3, 0, COLLAPSE({})) + REDUCE(ts_aux_sym_token6, ts_aux_sym_repeat_helper3, 0) SHIFT(ts_aux_sym_token9, 41) END_STATE(); @@ -1548,18 +1584,18 @@ PARSE_TABLE() { STATE(98); SET_LEX_STATE(0); - REDUCE(ts_aux_sym_token4, ts_sym_object, 6, COLLAPSE({1, 0, 1, 0, 1, 1})) + REDUCE(ts_aux_sym_token4, ts_sym_object, 6) END_STATE(); STATE(99); SET_LEX_STATE(0); - REDUCE(ts_aux_sym_token4, ts_sym_object, 2, COLLAPSE({1, 1})) + REDUCE(ts_aux_sym_token4, ts_sym_object, 2) END_STATE(); STATE(100); SET_LEX_STATE(65); SHIFT(ts_aux_sym_repeat_helper3, 101) - REDUCE(ts_aux_sym_token6, ts_aux_sym_repeat_helper3, 0, COLLAPSE({})) + REDUCE(ts_aux_sym_token6, ts_aux_sym_repeat_helper3, 0) SHIFT(ts_aux_sym_token9, 41) END_STATE(); @@ -1570,7 +1606,7 @@ PARSE_TABLE() { STATE(102); SET_LEX_STATE(0); - REDUCE(ts_aux_sym_token4, ts_sym_object, 4, COLLAPSE({1, 0, 1, 1})) + REDUCE(ts_aux_sym_token4, ts_sym_object, 4) END_STATE(); STATE(103); @@ -1580,17 +1616,17 @@ PARSE_TABLE() { STATE(104); SET_LEX_STATE(2); - REDUCE(ts_sym__IF, ts_sym_statement_block, 3, COLLAPSE({1, 1, 1})) - REDUCE(ts_sym__VAR, ts_sym_statement_block, 3, COLLAPSE({1, 1, 1})) - REDUCE(ts_sym_false, ts_sym_statement_block, 3, COLLAPSE({1, 1, 1})) - REDUCE(ts_sym_identifier, ts_sym_statement_block, 3, COLLAPSE({1, 1, 1})) - REDUCE(ts_sym_null, ts_sym_statement_block, 3, COLLAPSE({1, 1, 1})) - REDUCE(ts_sym_number, ts_sym_statement_block, 3, COLLAPSE({1, 1, 1})) - REDUCE(ts_sym_string, ts_sym_statement_block, 3, COLLAPSE({1, 1, 1})) - REDUCE(ts_sym_true, ts_sym_statement_block, 3, COLLAPSE({1, 1, 1})) - REDUCE(ts_aux_sym_token10, ts_sym_statement_block, 3, COLLAPSE({1, 1, 1})) - REDUCE(ts_aux_sym_token5, ts_sym_statement_block, 3, COLLAPSE({1, 1, 1})) - REDUCE(ts_builtin_sym_end, ts_sym_statement_block, 3, COLLAPSE({1, 1, 1})) + REDUCE(ts_sym__IF, ts_sym_statement_block, 3) + REDUCE(ts_sym__VAR, ts_sym_statement_block, 3) + REDUCE(ts_sym_false, ts_sym_statement_block, 3) + REDUCE(ts_sym_identifier, ts_sym_statement_block, 3) + REDUCE(ts_sym_null, ts_sym_statement_block, 3) + REDUCE(ts_sym_number, ts_sym_statement_block, 3) + REDUCE(ts_sym_string, ts_sym_statement_block, 3) + REDUCE(ts_sym_true, ts_sym_statement_block, 3) + REDUCE(ts_aux_sym_token10, ts_sym_statement_block, 3) + REDUCE(ts_aux_sym_token5, ts_sym_statement_block, 3) + REDUCE(ts_builtin_sym_end, ts_sym_statement_block, 3) END_STATE(); STATE(105); @@ -1602,47 +1638,47 @@ PARSE_TABLE() { STATE(106); SET_LEX_STATE(2); - REDUCE(ts_sym__IF, ts_sym_statement, 2, COLLAPSE({0, 1})) - REDUCE(ts_sym__VAR, ts_sym_statement, 2, COLLAPSE({0, 1})) - REDUCE(ts_sym_false, ts_sym_statement, 2, COLLAPSE({0, 1})) - REDUCE(ts_sym_identifier, ts_sym_statement, 2, COLLAPSE({0, 1})) - REDUCE(ts_sym_null, ts_sym_statement, 2, COLLAPSE({0, 1})) - REDUCE(ts_sym_number, ts_sym_statement, 2, COLLAPSE({0, 1})) - REDUCE(ts_sym_string, ts_sym_statement, 2, COLLAPSE({0, 1})) - REDUCE(ts_sym_true, ts_sym_statement, 2, COLLAPSE({0, 1})) - REDUCE(ts_aux_sym_token10, ts_sym_statement, 2, COLLAPSE({0, 1})) - REDUCE(ts_aux_sym_token5, ts_sym_statement, 2, COLLAPSE({0, 1})) - REDUCE(ts_builtin_sym_end, ts_sym_statement, 2, COLLAPSE({0, 1})) + REDUCE(ts_sym__IF, ts_sym_statement, 2) + REDUCE(ts_sym__VAR, ts_sym_statement, 2) + REDUCE(ts_sym_false, ts_sym_statement, 2) + REDUCE(ts_sym_identifier, ts_sym_statement, 2) + REDUCE(ts_sym_null, ts_sym_statement, 2) + REDUCE(ts_sym_number, ts_sym_statement, 2) + REDUCE(ts_sym_string, ts_sym_statement, 2) + REDUCE(ts_sym_true, ts_sym_statement, 2) + REDUCE(ts_aux_sym_token10, ts_sym_statement, 2) + REDUCE(ts_aux_sym_token5, ts_sym_statement, 2) + REDUCE(ts_builtin_sym_end, ts_sym_statement, 2) END_STATE(); STATE(107); SET_LEX_STATE(2); - REDUCE(ts_sym__IF, ts_sym__terminator, 1, COLLAPSE({1})) - REDUCE(ts_sym__VAR, ts_sym__terminator, 1, COLLAPSE({1})) - REDUCE(ts_sym_false, ts_sym__terminator, 1, COLLAPSE({1})) - REDUCE(ts_sym_identifier, ts_sym__terminator, 1, COLLAPSE({1})) - REDUCE(ts_sym_null, ts_sym__terminator, 1, COLLAPSE({1})) - REDUCE(ts_sym_number, ts_sym__terminator, 1, COLLAPSE({1})) - REDUCE(ts_sym_string, ts_sym__terminator, 1, COLLAPSE({1})) - REDUCE(ts_sym_true, ts_sym__terminator, 1, COLLAPSE({1})) - REDUCE(ts_aux_sym_token10, ts_sym__terminator, 1, COLLAPSE({1})) - REDUCE(ts_aux_sym_token5, ts_sym__terminator, 1, COLLAPSE({1})) - REDUCE(ts_builtin_sym_end, ts_sym__terminator, 1, COLLAPSE({1})) + REDUCE(ts_sym__IF, ts_sym__terminator, 1) + REDUCE(ts_sym__VAR, ts_sym__terminator, 1) + REDUCE(ts_sym_false, ts_sym__terminator, 1) + REDUCE(ts_sym_identifier, ts_sym__terminator, 1) + REDUCE(ts_sym_null, ts_sym__terminator, 1) + REDUCE(ts_sym_number, ts_sym__terminator, 1) + REDUCE(ts_sym_string, ts_sym__terminator, 1) + REDUCE(ts_sym_true, ts_sym__terminator, 1) + REDUCE(ts_aux_sym_token10, ts_sym__terminator, 1) + REDUCE(ts_aux_sym_token5, ts_sym__terminator, 1) + REDUCE(ts_builtin_sym_end, ts_sym__terminator, 1) END_STATE(); STATE(108); SET_LEX_STATE(2); - REDUCE(ts_sym__IF, ts_sym_statement, 1, COLLAPSE({0})) - REDUCE(ts_sym__VAR, ts_sym_statement, 1, COLLAPSE({0})) - REDUCE(ts_sym_false, ts_sym_statement, 1, COLLAPSE({0})) - REDUCE(ts_sym_identifier, ts_sym_statement, 1, COLLAPSE({0})) - REDUCE(ts_sym_null, ts_sym_statement, 1, COLLAPSE({0})) - REDUCE(ts_sym_number, ts_sym_statement, 1, COLLAPSE({0})) - REDUCE(ts_sym_string, ts_sym_statement, 1, COLLAPSE({0})) - REDUCE(ts_sym_true, ts_sym_statement, 1, COLLAPSE({0})) - REDUCE(ts_aux_sym_token10, ts_sym_statement, 1, COLLAPSE({0})) - REDUCE(ts_aux_sym_token5, ts_sym_statement, 1, COLLAPSE({0})) - REDUCE(ts_builtin_sym_end, ts_sym_statement, 1, COLLAPSE({0})) + REDUCE(ts_sym__IF, ts_sym_statement, 1) + REDUCE(ts_sym__VAR, ts_sym_statement, 1) + REDUCE(ts_sym_false, ts_sym_statement, 1) + REDUCE(ts_sym_identifier, ts_sym_statement, 1) + REDUCE(ts_sym_null, ts_sym_statement, 1) + REDUCE(ts_sym_number, ts_sym_statement, 1) + REDUCE(ts_sym_string, ts_sym_statement, 1) + REDUCE(ts_sym_true, ts_sym_statement, 1) + REDUCE(ts_aux_sym_token10, ts_sym_statement, 1) + REDUCE(ts_aux_sym_token5, ts_sym_statement, 1) + REDUCE(ts_builtin_sym_end, ts_sym_statement, 1) END_STATE(); STATE(109); @@ -1670,17 +1706,17 @@ PARSE_TABLE() { SHIFT(ts_aux_sym_repeat_helper1, 111) SHIFT(ts_aux_sym_token10, 20) SHIFT(ts_aux_sym_token5, 69) - REDUCE(ts_builtin_sym_end, ts_aux_sym_repeat_helper1, 0, COLLAPSE({})) + REDUCE(ts_builtin_sym_end, ts_aux_sym_repeat_helper1, 0) END_STATE(); STATE(111); SET_LEX_STATE(79); - REDUCE(ts_builtin_sym_end, ts_aux_sym_repeat_helper1, 2, COLLAPSE({0, 1})) + REDUCE(ts_builtin_sym_end, ts_aux_sym_repeat_helper1, 2) END_STATE(); STATE(112); SET_LEX_STATE(79); - REDUCE(ts_builtin_sym_end, ts_sym_program, 1, COLLAPSE({1})) + REDUCE(ts_builtin_sym_end, ts_sym_program, 1) END_STATE(); END_TABLE(); diff --git a/examples/parsers/json.c b/examples/parsers/json.c index 4276e580..b7da5530 100644 --- a/examples/parsers/json.c +++ b/examples/parsers/json.c @@ -40,6 +40,25 @@ SYMBOL_NAMES = { "token6", }; +HIDDEN_SYMBOL_FLAGS = { + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, +}; + LEX_FN() { START_LEXER(); switch (LEX_STATE()) { @@ -332,7 +351,7 @@ PARSE_TABLE() { STATE(1); SET_LEX_STATE(0); - REDUCE(ts_builtin_sym_end, ts_sym_value, 1, COLLAPSE({0})) + REDUCE(ts_builtin_sym_end, ts_sym_value, 1) END_STATE(); STATE(2); @@ -368,15 +387,15 @@ PARSE_TABLE() { STATE(6); SET_LEX_STATE(1); - REDUCE(ts_aux_sym_token3, ts_sym_value, 1, COLLAPSE({0})) - REDUCE(ts_aux_sym_token4, ts_sym_value, 1, COLLAPSE({0})) + REDUCE(ts_aux_sym_token3, ts_sym_value, 1) + REDUCE(ts_aux_sym_token4, ts_sym_value, 1) END_STATE(); STATE(7); SET_LEX_STATE(1); SHIFT(ts_aux_sym_repeat_helper1, 8) SHIFT(ts_aux_sym_token3, 10) - REDUCE(ts_aux_sym_token4, ts_aux_sym_repeat_helper1, 0, COLLAPSE({})) + REDUCE(ts_aux_sym_token4, ts_aux_sym_repeat_helper1, 0) END_STATE(); STATE(8); @@ -386,7 +405,7 @@ PARSE_TABLE() { STATE(9); SET_LEX_STATE(0); - REDUCE(ts_builtin_sym_end, ts_sym_object, 6, COLLAPSE({1, 0, 1, 0, 1, 1})) + REDUCE(ts_builtin_sym_end, ts_sym_object, 6) END_STATE(); STATE(10); @@ -418,12 +437,12 @@ PARSE_TABLE() { SET_LEX_STATE(1); SHIFT(ts_aux_sym_repeat_helper1, 14) SHIFT(ts_aux_sym_token3, 10) - REDUCE(ts_aux_sym_token4, ts_aux_sym_repeat_helper1, 0, COLLAPSE({})) + REDUCE(ts_aux_sym_token4, ts_aux_sym_repeat_helper1, 0) END_STATE(); STATE(14); SET_LEX_STATE(4); - REDUCE(ts_aux_sym_token4, ts_aux_sym_repeat_helper1, 5, COLLAPSE({1, 0, 1, 0, 1})) + REDUCE(ts_aux_sym_token4, ts_aux_sym_repeat_helper1, 5) END_STATE(); STATE(15); @@ -456,7 +475,7 @@ PARSE_TABLE() { SET_LEX_STATE(1); SHIFT(ts_aux_sym_repeat_helper1, 19) SHIFT(ts_aux_sym_token3, 10) - REDUCE(ts_aux_sym_token4, ts_aux_sym_repeat_helper1, 0, COLLAPSE({})) + REDUCE(ts_aux_sym_token4, ts_aux_sym_repeat_helper1, 0) END_STATE(); STATE(19); @@ -466,8 +485,8 @@ PARSE_TABLE() { STATE(20); SET_LEX_STATE(1); - REDUCE(ts_aux_sym_token3, ts_sym_object, 6, COLLAPSE({1, 0, 1, 0, 1, 1})) - REDUCE(ts_aux_sym_token4, ts_sym_object, 6, COLLAPSE({1, 0, 1, 0, 1, 1})) + REDUCE(ts_aux_sym_token3, ts_sym_object, 6) + REDUCE(ts_aux_sym_token4, ts_sym_object, 6) END_STATE(); STATE(21); @@ -488,15 +507,15 @@ PARSE_TABLE() { STATE(22); SET_LEX_STATE(5); - REDUCE(ts_aux_sym_token3, ts_sym_value, 1, COLLAPSE({0})) - REDUCE(ts_aux_sym_token6, ts_sym_value, 1, COLLAPSE({0})) + REDUCE(ts_aux_sym_token3, ts_sym_value, 1) + REDUCE(ts_aux_sym_token6, ts_sym_value, 1) END_STATE(); STATE(23); SET_LEX_STATE(5); SHIFT(ts_aux_sym_repeat_helper2, 24) SHIFT(ts_aux_sym_token3, 26) - REDUCE(ts_aux_sym_token6, ts_aux_sym_repeat_helper2, 0, COLLAPSE({})) + REDUCE(ts_aux_sym_token6, ts_aux_sym_repeat_helper2, 0) END_STATE(); STATE(24); @@ -506,8 +525,8 @@ PARSE_TABLE() { STATE(25); SET_LEX_STATE(1); - REDUCE(ts_aux_sym_token3, ts_sym_array, 4, COLLAPSE({1, 0, 1, 1})) - REDUCE(ts_aux_sym_token4, ts_sym_array, 4, COLLAPSE({1, 0, 1, 1})) + REDUCE(ts_aux_sym_token3, ts_sym_array, 4) + REDUCE(ts_aux_sym_token4, ts_sym_array, 4) END_STATE(); STATE(26); @@ -529,12 +548,12 @@ PARSE_TABLE() { SET_LEX_STATE(5); SHIFT(ts_aux_sym_repeat_helper2, 28) SHIFT(ts_aux_sym_token3, 26) - REDUCE(ts_aux_sym_token6, ts_aux_sym_repeat_helper2, 0, COLLAPSE({})) + REDUCE(ts_aux_sym_token6, ts_aux_sym_repeat_helper2, 0) END_STATE(); STATE(28); SET_LEX_STATE(7); - REDUCE(ts_aux_sym_token6, ts_aux_sym_repeat_helper2, 3, COLLAPSE({1, 0, 1})) + REDUCE(ts_aux_sym_token6, ts_aux_sym_repeat_helper2, 3) END_STATE(); STATE(29); @@ -567,7 +586,7 @@ PARSE_TABLE() { SET_LEX_STATE(1); SHIFT(ts_aux_sym_repeat_helper1, 33) SHIFT(ts_aux_sym_token3, 10) - REDUCE(ts_aux_sym_token4, ts_aux_sym_repeat_helper1, 0, COLLAPSE({})) + REDUCE(ts_aux_sym_token4, ts_aux_sym_repeat_helper1, 0) END_STATE(); STATE(33); @@ -577,21 +596,21 @@ PARSE_TABLE() { STATE(34); SET_LEX_STATE(5); - REDUCE(ts_aux_sym_token3, ts_sym_object, 6, COLLAPSE({1, 0, 1, 0, 1, 1})) - REDUCE(ts_aux_sym_token6, ts_sym_object, 6, COLLAPSE({1, 0, 1, 0, 1, 1})) + REDUCE(ts_aux_sym_token3, ts_sym_object, 6) + REDUCE(ts_aux_sym_token6, ts_sym_object, 6) END_STATE(); STATE(35); SET_LEX_STATE(5); - REDUCE(ts_aux_sym_token3, ts_sym_object, 2, COLLAPSE({1, 1})) - REDUCE(ts_aux_sym_token6, ts_sym_object, 2, COLLAPSE({1, 1})) + REDUCE(ts_aux_sym_token3, ts_sym_object, 2) + REDUCE(ts_aux_sym_token6, ts_sym_object, 2) END_STATE(); STATE(36); SET_LEX_STATE(1); SHIFT(ts_aux_sym_repeat_helper1, 37) SHIFT(ts_aux_sym_token3, 10) - REDUCE(ts_aux_sym_token4, ts_aux_sym_repeat_helper1, 0, COLLAPSE({})) + REDUCE(ts_aux_sym_token4, ts_aux_sym_repeat_helper1, 0) END_STATE(); STATE(37); @@ -601,8 +620,8 @@ PARSE_TABLE() { STATE(38); SET_LEX_STATE(5); - REDUCE(ts_aux_sym_token3, ts_sym_object, 4, COLLAPSE({1, 0, 1, 1})) - REDUCE(ts_aux_sym_token6, ts_sym_object, 4, COLLAPSE({1, 0, 1, 1})) + REDUCE(ts_aux_sym_token3, ts_sym_object, 4) + REDUCE(ts_aux_sym_token6, ts_sym_object, 4) END_STATE(); STATE(39); @@ -625,7 +644,7 @@ PARSE_TABLE() { SET_LEX_STATE(5); SHIFT(ts_aux_sym_repeat_helper2, 41) SHIFT(ts_aux_sym_token3, 26) - REDUCE(ts_aux_sym_token6, ts_aux_sym_repeat_helper2, 0, COLLAPSE({})) + REDUCE(ts_aux_sym_token6, ts_aux_sym_repeat_helper2, 0) END_STATE(); STATE(41); @@ -635,33 +654,33 @@ PARSE_TABLE() { STATE(42); SET_LEX_STATE(5); - REDUCE(ts_aux_sym_token3, ts_sym_array, 4, COLLAPSE({1, 0, 1, 1})) - REDUCE(ts_aux_sym_token6, ts_sym_array, 4, COLLAPSE({1, 0, 1, 1})) + REDUCE(ts_aux_sym_token3, ts_sym_array, 4) + REDUCE(ts_aux_sym_token6, ts_sym_array, 4) END_STATE(); STATE(43); SET_LEX_STATE(5); - REDUCE(ts_aux_sym_token3, ts_sym_array, 2, COLLAPSE({1, 1})) - REDUCE(ts_aux_sym_token6, ts_sym_array, 2, COLLAPSE({1, 1})) + REDUCE(ts_aux_sym_token3, ts_sym_array, 2) + REDUCE(ts_aux_sym_token6, ts_sym_array, 2) END_STATE(); STATE(44); SET_LEX_STATE(1); - REDUCE(ts_aux_sym_token3, ts_sym_array, 2, COLLAPSE({1, 1})) - REDUCE(ts_aux_sym_token4, ts_sym_array, 2, COLLAPSE({1, 1})) + REDUCE(ts_aux_sym_token3, ts_sym_array, 2) + REDUCE(ts_aux_sym_token4, ts_sym_array, 2) END_STATE(); STATE(45); SET_LEX_STATE(1); - REDUCE(ts_aux_sym_token3, ts_sym_object, 2, COLLAPSE({1, 1})) - REDUCE(ts_aux_sym_token4, ts_sym_object, 2, COLLAPSE({1, 1})) + REDUCE(ts_aux_sym_token3, ts_sym_object, 2) + REDUCE(ts_aux_sym_token4, ts_sym_object, 2) END_STATE(); STATE(46); SET_LEX_STATE(1); SHIFT(ts_aux_sym_repeat_helper1, 47) SHIFT(ts_aux_sym_token3, 10) - REDUCE(ts_aux_sym_token4, ts_aux_sym_repeat_helper1, 0, COLLAPSE({})) + REDUCE(ts_aux_sym_token4, ts_aux_sym_repeat_helper1, 0) END_STATE(); STATE(47); @@ -671,32 +690,32 @@ PARSE_TABLE() { STATE(48); SET_LEX_STATE(1); - REDUCE(ts_aux_sym_token3, ts_sym_object, 4, COLLAPSE({1, 0, 1, 1})) - REDUCE(ts_aux_sym_token4, ts_sym_object, 4, COLLAPSE({1, 0, 1, 1})) + REDUCE(ts_aux_sym_token3, ts_sym_object, 4) + REDUCE(ts_aux_sym_token4, ts_sym_object, 4) END_STATE(); STATE(49); SET_LEX_STATE(1); SHIFT(ts_aux_sym_repeat_helper1, 50) SHIFT(ts_aux_sym_token3, 10) - REDUCE(ts_aux_sym_token4, ts_aux_sym_repeat_helper1, 0, COLLAPSE({})) + REDUCE(ts_aux_sym_token4, ts_aux_sym_repeat_helper1, 0) END_STATE(); STATE(50); SET_LEX_STATE(4); - REDUCE(ts_aux_sym_token4, ts_aux_sym_repeat_helper1, 3, COLLAPSE({1, 0, 1})) + REDUCE(ts_aux_sym_token4, ts_aux_sym_repeat_helper1, 3) END_STATE(); STATE(51); SET_LEX_STATE(0); - REDUCE(ts_builtin_sym_end, ts_sym_object, 2, COLLAPSE({1, 1})) + REDUCE(ts_builtin_sym_end, ts_sym_object, 2) END_STATE(); STATE(52); SET_LEX_STATE(1); SHIFT(ts_aux_sym_repeat_helper1, 53) SHIFT(ts_aux_sym_token3, 10) - REDUCE(ts_aux_sym_token4, ts_aux_sym_repeat_helper1, 0, COLLAPSE({})) + REDUCE(ts_aux_sym_token4, ts_aux_sym_repeat_helper1, 0) END_STATE(); STATE(53); @@ -706,7 +725,7 @@ PARSE_TABLE() { STATE(54); SET_LEX_STATE(0); - REDUCE(ts_builtin_sym_end, ts_sym_object, 4, COLLAPSE({1, 0, 1, 1})) + REDUCE(ts_builtin_sym_end, ts_sym_object, 4) END_STATE(); STATE(55); @@ -729,7 +748,7 @@ PARSE_TABLE() { SET_LEX_STATE(5); SHIFT(ts_aux_sym_repeat_helper2, 57) SHIFT(ts_aux_sym_token3, 26) - REDUCE(ts_aux_sym_token6, ts_aux_sym_repeat_helper2, 0, COLLAPSE({})) + REDUCE(ts_aux_sym_token6, ts_aux_sym_repeat_helper2, 0) END_STATE(); STATE(57); @@ -739,12 +758,12 @@ PARSE_TABLE() { STATE(58); SET_LEX_STATE(0); - REDUCE(ts_builtin_sym_end, ts_sym_array, 4, COLLAPSE({1, 0, 1, 1})) + REDUCE(ts_builtin_sym_end, ts_sym_array, 4) END_STATE(); STATE(59); SET_LEX_STATE(0); - REDUCE(ts_builtin_sym_end, ts_sym_array, 2, COLLAPSE({1, 1})) + REDUCE(ts_builtin_sym_end, ts_sym_array, 2) END_STATE(); END_TABLE(); diff --git a/include/tree_sitter/parser.h b/include/tree_sitter/parser.h index 63cdd2d1..418ba2ae 100644 --- a/include/tree_sitter/parser.h +++ b/include/tree_sitter/parser.h @@ -68,13 +68,16 @@ ts_lex(ts_lexer *lexer, state_id lex_state) #define SYMBOL_NAMES \ static const char *ts_symbol_names[] +#define HIDDEN_SYMBOL_FLAGS \ +static const int hidden_symbol_flags[] + #define EXPORT_PARSER(constructor_name) \ ts_parser constructor_name() { \ ts_init_parse_table(); \ ts_parser result = { \ .parse_fn = ts_parse, \ .symbol_names = ts_symbol_names, \ - .data = ts_lr_parser_make(), \ + .data = ts_lr_parser_make(hidden_symbol_flags), \ .free_fn = NULL \ }; \ return result; \ @@ -86,14 +89,11 @@ actions_for_state[on_symbol] = (ts_parse_action) { \ .data = { .to_state = to_state_value } \ }; -#define REDUCE(on_symbol, symbol_val, child_count_val, collapse_flags_val) \ -do { \ - static const int collapse_flags[child_count_val] = collapse_flags_val; \ - actions_for_state[on_symbol] = (ts_parse_action) { \ - .type = ts_parse_action_type_reduce, \ - .data = { .symbol = symbol_val, .child_count = child_count_val, .collapse_flags = collapse_flags } \ - }; \ -} while(0); +#define REDUCE(on_symbol, symbol_val, child_count_val) \ +actions_for_state[on_symbol] = (ts_parse_action) { \ + .type = ts_parse_action_type_reduce, \ + .data = { .symbol = symbol_val, .child_count = child_count_val } \ +}; \ #define ACCEPT_INPUT(on_symbol) \ actions_for_state[on_symbol] = (ts_parse_action) { \ @@ -132,8 +132,6 @@ return ts_lexer_build_node(lexer, ts_builtin_sym_error); #define LEX_PANIC() \ { DEBUG_LEX("Lex error: unexpected state %d", LEX_STATE()); return NULL; } -#define COLLAPSE(...) __VA_ARGS__ - /* * Stack @@ -259,14 +257,16 @@ PARSE_TABLE(); typedef struct { ts_lexer lexer; ts_stack stack; + const int *hidden_symbol_flags; ts_tree *lookahead; ts_tree *next_lookahead; } ts_lr_parser; -static ts_lr_parser * ts_lr_parser_make() { +static ts_lr_parser * ts_lr_parser_make(const int *hidden_symbol_flags) { ts_lr_parser *result = malloc(sizeof(ts_lr_parser)); result->lexer = ts_lexer_make(); result->stack = ts_stack_make(); + result->hidden_symbol_flags = hidden_symbol_flags; return result; } @@ -323,9 +323,9 @@ static void ts_lr_parser_shift(ts_lr_parser *parser, state_id parse_state) { parser->next_lookahead = NULL; } -static void ts_lr_parser_reduce(ts_lr_parser *parser, ts_symbol symbol, int immediate_child_count, const int *collapse_flags) { +static void ts_lr_parser_reduce(ts_lr_parser *parser, ts_symbol symbol, int child_count) { parser->next_lookahead = parser->lookahead; - parser->lookahead = ts_stack_reduce(&parser->stack, symbol, immediate_child_count, collapse_flags); + parser->lookahead = ts_stack_reduce(&parser->stack, symbol, child_count, parser->hidden_symbol_flags); } static ts_symbol * ts_lr_parser_expected_symbols(ts_lr_parser *parser, size_t *count) { @@ -394,7 +394,7 @@ static const ts_tree * ts_parse(void *data, ts_input input, ts_input_edit *edit) ts_lr_parser_shift(parser, action.data.to_state); break; case ts_parse_action_type_reduce: - ts_lr_parser_reduce(parser, action.data.symbol, action.data.child_count, action.data.collapse_flags); + ts_lr_parser_reduce(parser, action.data.symbol, action.data.child_count); break; case ts_parse_action_type_accept: done = 1; diff --git a/src/compiler/generate_code/c_code.cc b/src/compiler/generate_code/c_code.cc index a99255da..2502e2c6 100644 --- a/src/compiler/generate_code/c_code.cc +++ b/src/compiler/generate_code/c_code.cc @@ -114,17 +114,6 @@ namespace tree_sitter { return "!(" + condition_for_character_set(rule.complement()) + ")"; } - string collapse_flags(vector flags) { - string result; - bool started = false; - for (auto flag : flags) { - if (started) result += ", "; - result += (flag ? "1" : "0"); - started = true; - } - return result; - } - string code_for_parse_actions(const rules::Symbol &symbol, const ParseAction &action) { string sym_id = symbol_id(symbol); switch (action.type) { @@ -136,8 +125,7 @@ namespace tree_sitter { return "REDUCE(" + sym_id + ", " + symbol_id(action.symbol) + ", " + - to_string(action.child_flags.size()) + ", " + - "COLLAPSE({" + collapse_flags(action.child_flags) + "}))"; + to_string(action.child_flags.size()) + ")"; default: return ""; } @@ -206,6 +194,14 @@ namespace tree_sitter { result += indent(string("\"") + symbol.name) + "\",\n"; return result + "};"; } + + string hidden_symbol_flags() { + string result = "HIDDEN_SYMBOL_FLAGS = {\n"; + for (auto &symbol : parse_table.symbols) + if (!symbol.is_built_in()) + result += indent(symbol.is_hidden() ? "1" : "0") + ",\n"; + return result + "};"; + } string includes() { return "#include \"tree_sitter/parser.h\""; @@ -265,6 +261,7 @@ namespace tree_sitter { symbol_count(), symbol_enum(), rule_names_list(), + hidden_symbol_flags(), lex_function(), parse_table_function(), parser_export(), diff --git a/src/runtime/stack.c b/src/runtime/stack.c index 2d6cee67..528ef5f7 100644 --- a/src/runtime/stack.c +++ b/src/runtime/stack.c @@ -58,7 +58,7 @@ size_t ts_stack_right_position(const ts_stack *stack) { return result; } -ts_tree * ts_stack_reduce(ts_stack *stack, ts_symbol symbol, int immediate_child_count, const int *collapse_flags) { +ts_tree * ts_stack_reduce(ts_stack *stack, ts_symbol symbol, int immediate_child_count, const int *hidden_symbol_flags) { size_t new_stack_size = stack->size - immediate_child_count; size_t size = 0, offset = 0; @@ -72,7 +72,8 @@ ts_tree * ts_stack_reduce(ts_stack *stack, ts_symbol symbol, int immediate_child size += ts_tree_offset(child) + ts_tree_size(child); } - if (collapse_flags[i]) { + ts_symbol symbol = ts_tree_symbol(child); + if (symbol >= 0 && hidden_symbol_flags[symbol]) { size_t grandchild_count; ts_tree_children(child, &grandchild_count); child_count += grandchild_count; @@ -89,7 +90,9 @@ ts_tree * ts_stack_reduce(ts_stack *stack, ts_symbol symbol, int immediate_child ts_tree *child = stack->entries[new_stack_size + i].node; immediate_children[i] = child; - if (collapse_flags[i]) { + + ts_symbol symbol = ts_tree_symbol(child); + if (symbol >= 0 && hidden_symbol_flags[symbol]) { size_t grandchild_count; ts_tree ** grandchildren = ts_tree_children(child, &grandchild_count); memcpy(children + child_index, grandchildren, (grandchild_count * sizeof(ts_tree *)));