In build_parse_table, switch recursion to explicit iteration

This commit is contained in:
Max Brunsfeld 2014-07-13 18:06:33 -07:00
parent b217cd38fb
commit 4d14a65e22
5 changed files with 71476 additions and 71454 deletions

View file

@ -209,36 +209,36 @@ LEX_FN() {
LEX_STATES = {
[0] = 1,
[1] = 5,
[2] = 1,
[3] = 5,
[4] = 1,
[5] = 5,
[6] = 1,
[7] = 5,
[8] = 1,
[9] = 5,
[10] = 1,
[11] = 5,
[12] = 5,
[2] = 5,
[3] = 1,
[4] = 12,
[5] = 12,
[6] = 14,
[7] = 1,
[8] = 12,
[9] = 14,
[10] = 12,
[11] = 1,
[12] = 1,
[13] = 1,
[14] = 12,
[14] = 1,
[15] = 1,
[16] = 12,
[17] = 1,
[17] = 12,
[18] = 12,
[19] = 1,
[19] = 12,
[20] = 12,
[21] = 1,
[22] = 12,
[21] = 5,
[22] = 1,
[23] = 1,
[24] = 12,
[25] = 12,
[24] = 1,
[25] = 1,
[26] = 1,
[27] = 12,
[28] = 12,
[29] = 14,
[27] = 5,
[28] = 5,
[29] = 5,
[30] = 5,
[31] = 14,
[31] = 5,
};
#pragma GCC diagnostic push
@ -247,125 +247,25 @@ LEX_STATES = {
PARSE_TABLE = {
[0] = {
[ts_sym_expression] = SHIFT(1),
[ts_sym_sum] = SHIFT(12),
[ts_sym_difference] = SHIFT(12),
[ts_sym_product] = SHIFT(12),
[ts_sym_quotient] = SHIFT(12),
[ts_sym_exponent] = SHIFT(12),
[ts_sym_group] = SHIFT(12),
[ts_sym_number] = SHIFT(12),
[ts_sym_variable] = SHIFT(12),
[ts_aux_sym_6] = SHIFT(13),
[ts_sym_sum] = SHIFT(2),
[ts_sym_difference] = SHIFT(2),
[ts_sym_product] = SHIFT(2),
[ts_sym_quotient] = SHIFT(2),
[ts_sym_exponent] = SHIFT(2),
[ts_sym_group] = SHIFT(2),
[ts_sym_number] = SHIFT(2),
[ts_sym_variable] = SHIFT(2),
[ts_aux_sym_6] = SHIFT(3),
},
[1] = {
[ts_builtin_sym_end] = ACCEPT_INPUT(),
[ts_aux_sym_1] = SHIFT(2),
[ts_aux_sym_2] = SHIFT(4),
[ts_aux_sym_3] = SHIFT(6),
[ts_aux_sym_4] = SHIFT(8),
[ts_aux_sym_5] = SHIFT(10),
[ts_aux_sym_1] = SHIFT(22),
[ts_aux_sym_2] = SHIFT(23),
[ts_aux_sym_3] = SHIFT(24),
[ts_aux_sym_4] = SHIFT(25),
[ts_aux_sym_5] = SHIFT(26),
},
[2] = {
[ts_sym_expression] = SHIFT(3),
[ts_sym_sum] = SHIFT(12),
[ts_sym_difference] = SHIFT(12),
[ts_sym_product] = SHIFT(12),
[ts_sym_quotient] = SHIFT(12),
[ts_sym_exponent] = SHIFT(12),
[ts_sym_group] = SHIFT(12),
[ts_sym_number] = SHIFT(12),
[ts_sym_variable] = SHIFT(12),
[ts_aux_sym_6] = SHIFT(13),
},
[3] = {
[ts_builtin_sym_end] = REDUCE(ts_sym_sum, 3),
[ts_aux_sym_1] = SHIFT(2),
[ts_aux_sym_2] = SHIFT(4),
[ts_aux_sym_3] = SHIFT(6),
[ts_aux_sym_4] = SHIFT(8),
[ts_aux_sym_5] = SHIFT(10),
},
[4] = {
[ts_sym_expression] = SHIFT(5),
[ts_sym_sum] = SHIFT(12),
[ts_sym_difference] = SHIFT(12),
[ts_sym_product] = SHIFT(12),
[ts_sym_quotient] = SHIFT(12),
[ts_sym_exponent] = SHIFT(12),
[ts_sym_group] = SHIFT(12),
[ts_sym_number] = SHIFT(12),
[ts_sym_variable] = SHIFT(12),
[ts_aux_sym_6] = SHIFT(13),
},
[5] = {
[ts_builtin_sym_end] = REDUCE(ts_sym_difference, 3),
[ts_aux_sym_1] = SHIFT(2),
[ts_aux_sym_2] = SHIFT(4),
[ts_aux_sym_3] = SHIFT(6),
[ts_aux_sym_4] = SHIFT(8),
[ts_aux_sym_5] = SHIFT(10),
},
[6] = {
[ts_sym_expression] = SHIFT(7),
[ts_sym_sum] = SHIFT(12),
[ts_sym_difference] = SHIFT(12),
[ts_sym_product] = SHIFT(12),
[ts_sym_quotient] = SHIFT(12),
[ts_sym_exponent] = SHIFT(12),
[ts_sym_group] = SHIFT(12),
[ts_sym_number] = SHIFT(12),
[ts_sym_variable] = SHIFT(12),
[ts_aux_sym_6] = SHIFT(13),
},
[7] = {
[ts_builtin_sym_end] = REDUCE(ts_sym_product, 3),
[ts_aux_sym_1] = REDUCE(ts_sym_product, 3),
[ts_aux_sym_2] = REDUCE(ts_sym_product, 3),
[ts_aux_sym_3] = SHIFT(6),
[ts_aux_sym_4] = SHIFT(8),
[ts_aux_sym_5] = SHIFT(10),
},
[8] = {
[ts_sym_expression] = SHIFT(9),
[ts_sym_sum] = SHIFT(12),
[ts_sym_difference] = SHIFT(12),
[ts_sym_product] = SHIFT(12),
[ts_sym_quotient] = SHIFT(12),
[ts_sym_exponent] = SHIFT(12),
[ts_sym_group] = SHIFT(12),
[ts_sym_number] = SHIFT(12),
[ts_sym_variable] = SHIFT(12),
[ts_aux_sym_6] = SHIFT(13),
},
[9] = {
[ts_builtin_sym_end] = REDUCE(ts_sym_quotient, 3),
[ts_aux_sym_1] = REDUCE(ts_sym_quotient, 3),
[ts_aux_sym_2] = REDUCE(ts_sym_quotient, 3),
[ts_aux_sym_3] = SHIFT(6),
[ts_aux_sym_4] = SHIFT(8),
[ts_aux_sym_5] = SHIFT(10),
},
[10] = {
[ts_sym_expression] = SHIFT(11),
[ts_sym_sum] = SHIFT(12),
[ts_sym_difference] = SHIFT(12),
[ts_sym_product] = SHIFT(12),
[ts_sym_quotient] = SHIFT(12),
[ts_sym_exponent] = SHIFT(12),
[ts_sym_group] = SHIFT(12),
[ts_sym_number] = SHIFT(12),
[ts_sym_variable] = SHIFT(12),
[ts_aux_sym_6] = SHIFT(13),
},
[11] = {
[ts_builtin_sym_end] = REDUCE(ts_sym_exponent, 3),
[ts_aux_sym_1] = REDUCE(ts_sym_exponent, 3),
[ts_aux_sym_2] = REDUCE(ts_sym_exponent, 3),
[ts_aux_sym_3] = REDUCE(ts_sym_exponent, 3),
[ts_aux_sym_4] = REDUCE(ts_sym_exponent, 3),
[ts_aux_sym_5] = SHIFT(10),
},
[12] = {
[ts_builtin_sym_end] = REDUCE(ts_sym_expression, 1),
[ts_aux_sym_1] = REDUCE(ts_sym_expression, 1),
[ts_aux_sym_2] = REDUCE(ts_sym_expression, 1),
@ -373,128 +273,28 @@ PARSE_TABLE = {
[ts_aux_sym_4] = REDUCE(ts_sym_expression, 1),
[ts_aux_sym_5] = REDUCE(ts_sym_expression, 1),
},
[13] = {
[ts_sym_expression] = SHIFT(14),
[ts_sym_sum] = SHIFT(25),
[ts_sym_difference] = SHIFT(25),
[ts_sym_product] = SHIFT(25),
[ts_sym_quotient] = SHIFT(25),
[ts_sym_exponent] = SHIFT(25),
[ts_sym_group] = SHIFT(25),
[ts_builtin_sym_error] = SHIFT(31),
[ts_sym_number] = SHIFT(25),
[ts_sym_variable] = SHIFT(25),
[ts_aux_sym_6] = SHIFT(26),
[3] = {
[ts_sym_expression] = SHIFT(4),
[ts_sym_sum] = SHIFT(5),
[ts_sym_difference] = SHIFT(5),
[ts_sym_product] = SHIFT(5),
[ts_sym_quotient] = SHIFT(5),
[ts_sym_exponent] = SHIFT(5),
[ts_sym_group] = SHIFT(5),
[ts_builtin_sym_error] = SHIFT(6),
[ts_sym_number] = SHIFT(5),
[ts_sym_variable] = SHIFT(5),
[ts_aux_sym_6] = SHIFT(7),
},
[14] = {
[ts_aux_sym_1] = SHIFT(15),
[ts_aux_sym_2] = SHIFT(17),
[ts_aux_sym_3] = SHIFT(19),
[ts_aux_sym_4] = SHIFT(21),
[ts_aux_sym_5] = SHIFT(23),
[ts_aux_sym_7] = SHIFT(30),
[4] = {
[ts_aux_sym_1] = SHIFT(11),
[ts_aux_sym_2] = SHIFT(12),
[ts_aux_sym_3] = SHIFT(13),
[ts_aux_sym_4] = SHIFT(14),
[ts_aux_sym_5] = SHIFT(15),
[ts_aux_sym_7] = SHIFT(21),
},
[15] = {
[ts_sym_expression] = SHIFT(16),
[ts_sym_sum] = SHIFT(25),
[ts_sym_difference] = SHIFT(25),
[ts_sym_product] = SHIFT(25),
[ts_sym_quotient] = SHIFT(25),
[ts_sym_exponent] = SHIFT(25),
[ts_sym_group] = SHIFT(25),
[ts_sym_number] = SHIFT(25),
[ts_sym_variable] = SHIFT(25),
[ts_aux_sym_6] = SHIFT(26),
},
[16] = {
[ts_aux_sym_1] = SHIFT(15),
[ts_aux_sym_2] = SHIFT(17),
[ts_aux_sym_3] = SHIFT(19),
[ts_aux_sym_4] = SHIFT(21),
[ts_aux_sym_5] = SHIFT(23),
[ts_aux_sym_7] = REDUCE(ts_sym_sum, 3),
},
[17] = {
[ts_sym_expression] = SHIFT(18),
[ts_sym_sum] = SHIFT(25),
[ts_sym_difference] = SHIFT(25),
[ts_sym_product] = SHIFT(25),
[ts_sym_quotient] = SHIFT(25),
[ts_sym_exponent] = SHIFT(25),
[ts_sym_group] = SHIFT(25),
[ts_sym_number] = SHIFT(25),
[ts_sym_variable] = SHIFT(25),
[ts_aux_sym_6] = SHIFT(26),
},
[18] = {
[ts_aux_sym_1] = SHIFT(15),
[ts_aux_sym_2] = SHIFT(17),
[ts_aux_sym_3] = SHIFT(19),
[ts_aux_sym_4] = SHIFT(21),
[ts_aux_sym_5] = SHIFT(23),
[ts_aux_sym_7] = REDUCE(ts_sym_difference, 3),
},
[19] = {
[ts_sym_expression] = SHIFT(20),
[ts_sym_sum] = SHIFT(25),
[ts_sym_difference] = SHIFT(25),
[ts_sym_product] = SHIFT(25),
[ts_sym_quotient] = SHIFT(25),
[ts_sym_exponent] = SHIFT(25),
[ts_sym_group] = SHIFT(25),
[ts_sym_number] = SHIFT(25),
[ts_sym_variable] = SHIFT(25),
[ts_aux_sym_6] = SHIFT(26),
},
[20] = {
[ts_aux_sym_1] = REDUCE(ts_sym_product, 3),
[ts_aux_sym_2] = REDUCE(ts_sym_product, 3),
[ts_aux_sym_3] = SHIFT(19),
[ts_aux_sym_4] = SHIFT(21),
[ts_aux_sym_5] = SHIFT(23),
[ts_aux_sym_7] = REDUCE(ts_sym_product, 3),
},
[21] = {
[ts_sym_expression] = SHIFT(22),
[ts_sym_sum] = SHIFT(25),
[ts_sym_difference] = SHIFT(25),
[ts_sym_product] = SHIFT(25),
[ts_sym_quotient] = SHIFT(25),
[ts_sym_exponent] = SHIFT(25),
[ts_sym_group] = SHIFT(25),
[ts_sym_number] = SHIFT(25),
[ts_sym_variable] = SHIFT(25),
[ts_aux_sym_6] = SHIFT(26),
},
[22] = {
[ts_aux_sym_1] = REDUCE(ts_sym_quotient, 3),
[ts_aux_sym_2] = REDUCE(ts_sym_quotient, 3),
[ts_aux_sym_3] = SHIFT(19),
[ts_aux_sym_4] = SHIFT(21),
[ts_aux_sym_5] = SHIFT(23),
[ts_aux_sym_7] = REDUCE(ts_sym_quotient, 3),
},
[23] = {
[ts_sym_expression] = SHIFT(24),
[ts_sym_sum] = SHIFT(25),
[ts_sym_difference] = SHIFT(25),
[ts_sym_product] = SHIFT(25),
[ts_sym_quotient] = SHIFT(25),
[ts_sym_exponent] = SHIFT(25),
[ts_sym_group] = SHIFT(25),
[ts_sym_number] = SHIFT(25),
[ts_sym_variable] = SHIFT(25),
[ts_aux_sym_6] = SHIFT(26),
},
[24] = {
[ts_aux_sym_1] = REDUCE(ts_sym_exponent, 3),
[ts_aux_sym_2] = REDUCE(ts_sym_exponent, 3),
[ts_aux_sym_3] = REDUCE(ts_sym_exponent, 3),
[ts_aux_sym_4] = REDUCE(ts_sym_exponent, 3),
[ts_aux_sym_5] = SHIFT(23),
[ts_aux_sym_7] = REDUCE(ts_sym_exponent, 3),
},
[25] = {
[5] = {
[ts_aux_sym_1] = REDUCE(ts_sym_expression, 1),
[ts_aux_sym_2] = REDUCE(ts_sym_expression, 1),
[ts_aux_sym_3] = REDUCE(ts_sym_expression, 1),
@ -502,28 +302,34 @@ PARSE_TABLE = {
[ts_aux_sym_5] = REDUCE(ts_sym_expression, 1),
[ts_aux_sym_7] = REDUCE(ts_sym_expression, 1),
},
[26] = {
[ts_sym_expression] = SHIFT(27),
[ts_sym_sum] = SHIFT(25),
[ts_sym_difference] = SHIFT(25),
[ts_sym_product] = SHIFT(25),
[ts_sym_quotient] = SHIFT(25),
[ts_sym_exponent] = SHIFT(25),
[ts_sym_group] = SHIFT(25),
[ts_builtin_sym_error] = SHIFT(29),
[ts_sym_number] = SHIFT(25),
[ts_sym_variable] = SHIFT(25),
[ts_aux_sym_6] = SHIFT(26),
[6] = {
[ts_aux_sym_7] = SHIFT(21),
},
[27] = {
[ts_aux_sym_1] = SHIFT(15),
[ts_aux_sym_2] = SHIFT(17),
[ts_aux_sym_3] = SHIFT(19),
[ts_aux_sym_4] = SHIFT(21),
[ts_aux_sym_5] = SHIFT(23),
[ts_aux_sym_7] = SHIFT(28),
[7] = {
[ts_sym_expression] = SHIFT(8),
[ts_sym_sum] = SHIFT(5),
[ts_sym_difference] = SHIFT(5),
[ts_sym_product] = SHIFT(5),
[ts_sym_quotient] = SHIFT(5),
[ts_sym_exponent] = SHIFT(5),
[ts_sym_group] = SHIFT(5),
[ts_builtin_sym_error] = SHIFT(9),
[ts_sym_number] = SHIFT(5),
[ts_sym_variable] = SHIFT(5),
[ts_aux_sym_6] = SHIFT(7),
},
[28] = {
[8] = {
[ts_aux_sym_1] = SHIFT(11),
[ts_aux_sym_2] = SHIFT(12),
[ts_aux_sym_3] = SHIFT(13),
[ts_aux_sym_4] = SHIFT(14),
[ts_aux_sym_5] = SHIFT(15),
[ts_aux_sym_7] = SHIFT(10),
},
[9] = {
[ts_aux_sym_7] = SHIFT(10),
},
[10] = {
[ts_aux_sym_1] = REDUCE(ts_sym_group, 3),
[ts_aux_sym_2] = REDUCE(ts_sym_group, 3),
[ts_aux_sym_3] = REDUCE(ts_sym_group, 3),
@ -531,10 +337,107 @@ PARSE_TABLE = {
[ts_aux_sym_5] = REDUCE(ts_sym_group, 3),
[ts_aux_sym_7] = REDUCE(ts_sym_group, 3),
},
[29] = {
[ts_aux_sym_7] = SHIFT(28),
[11] = {
[ts_sym_expression] = SHIFT(20),
[ts_sym_sum] = SHIFT(5),
[ts_sym_difference] = SHIFT(5),
[ts_sym_product] = SHIFT(5),
[ts_sym_quotient] = SHIFT(5),
[ts_sym_exponent] = SHIFT(5),
[ts_sym_group] = SHIFT(5),
[ts_sym_number] = SHIFT(5),
[ts_sym_variable] = SHIFT(5),
[ts_aux_sym_6] = SHIFT(7),
},
[30] = {
[12] = {
[ts_sym_expression] = SHIFT(19),
[ts_sym_sum] = SHIFT(5),
[ts_sym_difference] = SHIFT(5),
[ts_sym_product] = SHIFT(5),
[ts_sym_quotient] = SHIFT(5),
[ts_sym_exponent] = SHIFT(5),
[ts_sym_group] = SHIFT(5),
[ts_sym_number] = SHIFT(5),
[ts_sym_variable] = SHIFT(5),
[ts_aux_sym_6] = SHIFT(7),
},
[13] = {
[ts_sym_expression] = SHIFT(18),
[ts_sym_sum] = SHIFT(5),
[ts_sym_difference] = SHIFT(5),
[ts_sym_product] = SHIFT(5),
[ts_sym_quotient] = SHIFT(5),
[ts_sym_exponent] = SHIFT(5),
[ts_sym_group] = SHIFT(5),
[ts_sym_number] = SHIFT(5),
[ts_sym_variable] = SHIFT(5),
[ts_aux_sym_6] = SHIFT(7),
},
[14] = {
[ts_sym_expression] = SHIFT(17),
[ts_sym_sum] = SHIFT(5),
[ts_sym_difference] = SHIFT(5),
[ts_sym_product] = SHIFT(5),
[ts_sym_quotient] = SHIFT(5),
[ts_sym_exponent] = SHIFT(5),
[ts_sym_group] = SHIFT(5),
[ts_sym_number] = SHIFT(5),
[ts_sym_variable] = SHIFT(5),
[ts_aux_sym_6] = SHIFT(7),
},
[15] = {
[ts_sym_expression] = SHIFT(16),
[ts_sym_sum] = SHIFT(5),
[ts_sym_difference] = SHIFT(5),
[ts_sym_product] = SHIFT(5),
[ts_sym_quotient] = SHIFT(5),
[ts_sym_exponent] = SHIFT(5),
[ts_sym_group] = SHIFT(5),
[ts_sym_number] = SHIFT(5),
[ts_sym_variable] = SHIFT(5),
[ts_aux_sym_6] = SHIFT(7),
},
[16] = {
[ts_aux_sym_1] = REDUCE(ts_sym_exponent, 3),
[ts_aux_sym_2] = REDUCE(ts_sym_exponent, 3),
[ts_aux_sym_3] = REDUCE(ts_sym_exponent, 3),
[ts_aux_sym_4] = REDUCE(ts_sym_exponent, 3),
[ts_aux_sym_5] = SHIFT(15),
[ts_aux_sym_7] = REDUCE(ts_sym_exponent, 3),
},
[17] = {
[ts_aux_sym_1] = REDUCE(ts_sym_quotient, 3),
[ts_aux_sym_2] = REDUCE(ts_sym_quotient, 3),
[ts_aux_sym_3] = SHIFT(13),
[ts_aux_sym_4] = SHIFT(14),
[ts_aux_sym_5] = SHIFT(15),
[ts_aux_sym_7] = REDUCE(ts_sym_quotient, 3),
},
[18] = {
[ts_aux_sym_1] = REDUCE(ts_sym_product, 3),
[ts_aux_sym_2] = REDUCE(ts_sym_product, 3),
[ts_aux_sym_3] = SHIFT(13),
[ts_aux_sym_4] = SHIFT(14),
[ts_aux_sym_5] = SHIFT(15),
[ts_aux_sym_7] = REDUCE(ts_sym_product, 3),
},
[19] = {
[ts_aux_sym_1] = SHIFT(11),
[ts_aux_sym_2] = SHIFT(12),
[ts_aux_sym_3] = SHIFT(13),
[ts_aux_sym_4] = SHIFT(14),
[ts_aux_sym_5] = SHIFT(15),
[ts_aux_sym_7] = REDUCE(ts_sym_difference, 3),
},
[20] = {
[ts_aux_sym_1] = SHIFT(11),
[ts_aux_sym_2] = SHIFT(12),
[ts_aux_sym_3] = SHIFT(13),
[ts_aux_sym_4] = SHIFT(14),
[ts_aux_sym_5] = SHIFT(15),
[ts_aux_sym_7] = REDUCE(ts_sym_sum, 3),
},
[21] = {
[ts_builtin_sym_end] = REDUCE(ts_sym_group, 3),
[ts_aux_sym_1] = REDUCE(ts_sym_group, 3),
[ts_aux_sym_2] = REDUCE(ts_sym_group, 3),
@ -542,8 +445,105 @@ PARSE_TABLE = {
[ts_aux_sym_4] = REDUCE(ts_sym_group, 3),
[ts_aux_sym_5] = REDUCE(ts_sym_group, 3),
},
[22] = {
[ts_sym_expression] = SHIFT(31),
[ts_sym_sum] = SHIFT(2),
[ts_sym_difference] = SHIFT(2),
[ts_sym_product] = SHIFT(2),
[ts_sym_quotient] = SHIFT(2),
[ts_sym_exponent] = SHIFT(2),
[ts_sym_group] = SHIFT(2),
[ts_sym_number] = SHIFT(2),
[ts_sym_variable] = SHIFT(2),
[ts_aux_sym_6] = SHIFT(3),
},
[23] = {
[ts_sym_expression] = SHIFT(30),
[ts_sym_sum] = SHIFT(2),
[ts_sym_difference] = SHIFT(2),
[ts_sym_product] = SHIFT(2),
[ts_sym_quotient] = SHIFT(2),
[ts_sym_exponent] = SHIFT(2),
[ts_sym_group] = SHIFT(2),
[ts_sym_number] = SHIFT(2),
[ts_sym_variable] = SHIFT(2),
[ts_aux_sym_6] = SHIFT(3),
},
[24] = {
[ts_sym_expression] = SHIFT(29),
[ts_sym_sum] = SHIFT(2),
[ts_sym_difference] = SHIFT(2),
[ts_sym_product] = SHIFT(2),
[ts_sym_quotient] = SHIFT(2),
[ts_sym_exponent] = SHIFT(2),
[ts_sym_group] = SHIFT(2),
[ts_sym_number] = SHIFT(2),
[ts_sym_variable] = SHIFT(2),
[ts_aux_sym_6] = SHIFT(3),
},
[25] = {
[ts_sym_expression] = SHIFT(28),
[ts_sym_sum] = SHIFT(2),
[ts_sym_difference] = SHIFT(2),
[ts_sym_product] = SHIFT(2),
[ts_sym_quotient] = SHIFT(2),
[ts_sym_exponent] = SHIFT(2),
[ts_sym_group] = SHIFT(2),
[ts_sym_number] = SHIFT(2),
[ts_sym_variable] = SHIFT(2),
[ts_aux_sym_6] = SHIFT(3),
},
[26] = {
[ts_sym_expression] = SHIFT(27),
[ts_sym_sum] = SHIFT(2),
[ts_sym_difference] = SHIFT(2),
[ts_sym_product] = SHIFT(2),
[ts_sym_quotient] = SHIFT(2),
[ts_sym_exponent] = SHIFT(2),
[ts_sym_group] = SHIFT(2),
[ts_sym_number] = SHIFT(2),
[ts_sym_variable] = SHIFT(2),
[ts_aux_sym_6] = SHIFT(3),
},
[27] = {
[ts_builtin_sym_end] = REDUCE(ts_sym_exponent, 3),
[ts_aux_sym_1] = REDUCE(ts_sym_exponent, 3),
[ts_aux_sym_2] = REDUCE(ts_sym_exponent, 3),
[ts_aux_sym_3] = REDUCE(ts_sym_exponent, 3),
[ts_aux_sym_4] = REDUCE(ts_sym_exponent, 3),
[ts_aux_sym_5] = SHIFT(26),
},
[28] = {
[ts_builtin_sym_end] = REDUCE(ts_sym_quotient, 3),
[ts_aux_sym_1] = REDUCE(ts_sym_quotient, 3),
[ts_aux_sym_2] = REDUCE(ts_sym_quotient, 3),
[ts_aux_sym_3] = SHIFT(24),
[ts_aux_sym_4] = SHIFT(25),
[ts_aux_sym_5] = SHIFT(26),
},
[29] = {
[ts_builtin_sym_end] = REDUCE(ts_sym_product, 3),
[ts_aux_sym_1] = REDUCE(ts_sym_product, 3),
[ts_aux_sym_2] = REDUCE(ts_sym_product, 3),
[ts_aux_sym_3] = SHIFT(24),
[ts_aux_sym_4] = SHIFT(25),
[ts_aux_sym_5] = SHIFT(26),
},
[30] = {
[ts_builtin_sym_end] = REDUCE(ts_sym_difference, 3),
[ts_aux_sym_1] = SHIFT(22),
[ts_aux_sym_2] = SHIFT(23),
[ts_aux_sym_3] = SHIFT(24),
[ts_aux_sym_4] = SHIFT(25),
[ts_aux_sym_5] = SHIFT(26),
},
[31] = {
[ts_aux_sym_7] = SHIFT(30),
[ts_builtin_sym_end] = REDUCE(ts_sym_sum, 3),
[ts_aux_sym_1] = SHIFT(22),
[ts_aux_sym_2] = SHIFT(23),
[ts_aux_sym_3] = SHIFT(24),
[ts_aux_sym_4] = SHIFT(25),
[ts_aux_sym_5] = SHIFT(26),
},
};

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -202,51 +202,6 @@ LEX_FN() {
(lookahead == '\r') ||
(lookahead == ' '))
ADVANCE(28);
if (lookahead == ',')
ADVANCE(29);
if (lookahead == '}')
ADVANCE(27);
LEX_ERROR();
case 29:
ACCEPT_TOKEN(ts_aux_sym_3);
case 30:
START_TOKEN();
if ((lookahead == '\t') ||
(lookahead == '\n') ||
(lookahead == '\r') ||
(lookahead == ' '))
ADVANCE(30);
if (lookahead == '}')
ADVANCE(27);
LEX_ERROR();
case 31:
START_TOKEN();
if ((lookahead == '\t') ||
(lookahead == '\n') ||
(lookahead == '\r') ||
(lookahead == ' '))
ADVANCE(31);
if (lookahead == '\"')
ADVANCE(2);
LEX_ERROR();
case 32:
START_TOKEN();
if ((lookahead == '\t') ||
(lookahead == '\n') ||
(lookahead == '\r') ||
(lookahead == ' '))
ADVANCE(32);
if (lookahead == ':')
ADVANCE(33);
LEX_ERROR();
case 33:
ACCEPT_TOKEN(ts_aux_sym_2);
case 34:
START_TOKEN();
if (('\t' <= lookahead && lookahead <= '\n') ||
(lookahead == '\r') ||
(lookahead == ' '))
ADVANCE(34);
if (lookahead == '\"')
ADVANCE(2);
if ('0' <= lookahead && lookahead <= '9')
@ -254,7 +209,7 @@ LEX_FN() {
if (lookahead == '[')
ADVANCE(9);
if (lookahead == ']')
ADVANCE(35);
ADVANCE(29);
if (lookahead == 'f')
ADVANCE(10);
if (lookahead == 'n')
@ -264,19 +219,64 @@ LEX_FN() {
if (lookahead == '{')
ADVANCE(23);
LEX_ERROR();
case 35:
case 29:
ACCEPT_TOKEN(ts_aux_sym_6);
case 36:
case 30:
START_TOKEN();
if (('\t' <= lookahead && lookahead <= '\n') ||
(lookahead == '\r') ||
(lookahead == ' '))
ADVANCE(36);
ADVANCE(30);
if (lookahead == ',')
ADVANCE(29);
ADVANCE(31);
if (lookahead == ']')
ADVANCE(29);
LEX_ERROR();
case 31:
ACCEPT_TOKEN(ts_aux_sym_3);
case 32:
START_TOKEN();
if ((lookahead == '\t') ||
(lookahead == '\n') ||
(lookahead == '\r') ||
(lookahead == ' '))
ADVANCE(32);
if (lookahead == ']')
ADVANCE(29);
LEX_ERROR();
case 33:
START_TOKEN();
if (('\t' <= lookahead && lookahead <= '\n') ||
(lookahead == '\r') ||
(lookahead == ' '))
ADVANCE(33);
if (lookahead == ',')
ADVANCE(31);
if (lookahead == '}')
ADVANCE(27);
LEX_ERROR();
case 34:
START_TOKEN();
if ((lookahead == '\t') ||
(lookahead == '\n') ||
(lookahead == '\r') ||
(lookahead == ' '))
ADVANCE(34);
if (lookahead == ':')
ADVANCE(35);
LEX_ERROR();
case 35:
ACCEPT_TOKEN(ts_aux_sym_2);
case 36:
START_TOKEN();
if ((lookahead == '\t') ||
(lookahead == '\n') ||
(lookahead == '\r') ||
(lookahead == ' '))
ADVANCE(36);
if (lookahead == '}')
ADVANCE(27);
LEX_ERROR();
case 37:
START_TOKEN();
if ((lookahead == '\t') ||
@ -284,8 +284,8 @@ LEX_FN() {
(lookahead == '\r') ||
(lookahead == ' '))
ADVANCE(37);
if (lookahead == ']')
ADVANCE(35);
if (lookahead == '\"')
ADVANCE(2);
LEX_ERROR();
case 38:
START_TOKEN();
@ -298,15 +298,15 @@ LEX_FN() {
if (lookahead == '\"')
ADVANCE(2);
if (lookahead == ',')
ADVANCE(29);
ADVANCE(31);
if ('0' <= lookahead && lookahead <= '9')
ADVANCE(6);
if (lookahead == ':')
ADVANCE(33);
ADVANCE(35);
if (lookahead == '[')
ADVANCE(9);
if (lookahead == ']')
ADVANCE(35);
ADVANCE(29);
if (lookahead == 'f')
ADVANCE(10);
if (lookahead == 'n')
@ -319,6 +319,7 @@ LEX_FN() {
ADVANCE(27);
LEX_ERROR();
case ts_lex_state_error:
START_TOKEN();
if (lookahead == '\0')
ADVANCE(25);
if (('\t' <= lookahead && lookahead <= '\n') ||
@ -328,15 +329,15 @@ LEX_FN() {
if (lookahead == '\"')
ADVANCE(2);
if (lookahead == ',')
ADVANCE(29);
ADVANCE(31);
if ('0' <= lookahead && lookahead <= '9')
ADVANCE(6);
if (lookahead == ':')
ADVANCE(33);
ADVANCE(35);
if (lookahead == '[')
ADVANCE(9);
if (lookahead == ']')
ADVANCE(35);
ADVANCE(29);
if (lookahead == 'f')
ADVANCE(10);
if (lookahead == 'n')
@ -360,59 +361,59 @@ LEX_STATES = {
[3] = 26,
[4] = 28,
[5] = 30,
[6] = 24,
[7] = 31,
[6] = 30,
[7] = 26,
[8] = 28,
[9] = 30,
[10] = 32,
[11] = 1,
[12] = 28,
[13] = 30,
[14] = 28,
[15] = 26,
[16] = 28,
[17] = 30,
[18] = 28,
[19] = 32,
[9] = 24,
[10] = 30,
[11] = 30,
[12] = 32,
[13] = 1,
[14] = 30,
[15] = 32,
[16] = 30,
[17] = 33,
[18] = 34,
[19] = 30,
[20] = 1,
[21] = 28,
[22] = 30,
[23] = 28,
[24] = 34,
[25] = 36,
[26] = 37,
[27] = 28,
[28] = 1,
[29] = 36,
[30] = 37,
[31] = 36,
[32] = 26,
[33] = 28,
[34] = 30,
[35] = 36,
[36] = 32,
[37] = 1,
[38] = 28,
[39] = 30,
[21] = 33,
[22] = 33,
[23] = 26,
[24] = 28,
[25] = 30,
[26] = 33,
[27] = 32,
[28] = 33,
[29] = 33,
[30] = 34,
[31] = 33,
[32] = 1,
[33] = 33,
[34] = 36,
[35] = 37,
[36] = 33,
[37] = 34,
[38] = 1,
[39] = 33,
[40] = 36,
[41] = 36,
[42] = 34,
[42] = 33,
[43] = 36,
[44] = 37,
[44] = 33,
[45] = 36,
[46] = 36,
[47] = 28,
[48] = 28,
[46] = 30,
[47] = 36,
[48] = 30,
[49] = 32,
[50] = 1,
[51] = 28,
[52] = 30,
[50] = 24,
[51] = 33,
[52] = 34,
[53] = 24,
[54] = 24,
[55] = 34,
[54] = 1,
[55] = 33,
[56] = 36,
[57] = 37,
[58] = 24,
[57] = 24,
[58] = 36,
[59] = 24,
};
@ -430,7 +431,7 @@ PARSE_TABLE = {
[ts_sym_true] = SHIFT(2),
[ts_sym_false] = SHIFT(2),
[ts_aux_sym_1] = SHIFT(3),
[ts_aux_sym_5] = SHIFT(55),
[ts_aux_sym_5] = SHIFT(4),
},
[1] = {
[ts_builtin_sym_end] = ACCEPT_INPUT(),
@ -439,297 +440,297 @@ PARSE_TABLE = {
[ts_builtin_sym_end] = REDUCE(ts_sym_value, 1),
},
[3] = {
[ts_builtin_sym_error] = SHIFT(4),
[ts_sym_string] = SHIFT(49),
[ts_aux_sym_4] = SHIFT(54),
[ts_builtin_sym_error] = SHIFT(51),
[ts_sym_string] = SHIFT(52),
[ts_aux_sym_4] = SHIFT(53),
},
[4] = {
[ts_aux_sym_object_repeat0] = SHIFT(5),
[ts_aux_sym_3] = SHIFT(7),
[ts_aux_sym_4] = REDUCE(ts_aux_sym_object_repeat0, 0),
[ts_sym_value] = SHIFT(5),
[ts_sym_object] = SHIFT(6),
[ts_sym_array] = SHIFT(6),
[ts_builtin_sym_error] = SHIFT(5),
[ts_sym_string] = SHIFT(6),
[ts_sym_number] = SHIFT(6),
[ts_sym_null] = SHIFT(6),
[ts_sym_true] = SHIFT(6),
[ts_sym_false] = SHIFT(6),
[ts_aux_sym_1] = SHIFT(7),
[ts_aux_sym_5] = SHIFT(8),
[ts_aux_sym_6] = SHIFT(9),
},
[5] = {
[ts_aux_sym_4] = SHIFT(6),
[ts_aux_sym_array_repeat0] = SHIFT(49),
[ts_aux_sym_3] = SHIFT(13),
[ts_aux_sym_6] = REDUCE(ts_aux_sym_array_repeat0, 0),
},
[6] = {
[ts_builtin_sym_end] = REDUCE(ts_sym_object, 4),
},
[7] = {
[ts_builtin_sym_error] = SHIFT(8),
[ts_sym_string] = SHIFT(10),
},
[8] = {
[ts_aux_sym_object_repeat0] = SHIFT(9),
[ts_aux_sym_3] = SHIFT(7),
[ts_aux_sym_4] = REDUCE(ts_aux_sym_object_repeat0, 0),
},
[9] = {
[ts_aux_sym_4] = REDUCE(ts_aux_sym_object_repeat0, 3),
},
[10] = {
[ts_aux_sym_2] = SHIFT(11),
},
[11] = {
[ts_sym_value] = SHIFT(12),
[ts_sym_object] = SHIFT(14),
[ts_sym_array] = SHIFT(14),
[ts_sym_string] = SHIFT(14),
[ts_sym_number] = SHIFT(14),
[ts_sym_null] = SHIFT(14),
[ts_sym_true] = SHIFT(14),
[ts_sym_false] = SHIFT(14),
[ts_aux_sym_1] = SHIFT(15),
[ts_aux_sym_5] = SHIFT(24),
},
[12] = {
[ts_aux_sym_object_repeat0] = SHIFT(13),
[ts_aux_sym_3] = SHIFT(7),
[ts_aux_sym_4] = REDUCE(ts_aux_sym_object_repeat0, 0),
},
[13] = {
[ts_aux_sym_4] = REDUCE(ts_aux_sym_object_repeat0, 5),
},
[14] = {
[ts_aux_sym_3] = REDUCE(ts_sym_value, 1),
[ts_aux_sym_4] = REDUCE(ts_sym_value, 1),
},
[15] = {
[ts_builtin_sym_error] = SHIFT(16),
[ts_sym_string] = SHIFT(19),
[ts_aux_sym_4] = SHIFT(48),
},
[16] = {
[ts_aux_sym_object_repeat0] = SHIFT(17),
[ts_aux_sym_3] = SHIFT(7),
[ts_aux_sym_4] = REDUCE(ts_aux_sym_object_repeat0, 0),
},
[17] = {
[ts_aux_sym_4] = SHIFT(18),
},
[18] = {
[ts_aux_sym_3] = REDUCE(ts_sym_object, 4),
[ts_aux_sym_4] = REDUCE(ts_sym_object, 4),
},
[19] = {
[ts_aux_sym_2] = SHIFT(20),
},
[20] = {
[ts_sym_value] = SHIFT(21),
[ts_sym_object] = SHIFT(14),
[ts_sym_array] = SHIFT(14),
[ts_sym_string] = SHIFT(14),
[ts_sym_number] = SHIFT(14),
[ts_sym_null] = SHIFT(14),
[ts_sym_true] = SHIFT(14),
[ts_sym_false] = SHIFT(14),
[ts_aux_sym_1] = SHIFT(15),
[ts_aux_sym_5] = SHIFT(24),
},
[21] = {
[ts_aux_sym_object_repeat0] = SHIFT(22),
[ts_aux_sym_3] = SHIFT(7),
[ts_aux_sym_4] = REDUCE(ts_aux_sym_object_repeat0, 0),
},
[22] = {
[ts_aux_sym_4] = SHIFT(23),
},
[23] = {
[ts_aux_sym_3] = REDUCE(ts_sym_object, 6),
[ts_aux_sym_4] = REDUCE(ts_sym_object, 6),
},
[24] = {
[ts_sym_value] = SHIFT(25),
[ts_sym_object] = SHIFT(31),
[ts_sym_array] = SHIFT(31),
[ts_builtin_sym_error] = SHIFT(25),
[ts_sym_string] = SHIFT(31),
[ts_sym_number] = SHIFT(31),
[ts_sym_null] = SHIFT(31),
[ts_sym_true] = SHIFT(31),
[ts_sym_false] = SHIFT(31),
[ts_aux_sym_1] = SHIFT(32),
[ts_aux_sym_5] = SHIFT(42),
[ts_aux_sym_6] = SHIFT(47),
},
[25] = {
[ts_aux_sym_array_repeat0] = SHIFT(26),
[ts_aux_sym_3] = SHIFT(28),
[ts_aux_sym_6] = REDUCE(ts_aux_sym_array_repeat0, 0),
},
[26] = {
[ts_aux_sym_6] = SHIFT(27),
},
[27] = {
[ts_aux_sym_3] = REDUCE(ts_sym_array, 4),
[ts_aux_sym_4] = REDUCE(ts_sym_array, 4),
},
[28] = {
[ts_sym_value] = SHIFT(29),
[ts_sym_object] = SHIFT(31),
[ts_sym_array] = SHIFT(31),
[ts_builtin_sym_error] = SHIFT(29),
[ts_sym_string] = SHIFT(31),
[ts_sym_number] = SHIFT(31),
[ts_sym_null] = SHIFT(31),
[ts_sym_true] = SHIFT(31),
[ts_sym_false] = SHIFT(31),
[ts_aux_sym_1] = SHIFT(32),
[ts_aux_sym_5] = SHIFT(42),
},
[29] = {
[ts_aux_sym_array_repeat0] = SHIFT(30),
[ts_aux_sym_3] = SHIFT(28),
[ts_aux_sym_6] = REDUCE(ts_aux_sym_array_repeat0, 0),
},
[30] = {
[ts_aux_sym_6] = REDUCE(ts_aux_sym_array_repeat0, 3),
},
[31] = {
[ts_aux_sym_3] = REDUCE(ts_sym_value, 1),
[ts_aux_sym_6] = REDUCE(ts_sym_value, 1),
},
[32] = {
[ts_builtin_sym_error] = SHIFT(33),
[ts_sym_string] = SHIFT(36),
[ts_aux_sym_4] = SHIFT(41),
[7] = {
[ts_builtin_sym_error] = SHIFT(17),
[ts_sym_string] = SHIFT(18),
[ts_aux_sym_4] = SHIFT(19),
},
[33] = {
[ts_aux_sym_object_repeat0] = SHIFT(34),
[ts_aux_sym_3] = SHIFT(7),
[ts_aux_sym_4] = REDUCE(ts_aux_sym_object_repeat0, 0),
[8] = {
[ts_sym_value] = SHIFT(10),
[ts_sym_object] = SHIFT(6),
[ts_sym_array] = SHIFT(6),
[ts_builtin_sym_error] = SHIFT(10),
[ts_sym_string] = SHIFT(6),
[ts_sym_number] = SHIFT(6),
[ts_sym_null] = SHIFT(6),
[ts_sym_true] = SHIFT(6),
[ts_sym_false] = SHIFT(6),
[ts_aux_sym_1] = SHIFT(7),
[ts_aux_sym_5] = SHIFT(8),
[ts_aux_sym_6] = SHIFT(11),
},
[34] = {
[ts_aux_sym_4] = SHIFT(35),
[9] = {
[ts_builtin_sym_end] = REDUCE(ts_sym_array, 2),
},
[35] = {
[ts_aux_sym_3] = REDUCE(ts_sym_object, 4),
[ts_aux_sym_6] = REDUCE(ts_sym_object, 4),
},
[36] = {
[ts_aux_sym_2] = SHIFT(37),
},
[37] = {
[ts_sym_value] = SHIFT(38),
[ts_sym_object] = SHIFT(14),
[ts_sym_array] = SHIFT(14),
[ts_sym_string] = SHIFT(14),
[ts_sym_number] = SHIFT(14),
[ts_sym_null] = SHIFT(14),
[ts_sym_true] = SHIFT(14),
[ts_sym_false] = SHIFT(14),
[ts_aux_sym_1] = SHIFT(15),
[ts_aux_sym_5] = SHIFT(24),
},
[38] = {
[ts_aux_sym_object_repeat0] = SHIFT(39),
[ts_aux_sym_3] = SHIFT(7),
[ts_aux_sym_4] = REDUCE(ts_aux_sym_object_repeat0, 0),
},
[39] = {
[ts_aux_sym_4] = SHIFT(40),
},
[40] = {
[ts_aux_sym_3] = REDUCE(ts_sym_object, 6),
[ts_aux_sym_6] = REDUCE(ts_sym_object, 6),
},
[41] = {
[ts_aux_sym_3] = REDUCE(ts_sym_object, 2),
[ts_aux_sym_6] = REDUCE(ts_sym_object, 2),
},
[42] = {
[ts_sym_value] = SHIFT(43),
[ts_sym_object] = SHIFT(31),
[ts_sym_array] = SHIFT(31),
[ts_builtin_sym_error] = SHIFT(43),
[ts_sym_string] = SHIFT(31),
[ts_sym_number] = SHIFT(31),
[ts_sym_null] = SHIFT(31),
[ts_sym_true] = SHIFT(31),
[ts_sym_false] = SHIFT(31),
[ts_aux_sym_1] = SHIFT(32),
[ts_aux_sym_5] = SHIFT(42),
[ts_aux_sym_6] = SHIFT(46),
},
[43] = {
[ts_aux_sym_array_repeat0] = SHIFT(44),
[ts_aux_sym_3] = SHIFT(28),
[10] = {
[ts_aux_sym_array_repeat0] = SHIFT(12),
[ts_aux_sym_3] = SHIFT(13),
[ts_aux_sym_6] = REDUCE(ts_aux_sym_array_repeat0, 0),
},
[44] = {
[ts_aux_sym_6] = SHIFT(45),
},
[45] = {
[ts_aux_sym_3] = REDUCE(ts_sym_array, 4),
[ts_aux_sym_6] = REDUCE(ts_sym_array, 4),
},
[46] = {
[11] = {
[ts_aux_sym_3] = REDUCE(ts_sym_array, 2),
[ts_aux_sym_6] = REDUCE(ts_sym_array, 2),
},
[47] = {
[12] = {
[ts_aux_sym_6] = SHIFT(16),
},
[13] = {
[ts_sym_value] = SHIFT(14),
[ts_sym_object] = SHIFT(6),
[ts_sym_array] = SHIFT(6),
[ts_builtin_sym_error] = SHIFT(14),
[ts_sym_string] = SHIFT(6),
[ts_sym_number] = SHIFT(6),
[ts_sym_null] = SHIFT(6),
[ts_sym_true] = SHIFT(6),
[ts_sym_false] = SHIFT(6),
[ts_aux_sym_1] = SHIFT(7),
[ts_aux_sym_5] = SHIFT(8),
},
[14] = {
[ts_aux_sym_array_repeat0] = SHIFT(15),
[ts_aux_sym_3] = SHIFT(13),
[ts_aux_sym_6] = REDUCE(ts_aux_sym_array_repeat0, 0),
},
[15] = {
[ts_aux_sym_6] = REDUCE(ts_aux_sym_array_repeat0, 3),
},
[16] = {
[ts_aux_sym_3] = REDUCE(ts_sym_array, 4),
[ts_aux_sym_6] = REDUCE(ts_sym_array, 4),
},
[17] = {
[ts_aux_sym_object_repeat0] = SHIFT(47),
[ts_aux_sym_3] = SHIFT(35),
[ts_aux_sym_4] = REDUCE(ts_aux_sym_object_repeat0, 0),
},
[18] = {
[ts_aux_sym_2] = SHIFT(20),
},
[19] = {
[ts_aux_sym_3] = REDUCE(ts_sym_object, 2),
[ts_aux_sym_6] = REDUCE(ts_sym_object, 2),
},
[20] = {
[ts_sym_value] = SHIFT(21),
[ts_sym_object] = SHIFT(22),
[ts_sym_array] = SHIFT(22),
[ts_sym_string] = SHIFT(22),
[ts_sym_number] = SHIFT(22),
[ts_sym_null] = SHIFT(22),
[ts_sym_true] = SHIFT(22),
[ts_sym_false] = SHIFT(22),
[ts_aux_sym_1] = SHIFT(23),
[ts_aux_sym_5] = SHIFT(24),
},
[21] = {
[ts_aux_sym_object_repeat0] = SHIFT(45),
[ts_aux_sym_3] = SHIFT(35),
[ts_aux_sym_4] = REDUCE(ts_aux_sym_object_repeat0, 0),
},
[22] = {
[ts_aux_sym_3] = REDUCE(ts_sym_value, 1),
[ts_aux_sym_4] = REDUCE(ts_sym_value, 1),
},
[23] = {
[ts_builtin_sym_error] = SHIFT(29),
[ts_sym_string] = SHIFT(30),
[ts_aux_sym_4] = SHIFT(31),
},
[24] = {
[ts_sym_value] = SHIFT(25),
[ts_sym_object] = SHIFT(6),
[ts_sym_array] = SHIFT(6),
[ts_builtin_sym_error] = SHIFT(25),
[ts_sym_string] = SHIFT(6),
[ts_sym_number] = SHIFT(6),
[ts_sym_null] = SHIFT(6),
[ts_sym_true] = SHIFT(6),
[ts_sym_false] = SHIFT(6),
[ts_aux_sym_1] = SHIFT(7),
[ts_aux_sym_5] = SHIFT(8),
[ts_aux_sym_6] = SHIFT(26),
},
[25] = {
[ts_aux_sym_array_repeat0] = SHIFT(27),
[ts_aux_sym_3] = SHIFT(13),
[ts_aux_sym_6] = REDUCE(ts_aux_sym_array_repeat0, 0),
},
[26] = {
[ts_aux_sym_3] = REDUCE(ts_sym_array, 2),
[ts_aux_sym_4] = REDUCE(ts_sym_array, 2),
},
[48] = {
[27] = {
[ts_aux_sym_6] = SHIFT(28),
},
[28] = {
[ts_aux_sym_3] = REDUCE(ts_sym_array, 4),
[ts_aux_sym_4] = REDUCE(ts_sym_array, 4),
},
[29] = {
[ts_aux_sym_object_repeat0] = SHIFT(43),
[ts_aux_sym_3] = SHIFT(35),
[ts_aux_sym_4] = REDUCE(ts_aux_sym_object_repeat0, 0),
},
[30] = {
[ts_aux_sym_2] = SHIFT(32),
},
[31] = {
[ts_aux_sym_3] = REDUCE(ts_sym_object, 2),
[ts_aux_sym_4] = REDUCE(ts_sym_object, 2),
},
[49] = {
[ts_aux_sym_2] = SHIFT(50),
},
[50] = {
[ts_sym_value] = SHIFT(51),
[ts_sym_object] = SHIFT(14),
[ts_sym_array] = SHIFT(14),
[ts_sym_string] = SHIFT(14),
[ts_sym_number] = SHIFT(14),
[ts_sym_null] = SHIFT(14),
[ts_sym_true] = SHIFT(14),
[ts_sym_false] = SHIFT(14),
[ts_aux_sym_1] = SHIFT(15),
[32] = {
[ts_sym_value] = SHIFT(33),
[ts_sym_object] = SHIFT(22),
[ts_sym_array] = SHIFT(22),
[ts_sym_string] = SHIFT(22),
[ts_sym_number] = SHIFT(22),
[ts_sym_null] = SHIFT(22),
[ts_sym_true] = SHIFT(22),
[ts_sym_false] = SHIFT(22),
[ts_aux_sym_1] = SHIFT(23),
[ts_aux_sym_5] = SHIFT(24),
},
[33] = {
[ts_aux_sym_object_repeat0] = SHIFT(34),
[ts_aux_sym_3] = SHIFT(35),
[ts_aux_sym_4] = REDUCE(ts_aux_sym_object_repeat0, 0),
},
[34] = {
[ts_aux_sym_4] = SHIFT(42),
},
[35] = {
[ts_builtin_sym_error] = SHIFT(36),
[ts_sym_string] = SHIFT(37),
},
[36] = {
[ts_aux_sym_object_repeat0] = SHIFT(41),
[ts_aux_sym_3] = SHIFT(35),
[ts_aux_sym_4] = REDUCE(ts_aux_sym_object_repeat0, 0),
},
[37] = {
[ts_aux_sym_2] = SHIFT(38),
},
[38] = {
[ts_sym_value] = SHIFT(39),
[ts_sym_object] = SHIFT(22),
[ts_sym_array] = SHIFT(22),
[ts_sym_string] = SHIFT(22),
[ts_sym_number] = SHIFT(22),
[ts_sym_null] = SHIFT(22),
[ts_sym_true] = SHIFT(22),
[ts_sym_false] = SHIFT(22),
[ts_aux_sym_1] = SHIFT(23),
[ts_aux_sym_5] = SHIFT(24),
},
[39] = {
[ts_aux_sym_object_repeat0] = SHIFT(40),
[ts_aux_sym_3] = SHIFT(35),
[ts_aux_sym_4] = REDUCE(ts_aux_sym_object_repeat0, 0),
},
[40] = {
[ts_aux_sym_4] = REDUCE(ts_aux_sym_object_repeat0, 5),
},
[41] = {
[ts_aux_sym_4] = REDUCE(ts_aux_sym_object_repeat0, 3),
},
[42] = {
[ts_aux_sym_3] = REDUCE(ts_sym_object, 6),
[ts_aux_sym_4] = REDUCE(ts_sym_object, 6),
},
[43] = {
[ts_aux_sym_4] = SHIFT(44),
},
[44] = {
[ts_aux_sym_3] = REDUCE(ts_sym_object, 4),
[ts_aux_sym_4] = REDUCE(ts_sym_object, 4),
},
[45] = {
[ts_aux_sym_4] = SHIFT(46),
},
[46] = {
[ts_aux_sym_3] = REDUCE(ts_sym_object, 6),
[ts_aux_sym_6] = REDUCE(ts_sym_object, 6),
},
[47] = {
[ts_aux_sym_4] = SHIFT(48),
},
[48] = {
[ts_aux_sym_3] = REDUCE(ts_sym_object, 4),
[ts_aux_sym_6] = REDUCE(ts_sym_object, 4),
},
[49] = {
[ts_aux_sym_6] = SHIFT(50),
},
[50] = {
[ts_builtin_sym_end] = REDUCE(ts_sym_array, 4),
},
[51] = {
[ts_aux_sym_object_repeat0] = SHIFT(52),
[ts_aux_sym_3] = SHIFT(7),
[ts_aux_sym_object_repeat0] = SHIFT(58),
[ts_aux_sym_3] = SHIFT(35),
[ts_aux_sym_4] = REDUCE(ts_aux_sym_object_repeat0, 0),
},
[52] = {
[ts_aux_sym_4] = SHIFT(53),
[ts_aux_sym_2] = SHIFT(54),
},
[53] = {
[ts_builtin_sym_end] = REDUCE(ts_sym_object, 6),
},
[54] = {
[ts_builtin_sym_end] = REDUCE(ts_sym_object, 2),
},
[54] = {
[ts_sym_value] = SHIFT(55),
[ts_sym_object] = SHIFT(22),
[ts_sym_array] = SHIFT(22),
[ts_sym_string] = SHIFT(22),
[ts_sym_number] = SHIFT(22),
[ts_sym_null] = SHIFT(22),
[ts_sym_true] = SHIFT(22),
[ts_sym_false] = SHIFT(22),
[ts_aux_sym_1] = SHIFT(23),
[ts_aux_sym_5] = SHIFT(24),
},
[55] = {
[ts_sym_value] = SHIFT(56),
[ts_sym_object] = SHIFT(31),
[ts_sym_array] = SHIFT(31),
[ts_builtin_sym_error] = SHIFT(56),
[ts_sym_string] = SHIFT(31),
[ts_sym_number] = SHIFT(31),
[ts_sym_null] = SHIFT(31),
[ts_sym_true] = SHIFT(31),
[ts_sym_false] = SHIFT(31),
[ts_aux_sym_1] = SHIFT(32),
[ts_aux_sym_5] = SHIFT(42),
[ts_aux_sym_6] = SHIFT(59),
[ts_aux_sym_object_repeat0] = SHIFT(56),
[ts_aux_sym_3] = SHIFT(35),
[ts_aux_sym_4] = REDUCE(ts_aux_sym_object_repeat0, 0),
},
[56] = {
[ts_aux_sym_array_repeat0] = SHIFT(57),
[ts_aux_sym_3] = SHIFT(28),
[ts_aux_sym_6] = REDUCE(ts_aux_sym_array_repeat0, 0),
[ts_aux_sym_4] = SHIFT(57),
},
[57] = {
[ts_aux_sym_6] = SHIFT(58),
[ts_builtin_sym_end] = REDUCE(ts_sym_object, 6),
},
[58] = {
[ts_builtin_sym_end] = REDUCE(ts_sym_array, 4),
[ts_aux_sym_4] = SHIFT(59),
},
[59] = {
[ts_builtin_sym_end] = REDUCE(ts_sym_array, 2),
[ts_builtin_sym_end] = REDUCE(ts_sym_object, 4),
},
};

View file

@ -28,6 +28,7 @@ namespace tree_sitter {
const SyntaxGrammar grammar;
ParseConflictManager conflict_manager;
unordered_map<const ParseItemSet, ParseStateId> parse_state_ids;
vector<pair<ParseItemSet, ParseStateId>> item_sets_to_process;
ParseTable parse_table;
ParseStateId add_parse_state(const ParseItemSet &item_set) {
@ -35,9 +36,7 @@ namespace tree_sitter {
if (pair == parse_state_ids.end()) {
ParseStateId state_id = parse_table.add_state();
parse_state_ids[item_set] = state_id;
add_reduce_actions(item_set, state_id);
add_shift_actions(item_set, state_id);
add_ubiquitous_token_actions(state_id);
item_sets_to_process.push_back({ item_set, state_id });
return state_id;
} else {
return pair->second;
@ -74,15 +73,22 @@ namespace tree_sitter {
}
}
void add_ubiquitous_token_actions(ParseStateId state_id) {
void add_shift_extra_actions(ParseStateId state_id) {
const map<Symbol, ParseAction> &actions = parse_table.states[state_id].actions;
for (const Symbol &ubiquitous_symbol : grammar.ubiquitous_tokens) {
const auto &pair_for_symbol = actions.find(ubiquitous_symbol);
if (pair_for_symbol == actions.end()) {
parse_table.add_action(state_id, ubiquitous_symbol, ParseAction::ShiftExtra());
}
}
}
void add_reduce_extra_actions(ParseStateId state_id) {
const map<Symbol, ParseAction> &actions = parse_table.states[state_id].actions;
for (const Symbol &ubiquitous_symbol : grammar.ubiquitous_tokens) {
const auto &pair_for_symbol = actions.find(ubiquitous_symbol);
if (pair_for_symbol == actions.end()) {
parse_table.add_action(state_id, ubiquitous_symbol, ParseAction::ShiftExtra());
} else if (pair_for_symbol->second.type == ParseActionTypeShift) {
if (pair_for_symbol != actions.end() && pair_for_symbol->second.type == ParseActionTypeShift) {
size_t shift_state_id = pair_for_symbol->second.state_index;
for (const auto &pair : actions) {
const Symbol &lookahead_sym = pair.first;
@ -120,6 +126,21 @@ namespace tree_sitter {
pair<ParseTable, vector<Conflict>> build() {
ParseItem start_item(rules::START(), make_shared<Symbol>(0), 0);
add_parse_state(item_set_closure(start_item, { rules::END_OF_INPUT() }, grammar));
while (!item_sets_to_process.empty()) {
auto pair = item_sets_to_process.back();
ParseItemSet &item_set = pair.first;
ParseStateId &state_id = pair.second;
item_sets_to_process.pop_back();
add_reduce_actions(item_set, state_id);
add_shift_actions(item_set, state_id);
add_shift_extra_actions(state_id);
}
for (ParseStateId state_id = 0; state_id < parse_table.states.size(); state_id++)
add_reduce_extra_actions(state_id);
return { parse_table, conflict_manager.conflicts() };
}
};