Identify fragile reductions at compile time
This commit is contained in:
parent
a92067702d
commit
2d436cf141
13 changed files with 4843 additions and 4790 deletions
|
|
@ -45,6 +45,7 @@ typedef enum {
|
|||
TSParseActionTypeShiftExtra,
|
||||
TSParseActionTypeReduce,
|
||||
TSParseActionTypeReduceExtra,
|
||||
TSParseActionTypeReduceFragile,
|
||||
TSParseActionTypeAccept,
|
||||
} TSParseActionType;
|
||||
|
||||
|
|
@ -116,6 +117,12 @@ struct TSLanguage {
|
|||
.data = { .symbol = symbol_val, .child_count = child_count_val } \
|
||||
}
|
||||
|
||||
#define REDUCE_FRAGILE(symbol_val, child_count_val) \
|
||||
{ \
|
||||
.type = TSParseActionTypeReduceFragile, \
|
||||
.data = { .symbol = symbol_val, .child_count = child_count_val } \
|
||||
}
|
||||
|
||||
#define ACCEPT_INPUT() \
|
||||
{ .type = TSParseActionTypeAccept }
|
||||
|
||||
|
|
|
|||
|
|
@ -87,7 +87,7 @@ describe("action_takes_precedence", []() {
|
|||
describe("shift/reduce conflicts", [&]() {
|
||||
describe("when the shift has higher precedence", [&]() {
|
||||
ParseAction shift = ParseAction::Shift(2, { 3 });
|
||||
ParseAction reduce = ParseAction::Reduce(sym2, 1, 1);
|
||||
ParseAction reduce = ParseAction::Reduce(sym2, 1, 1, 0);
|
||||
|
||||
it("is not a conflict", [&]() {
|
||||
result = action_takes_precedence(shift, reduce, sym1);
|
||||
|
|
@ -108,7 +108,7 @@ describe("action_takes_precedence", []() {
|
|||
|
||||
describe("when the reduce has higher precedence", [&]() {
|
||||
ParseAction shift = ParseAction::Shift(2, { 1 });
|
||||
ParseAction reduce = ParseAction::Reduce(sym2, 1, 3);
|
||||
ParseAction reduce = ParseAction::Reduce(sym2, 1, 3, 0);
|
||||
|
||||
it("is not a conflict", [&]() {
|
||||
result = action_takes_precedence(shift, reduce, sym1);
|
||||
|
|
@ -129,7 +129,7 @@ describe("action_takes_precedence", []() {
|
|||
|
||||
describe("when the precedences are equal", [&]() {
|
||||
ParseAction shift = ParseAction::Shift(2, { 0 });
|
||||
ParseAction reduce = ParseAction::Reduce(sym2, 1, 0);
|
||||
ParseAction reduce = ParseAction::Reduce(sym2, 1, 0, 0);
|
||||
|
||||
it("is a conflict", [&]() {
|
||||
result = action_takes_precedence(reduce, shift, sym1);
|
||||
|
|
@ -150,7 +150,7 @@ describe("action_takes_precedence", []() {
|
|||
|
||||
describe("when the shift has conflicting precedences compared to the reduce", [&]() {
|
||||
ParseAction shift = ParseAction::Shift(2, { 0, 1, 3 });
|
||||
ParseAction reduce = ParseAction::Reduce(sym2, 1, 2);
|
||||
ParseAction reduce = ParseAction::Reduce(sym2, 1, 2, 0);
|
||||
|
||||
it("is a conflict", [&]() {
|
||||
result = action_takes_precedence(reduce, shift, sym1);
|
||||
|
|
@ -172,8 +172,8 @@ describe("action_takes_precedence", []() {
|
|||
|
||||
describe("reduce/reduce conflicts", [&]() {
|
||||
describe("when one action has higher precedence", [&]() {
|
||||
ParseAction left = ParseAction::Reduce(sym2, 1, 0);
|
||||
ParseAction right = ParseAction::Reduce(sym2, 1, 3);
|
||||
ParseAction left = ParseAction::Reduce(sym2, 1, 0, 0);
|
||||
ParseAction right = ParseAction::Reduce(sym2, 1, 3, 0);
|
||||
|
||||
it("favors that action", [&]() {
|
||||
result = action_takes_precedence(left, right, sym1);
|
||||
|
|
@ -193,8 +193,8 @@ describe("action_takes_precedence", []() {
|
|||
});
|
||||
|
||||
describe("when the actions have the same precedence", [&]() {
|
||||
ParseAction left = ParseAction::Reduce(sym1, 1, 0);
|
||||
ParseAction right = ParseAction::Reduce(sym2, 1, 0);
|
||||
ParseAction left = ParseAction::Reduce(sym1, 1, 0, 0);
|
||||
ParseAction right = ParseAction::Reduce(sym2, 1, 0, 0);
|
||||
|
||||
it("favors the symbol listed earlier in the grammar", [&]() {
|
||||
result = action_takes_precedence(left, right, sym1);
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ describe("build_conflict", []() {
|
|||
it("uses the given item-set to determine which symbols are involved in the shift", [&]() {
|
||||
conflict = build_conflict(
|
||||
ParseAction::Shift(2, set<int>()),
|
||||
ParseAction::Reduce(Symbol(2), 1, 0), // reduced_rule
|
||||
ParseAction::Reduce(Symbol(2), 1, 0, 0), // reduced_rule
|
||||
ParseItemSet({
|
||||
{
|
||||
ParseItem(Symbol(0), blank(), { Symbol(101) }), // in_progress_rule1
|
||||
|
|
@ -54,7 +54,7 @@ describe("build_conflict", []() {
|
|||
|
||||
it("always puts shift actions before reduce actions", [&]() {
|
||||
conflict = build_conflict(
|
||||
ParseAction::Reduce(Symbol(2), 1, 0), // reduced_rule
|
||||
ParseAction::Reduce(Symbol(2), 1, 0, 0), // reduced_rule
|
||||
ParseAction::Shift(2, set<int>()),
|
||||
ParseItemSet({
|
||||
{
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@ describe("build_parse_table", []() {
|
|||
auto result = build_parse_table(parse_grammar, lex_grammar);
|
||||
|
||||
AssertThat(result.first.states[2].actions, Equals(map<Symbol, ParseAction>({
|
||||
{ END_OF_INPUT(), ParseAction::Reduce(Symbol(0), 1, 0) },
|
||||
{ END_OF_INPUT(), ParseAction::Reduce(Symbol(0), 1, 0, 0) },
|
||||
|
||||
// for the ubiquitous_token 'token2'
|
||||
{ Symbol(2, SymbolOptionToken), ParseAction::ShiftExtra() },
|
||||
|
|
|
|||
52
spec/fixtures/parsers/arithmetic.c
vendored
52
spec/fixtures/parsers/arithmetic.c
vendored
|
|
@ -448,30 +448,30 @@ static const TSParseAction ts_parse_actions[STATE_COUNT][SYMBOL_COUNT] = {
|
|||
},
|
||||
[16] = {
|
||||
[sym_comment] = SHIFT_EXTRA(),
|
||||
[aux_sym_STR_PLUS] = REDUCE(sym_exponent, 3),
|
||||
[aux_sym_STR_DASH] = REDUCE(sym_exponent, 3),
|
||||
[aux_sym_STR_STAR] = REDUCE(sym_exponent, 3),
|
||||
[aux_sym_STR_SLASH] = REDUCE(sym_exponent, 3),
|
||||
[aux_sym_STR_PLUS] = REDUCE_FRAGILE(sym_exponent, 3),
|
||||
[aux_sym_STR_DASH] = REDUCE_FRAGILE(sym_exponent, 3),
|
||||
[aux_sym_STR_STAR] = REDUCE_FRAGILE(sym_exponent, 3),
|
||||
[aux_sym_STR_SLASH] = REDUCE_FRAGILE(sym_exponent, 3),
|
||||
[aux_sym_STR_CARET] = SHIFT(15),
|
||||
[aux_sym_STR_RPAREN] = REDUCE(sym_exponent, 3),
|
||||
[aux_sym_STR_RPAREN] = REDUCE_FRAGILE(sym_exponent, 3),
|
||||
},
|
||||
[17] = {
|
||||
[sym_comment] = SHIFT_EXTRA(),
|
||||
[aux_sym_STR_PLUS] = REDUCE(sym_quotient, 3),
|
||||
[aux_sym_STR_DASH] = REDUCE(sym_quotient, 3),
|
||||
[aux_sym_STR_PLUS] = REDUCE_FRAGILE(sym_quotient, 3),
|
||||
[aux_sym_STR_DASH] = REDUCE_FRAGILE(sym_quotient, 3),
|
||||
[aux_sym_STR_STAR] = SHIFT(13),
|
||||
[aux_sym_STR_SLASH] = SHIFT(14),
|
||||
[aux_sym_STR_CARET] = SHIFT(15),
|
||||
[aux_sym_STR_RPAREN] = REDUCE(sym_quotient, 3),
|
||||
[aux_sym_STR_RPAREN] = REDUCE_FRAGILE(sym_quotient, 3),
|
||||
},
|
||||
[18] = {
|
||||
[sym_comment] = SHIFT_EXTRA(),
|
||||
[aux_sym_STR_PLUS] = REDUCE(sym_product, 3),
|
||||
[aux_sym_STR_DASH] = REDUCE(sym_product, 3),
|
||||
[aux_sym_STR_PLUS] = REDUCE_FRAGILE(sym_product, 3),
|
||||
[aux_sym_STR_DASH] = REDUCE_FRAGILE(sym_product, 3),
|
||||
[aux_sym_STR_STAR] = SHIFT(13),
|
||||
[aux_sym_STR_SLASH] = SHIFT(14),
|
||||
[aux_sym_STR_CARET] = SHIFT(15),
|
||||
[aux_sym_STR_RPAREN] = REDUCE(sym_product, 3),
|
||||
[aux_sym_STR_RPAREN] = REDUCE_FRAGILE(sym_product, 3),
|
||||
},
|
||||
[19] = {
|
||||
[sym_comment] = SHIFT_EXTRA(),
|
||||
|
|
@ -480,7 +480,7 @@ static const TSParseAction ts_parse_actions[STATE_COUNT][SYMBOL_COUNT] = {
|
|||
[aux_sym_STR_STAR] = SHIFT(13),
|
||||
[aux_sym_STR_SLASH] = SHIFT(14),
|
||||
[aux_sym_STR_CARET] = SHIFT(15),
|
||||
[aux_sym_STR_RPAREN] = REDUCE(sym_difference, 3),
|
||||
[aux_sym_STR_RPAREN] = REDUCE_FRAGILE(sym_difference, 3),
|
||||
},
|
||||
[20] = {
|
||||
[sym_comment] = SHIFT_EXTRA(),
|
||||
|
|
@ -489,7 +489,7 @@ static const TSParseAction ts_parse_actions[STATE_COUNT][SYMBOL_COUNT] = {
|
|||
[aux_sym_STR_STAR] = SHIFT(13),
|
||||
[aux_sym_STR_SLASH] = SHIFT(14),
|
||||
[aux_sym_STR_CARET] = SHIFT(15),
|
||||
[aux_sym_STR_RPAREN] = REDUCE(sym_sum, 3),
|
||||
[aux_sym_STR_RPAREN] = REDUCE_FRAGILE(sym_sum, 3),
|
||||
},
|
||||
[21] = {
|
||||
[ts_builtin_sym_end] = REDUCE(sym_group, 3),
|
||||
|
|
@ -566,34 +566,34 @@ static const TSParseAction ts_parse_actions[STATE_COUNT][SYMBOL_COUNT] = {
|
|||
[aux_sym_STR_LPAREN] = SHIFT(3),
|
||||
},
|
||||
[27] = {
|
||||
[ts_builtin_sym_end] = REDUCE(sym_exponent, 3),
|
||||
[ts_builtin_sym_end] = REDUCE_FRAGILE(sym_exponent, 3),
|
||||
[sym_comment] = SHIFT_EXTRA(),
|
||||
[aux_sym_STR_PLUS] = REDUCE(sym_exponent, 3),
|
||||
[aux_sym_STR_DASH] = REDUCE(sym_exponent, 3),
|
||||
[aux_sym_STR_STAR] = REDUCE(sym_exponent, 3),
|
||||
[aux_sym_STR_SLASH] = REDUCE(sym_exponent, 3),
|
||||
[aux_sym_STR_PLUS] = REDUCE_FRAGILE(sym_exponent, 3),
|
||||
[aux_sym_STR_DASH] = REDUCE_FRAGILE(sym_exponent, 3),
|
||||
[aux_sym_STR_STAR] = REDUCE_FRAGILE(sym_exponent, 3),
|
||||
[aux_sym_STR_SLASH] = REDUCE_FRAGILE(sym_exponent, 3),
|
||||
[aux_sym_STR_CARET] = SHIFT(26),
|
||||
},
|
||||
[28] = {
|
||||
[ts_builtin_sym_end] = REDUCE(sym_quotient, 3),
|
||||
[ts_builtin_sym_end] = REDUCE_FRAGILE(sym_quotient, 3),
|
||||
[sym_comment] = SHIFT_EXTRA(),
|
||||
[aux_sym_STR_PLUS] = REDUCE(sym_quotient, 3),
|
||||
[aux_sym_STR_DASH] = REDUCE(sym_quotient, 3),
|
||||
[aux_sym_STR_PLUS] = REDUCE_FRAGILE(sym_quotient, 3),
|
||||
[aux_sym_STR_DASH] = REDUCE_FRAGILE(sym_quotient, 3),
|
||||
[aux_sym_STR_STAR] = SHIFT(24),
|
||||
[aux_sym_STR_SLASH] = SHIFT(25),
|
||||
[aux_sym_STR_CARET] = SHIFT(26),
|
||||
},
|
||||
[29] = {
|
||||
[ts_builtin_sym_end] = REDUCE(sym_product, 3),
|
||||
[ts_builtin_sym_end] = REDUCE_FRAGILE(sym_product, 3),
|
||||
[sym_comment] = SHIFT_EXTRA(),
|
||||
[aux_sym_STR_PLUS] = REDUCE(sym_product, 3),
|
||||
[aux_sym_STR_DASH] = REDUCE(sym_product, 3),
|
||||
[aux_sym_STR_PLUS] = REDUCE_FRAGILE(sym_product, 3),
|
||||
[aux_sym_STR_DASH] = REDUCE_FRAGILE(sym_product, 3),
|
||||
[aux_sym_STR_STAR] = SHIFT(24),
|
||||
[aux_sym_STR_SLASH] = SHIFT(25),
|
||||
[aux_sym_STR_CARET] = SHIFT(26),
|
||||
},
|
||||
[30] = {
|
||||
[ts_builtin_sym_end] = REDUCE(sym_difference, 3),
|
||||
[ts_builtin_sym_end] = REDUCE_FRAGILE(sym_difference, 3),
|
||||
[sym_comment] = SHIFT_EXTRA(),
|
||||
[aux_sym_STR_PLUS] = SHIFT(22),
|
||||
[aux_sym_STR_DASH] = SHIFT(23),
|
||||
|
|
@ -602,7 +602,7 @@ static const TSParseAction ts_parse_actions[STATE_COUNT][SYMBOL_COUNT] = {
|
|||
[aux_sym_STR_CARET] = SHIFT(26),
|
||||
},
|
||||
[31] = {
|
||||
[ts_builtin_sym_end] = REDUCE(sym_sum, 3),
|
||||
[ts_builtin_sym_end] = REDUCE_FRAGILE(sym_sum, 3),
|
||||
[sym_comment] = SHIFT_EXTRA(),
|
||||
[aux_sym_STR_PLUS] = SHIFT(22),
|
||||
[aux_sym_STR_DASH] = SHIFT(23),
|
||||
|
|
|
|||
326
spec/fixtures/parsers/golang.c
vendored
326
spec/fixtures/parsers/golang.c
vendored
|
|
@ -2966,13 +2966,13 @@ static const TSParseAction ts_parse_actions[STATE_COUNT][SYMBOL_COUNT] = {
|
|||
[aux_sym_STR_COMMA] = REDUCE(sym_var_name, 1),
|
||||
},
|
||||
[21] = {
|
||||
[sym_block_statement] = REDUCE(sym__func_signature, 2),
|
||||
[sym_block_statement] = REDUCE_FRAGILE(sym__func_signature, 2),
|
||||
[sym_type_name] = SHIFT(22),
|
||||
[sym__line_break] = SHIFT_EXTRA(),
|
||||
[sym__identifier] = SHIFT(23),
|
||||
[sym_comment] = SHIFT_EXTRA(),
|
||||
[aux_sym_STR_LPAREN] = SHIFT(24),
|
||||
[aux_sym_STR_LBRACE] = REDUCE(sym__func_signature, 2),
|
||||
[aux_sym_STR_LBRACE] = REDUCE_FRAGILE(sym__func_signature, 2),
|
||||
},
|
||||
[22] = {
|
||||
[sym_block_statement] = REDUCE(sym__func_signature, 3),
|
||||
|
|
@ -3297,14 +3297,14 @@ static const TSParseAction ts_parse_actions[STATE_COUNT][SYMBOL_COUNT] = {
|
|||
[aux_sym_STR_COMMA] = SHIFT(53),
|
||||
},
|
||||
[64] = {
|
||||
[sym_var_name] = REDUCE(sym__func_signature, 2),
|
||||
[sym_var_name] = REDUCE_FRAGILE(sym__func_signature, 2),
|
||||
[sym_type_name] = SHIFT(65),
|
||||
[sym__line_break] = SHIFT_EXTRA(),
|
||||
[sym__identifier] = SHIFT(66),
|
||||
[sym_comment] = SHIFT_EXTRA(),
|
||||
[aux_sym_interface_type_repeat0] = REDUCE(sym__func_signature, 2),
|
||||
[aux_sym_interface_type_repeat0] = REDUCE_FRAGILE(sym__func_signature, 2),
|
||||
[aux_sym_STR_LPAREN] = SHIFT(67),
|
||||
[aux_sym_STR_RBRACE] = REDUCE(sym__func_signature, 2),
|
||||
[aux_sym_STR_RBRACE] = REDUCE_FRAGILE(sym__func_signature, 2),
|
||||
},
|
||||
[65] = {
|
||||
[sym_var_name] = REDUCE(sym__func_signature, 3),
|
||||
|
|
@ -3420,14 +3420,14 @@ static const TSParseAction ts_parse_actions[STATE_COUNT][SYMBOL_COUNT] = {
|
|||
[aux_sym_STR_RPAREN] = SHIFT(101),
|
||||
},
|
||||
[80] = {
|
||||
[sym_var_name] = REDUCE(sym__func_signature, 5),
|
||||
[sym_var_name] = REDUCE_FRAGILE(sym__func_signature, 5),
|
||||
[sym_type_name] = SHIFT(72),
|
||||
[sym__line_break] = SHIFT_EXTRA(),
|
||||
[sym__identifier] = SHIFT(66),
|
||||
[sym_comment] = SHIFT_EXTRA(),
|
||||
[aux_sym_interface_type_repeat0] = REDUCE(sym__func_signature, 5),
|
||||
[aux_sym_interface_type_repeat0] = REDUCE_FRAGILE(sym__func_signature, 5),
|
||||
[aux_sym_STR_LPAREN] = SHIFT(92),
|
||||
[aux_sym_STR_RBRACE] = REDUCE(sym__func_signature, 5),
|
||||
[aux_sym_STR_RBRACE] = REDUCE_FRAGILE(sym__func_signature, 5),
|
||||
},
|
||||
[81] = {
|
||||
[sym_var_name] = SHIFT(82),
|
||||
|
|
@ -3618,14 +3618,14 @@ static const TSParseAction ts_parse_actions[STATE_COUNT][SYMBOL_COUNT] = {
|
|||
[aux_sym_STR_RBRACE] = REDUCE(sym__func_signature, 10),
|
||||
},
|
||||
[101] = {
|
||||
[sym_var_name] = REDUCE(sym__func_signature, 6),
|
||||
[sym_var_name] = REDUCE_FRAGILE(sym__func_signature, 6),
|
||||
[sym_type_name] = SHIFT(75),
|
||||
[sym__line_break] = SHIFT_EXTRA(),
|
||||
[sym__identifier] = SHIFT(66),
|
||||
[sym_comment] = SHIFT_EXTRA(),
|
||||
[aux_sym_interface_type_repeat0] = REDUCE(sym__func_signature, 6),
|
||||
[aux_sym_interface_type_repeat0] = REDUCE_FRAGILE(sym__func_signature, 6),
|
||||
[aux_sym_STR_LPAREN] = SHIFT(102),
|
||||
[aux_sym_STR_RBRACE] = REDUCE(sym__func_signature, 6),
|
||||
[aux_sym_STR_RBRACE] = REDUCE_FRAGILE(sym__func_signature, 6),
|
||||
},
|
||||
[102] = {
|
||||
[sym_var_name] = SHIFT(103),
|
||||
|
|
@ -3673,14 +3673,14 @@ static const TSParseAction ts_parse_actions[STATE_COUNT][SYMBOL_COUNT] = {
|
|||
[aux_sym_STR_RPAREN] = SHIFT(80),
|
||||
},
|
||||
[109] = {
|
||||
[sym_var_name] = REDUCE(sym__func_signature, 4),
|
||||
[sym_var_name] = REDUCE_FRAGILE(sym__func_signature, 4),
|
||||
[sym_type_name] = SHIFT(71),
|
||||
[sym__line_break] = SHIFT_EXTRA(),
|
||||
[sym__identifier] = SHIFT(66),
|
||||
[sym_comment] = SHIFT_EXTRA(),
|
||||
[aux_sym_interface_type_repeat0] = REDUCE(sym__func_signature, 4),
|
||||
[aux_sym_interface_type_repeat0] = REDUCE_FRAGILE(sym__func_signature, 4),
|
||||
[aux_sym_STR_LPAREN] = SHIFT(110),
|
||||
[aux_sym_STR_RBRACE] = REDUCE(sym__func_signature, 4),
|
||||
[aux_sym_STR_RBRACE] = REDUCE_FRAGILE(sym__func_signature, 4),
|
||||
},
|
||||
[110] = {
|
||||
[sym_var_name] = SHIFT(111),
|
||||
|
|
@ -4238,13 +4238,13 @@ static const TSParseAction ts_parse_actions[STATE_COUNT][SYMBOL_COUNT] = {
|
|||
[aux_sym_STR_RPAREN] = SHIFT(187),
|
||||
},
|
||||
[177] = {
|
||||
[sym_block_statement] = REDUCE(sym__func_signature, 5),
|
||||
[sym_block_statement] = REDUCE_FRAGILE(sym__func_signature, 5),
|
||||
[sym_type_name] = SHIFT(34),
|
||||
[sym__line_break] = SHIFT_EXTRA(),
|
||||
[sym__identifier] = SHIFT(23),
|
||||
[sym_comment] = SHIFT_EXTRA(),
|
||||
[aux_sym_STR_LPAREN] = SHIFT(178),
|
||||
[aux_sym_STR_LBRACE] = REDUCE(sym__func_signature, 5),
|
||||
[aux_sym_STR_LBRACE] = REDUCE_FRAGILE(sym__func_signature, 5),
|
||||
},
|
||||
[178] = {
|
||||
[sym_var_name] = SHIFT(179),
|
||||
|
|
@ -4302,13 +4302,13 @@ static const TSParseAction ts_parse_actions[STATE_COUNT][SYMBOL_COUNT] = {
|
|||
[aux_sym_STR_LBRACE] = REDUCE(sym__func_signature, 10),
|
||||
},
|
||||
[187] = {
|
||||
[sym_block_statement] = REDUCE(sym__func_signature, 6),
|
||||
[sym_block_statement] = REDUCE_FRAGILE(sym__func_signature, 6),
|
||||
[sym_type_name] = SHIFT(43),
|
||||
[sym__line_break] = SHIFT_EXTRA(),
|
||||
[sym__identifier] = SHIFT(23),
|
||||
[sym_comment] = SHIFT_EXTRA(),
|
||||
[aux_sym_STR_LPAREN] = SHIFT(188),
|
||||
[aux_sym_STR_LBRACE] = REDUCE(sym__func_signature, 6),
|
||||
[aux_sym_STR_LBRACE] = REDUCE_FRAGILE(sym__func_signature, 6),
|
||||
},
|
||||
[188] = {
|
||||
[sym_var_name] = SHIFT(189),
|
||||
|
|
@ -4354,13 +4354,13 @@ static const TSParseAction ts_parse_actions[STATE_COUNT][SYMBOL_COUNT] = {
|
|||
[aux_sym_STR_RPAREN] = SHIFT(177),
|
||||
},
|
||||
[195] = {
|
||||
[sym_block_statement] = REDUCE(sym__func_signature, 4),
|
||||
[sym_block_statement] = REDUCE_FRAGILE(sym__func_signature, 4),
|
||||
[sym_type_name] = SHIFT(29),
|
||||
[sym__line_break] = SHIFT_EXTRA(),
|
||||
[sym__identifier] = SHIFT(23),
|
||||
[sym_comment] = SHIFT_EXTRA(),
|
||||
[aux_sym_STR_LPAREN] = SHIFT(196),
|
||||
[aux_sym_STR_LBRACE] = REDUCE(sym__func_signature, 4),
|
||||
[aux_sym_STR_LBRACE] = REDUCE_FRAGILE(sym__func_signature, 4),
|
||||
},
|
||||
[196] = {
|
||||
[sym_var_name] = SHIFT(197),
|
||||
|
|
@ -4945,18 +4945,18 @@ static const TSParseAction ts_parse_actions[STATE_COUNT][SYMBOL_COUNT] = {
|
|||
[aux_sym_STR_BANG] = SHIFT(223),
|
||||
},
|
||||
[234] = {
|
||||
[sym_block_statement] = REDUCE(sym_bool_op, 3),
|
||||
[sym_block_statement] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[sym__line_break] = SHIFT_EXTRA(),
|
||||
[sym_comment] = SHIFT_EXTRA(),
|
||||
[aux_sym_STR_LPAREN] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_LBRACE] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_STAR] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_DOT] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_SLASH] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_PLUS] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_DASH] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_PIPE_PIPE] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_AMP_AMP] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_LPAREN] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_LBRACE] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_STAR] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_DOT] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_SLASH] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_PLUS] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_DASH] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_PIPE_PIPE] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_AMP_AMP] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_EQ_EQ] = SHIFT(233),
|
||||
[aux_sym_STR_LT_EQ] = SHIFT(233),
|
||||
[aux_sym_STR_LT] = SHIFT(233),
|
||||
|
|
@ -4964,17 +4964,17 @@ static const TSParseAction ts_parse_actions[STATE_COUNT][SYMBOL_COUNT] = {
|
|||
[aux_sym_STR_GT] = SHIFT(233),
|
||||
},
|
||||
[235] = {
|
||||
[sym_block_statement] = REDUCE(sym_bool_op, 3),
|
||||
[sym_block_statement] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[sym__line_break] = SHIFT_EXTRA(),
|
||||
[sym_comment] = SHIFT_EXTRA(),
|
||||
[aux_sym_STR_LPAREN] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_LBRACE] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_LPAREN] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_LBRACE] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_STAR] = SHIFT(228),
|
||||
[aux_sym_STR_DOT] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_DOT] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_SLASH] = SHIFT(228),
|
||||
[aux_sym_STR_PLUS] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_DASH] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_PIPE_PIPE] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_PLUS] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_DASH] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_PIPE_PIPE] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_AMP_AMP] = SHIFT(232),
|
||||
[aux_sym_STR_EQ_EQ] = SHIFT(233),
|
||||
[aux_sym_STR_LT_EQ] = SHIFT(233),
|
||||
|
|
@ -4983,13 +4983,13 @@ static const TSParseAction ts_parse_actions[STATE_COUNT][SYMBOL_COUNT] = {
|
|||
[aux_sym_STR_GT] = SHIFT(233),
|
||||
},
|
||||
[236] = {
|
||||
[sym_block_statement] = REDUCE(sym_bool_op, 3),
|
||||
[sym_block_statement] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[sym__line_break] = SHIFT_EXTRA(),
|
||||
[sym_comment] = SHIFT_EXTRA(),
|
||||
[aux_sym_STR_LPAREN] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_LBRACE] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_LPAREN] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_LBRACE] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_STAR] = SHIFT(228),
|
||||
[aux_sym_STR_DOT] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_DOT] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_SLASH] = SHIFT(228),
|
||||
[aux_sym_STR_PLUS] = SHIFT(230),
|
||||
[aux_sym_STR_DASH] = SHIFT(230),
|
||||
|
|
@ -5002,13 +5002,13 @@ static const TSParseAction ts_parse_actions[STATE_COUNT][SYMBOL_COUNT] = {
|
|||
[aux_sym_STR_GT] = SHIFT(233),
|
||||
},
|
||||
[237] = {
|
||||
[sym_block_statement] = REDUCE(sym_math_op, 3),
|
||||
[sym_block_statement] = REDUCE_FRAGILE(sym_math_op, 3),
|
||||
[sym__line_break] = SHIFT_EXTRA(),
|
||||
[sym_comment] = SHIFT_EXTRA(),
|
||||
[aux_sym_STR_LPAREN] = REDUCE(sym_math_op, 3),
|
||||
[aux_sym_STR_LBRACE] = REDUCE(sym_math_op, 3),
|
||||
[aux_sym_STR_LPAREN] = REDUCE_FRAGILE(sym_math_op, 3),
|
||||
[aux_sym_STR_LBRACE] = REDUCE_FRAGILE(sym_math_op, 3),
|
||||
[aux_sym_STR_STAR] = SHIFT(228),
|
||||
[aux_sym_STR_DOT] = REDUCE(sym_math_op, 3),
|
||||
[aux_sym_STR_DOT] = REDUCE_FRAGILE(sym_math_op, 3),
|
||||
[aux_sym_STR_SLASH] = SHIFT(228),
|
||||
[aux_sym_STR_PLUS] = SHIFT(230),
|
||||
[aux_sym_STR_DASH] = SHIFT(230),
|
||||
|
|
@ -5040,17 +5040,17 @@ static const TSParseAction ts_parse_actions[STATE_COUNT][SYMBOL_COUNT] = {
|
|||
[aux_sym_STR_GT] = REDUCE(sym_selector_expression, 3),
|
||||
},
|
||||
[239] = {
|
||||
[sym_block_statement] = REDUCE(sym_math_op, 3),
|
||||
[sym_block_statement] = REDUCE_FRAGILE(sym_math_op, 3),
|
||||
[sym__line_break] = SHIFT_EXTRA(),
|
||||
[sym_comment] = SHIFT_EXTRA(),
|
||||
[aux_sym_STR_LPAREN] = REDUCE(sym_math_op, 3),
|
||||
[aux_sym_STR_LBRACE] = REDUCE(sym_math_op, 3),
|
||||
[aux_sym_STR_LPAREN] = REDUCE_FRAGILE(sym_math_op, 3),
|
||||
[aux_sym_STR_LBRACE] = REDUCE_FRAGILE(sym_math_op, 3),
|
||||
[aux_sym_STR_STAR] = SHIFT(228),
|
||||
[aux_sym_STR_DOT] = REDUCE(sym_math_op, 3),
|
||||
[aux_sym_STR_DOT] = REDUCE_FRAGILE(sym_math_op, 3),
|
||||
[aux_sym_STR_SLASH] = SHIFT(228),
|
||||
[aux_sym_STR_PLUS] = REDUCE(sym_math_op, 3),
|
||||
[aux_sym_STR_DASH] = REDUCE(sym_math_op, 3),
|
||||
[aux_sym_STR_PIPE_PIPE] = REDUCE(sym_math_op, 3),
|
||||
[aux_sym_STR_PLUS] = REDUCE_FRAGILE(sym_math_op, 3),
|
||||
[aux_sym_STR_DASH] = REDUCE_FRAGILE(sym_math_op, 3),
|
||||
[aux_sym_STR_PIPE_PIPE] = REDUCE_FRAGILE(sym_math_op, 3),
|
||||
[aux_sym_STR_AMP_AMP] = SHIFT(232),
|
||||
[aux_sym_STR_EQ_EQ] = SHIFT(233),
|
||||
[aux_sym_STR_LT_EQ] = SHIFT(233),
|
||||
|
|
@ -5366,17 +5366,17 @@ static const TSParseAction ts_parse_actions[STATE_COUNT][SYMBOL_COUNT] = {
|
|||
[259] = {
|
||||
[sym__line_break] = SHIFT_EXTRA(),
|
||||
[sym_comment] = SHIFT_EXTRA(),
|
||||
[aux_sym_call_expression_repeat0] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_LPAREN] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_RPAREN] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_STAR] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_COMMA] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_DOT] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_SLASH] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_PLUS] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_DASH] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_PIPE_PIPE] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_AMP_AMP] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_call_expression_repeat0] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_LPAREN] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_RPAREN] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_STAR] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_COMMA] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_DOT] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_SLASH] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_PLUS] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_DASH] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_PIPE_PIPE] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_AMP_AMP] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_EQ_EQ] = SHIFT(258),
|
||||
[aux_sym_STR_LT_EQ] = SHIFT(258),
|
||||
[aux_sym_STR_LT] = SHIFT(258),
|
||||
|
|
@ -5386,16 +5386,16 @@ static const TSParseAction ts_parse_actions[STATE_COUNT][SYMBOL_COUNT] = {
|
|||
[260] = {
|
||||
[sym__line_break] = SHIFT_EXTRA(),
|
||||
[sym_comment] = SHIFT_EXTRA(),
|
||||
[aux_sym_call_expression_repeat0] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_LPAREN] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_RPAREN] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_call_expression_repeat0] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_LPAREN] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_RPAREN] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_STAR] = SHIFT(252),
|
||||
[aux_sym_STR_COMMA] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_DOT] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_COMMA] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_DOT] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_SLASH] = SHIFT(252),
|
||||
[aux_sym_STR_PLUS] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_DASH] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_PIPE_PIPE] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_PLUS] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_DASH] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_PIPE_PIPE] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_AMP_AMP] = SHIFT(257),
|
||||
[aux_sym_STR_EQ_EQ] = SHIFT(258),
|
||||
[aux_sym_STR_LT_EQ] = SHIFT(258),
|
||||
|
|
@ -5406,12 +5406,12 @@ static const TSParseAction ts_parse_actions[STATE_COUNT][SYMBOL_COUNT] = {
|
|||
[261] = {
|
||||
[sym__line_break] = SHIFT_EXTRA(),
|
||||
[sym_comment] = SHIFT_EXTRA(),
|
||||
[aux_sym_call_expression_repeat0] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_LPAREN] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_RPAREN] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_call_expression_repeat0] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_LPAREN] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_RPAREN] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_STAR] = SHIFT(252),
|
||||
[aux_sym_STR_COMMA] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_DOT] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_COMMA] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_DOT] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_SLASH] = SHIFT(252),
|
||||
[aux_sym_STR_PLUS] = SHIFT(255),
|
||||
[aux_sym_STR_DASH] = SHIFT(255),
|
||||
|
|
@ -5426,12 +5426,12 @@ static const TSParseAction ts_parse_actions[STATE_COUNT][SYMBOL_COUNT] = {
|
|||
[262] = {
|
||||
[sym__line_break] = SHIFT_EXTRA(),
|
||||
[sym_comment] = SHIFT_EXTRA(),
|
||||
[aux_sym_call_expression_repeat0] = REDUCE(sym_math_op, 3),
|
||||
[aux_sym_STR_LPAREN] = REDUCE(sym_math_op, 3),
|
||||
[aux_sym_STR_RPAREN] = REDUCE(sym_math_op, 3),
|
||||
[aux_sym_call_expression_repeat0] = REDUCE_FRAGILE(sym_math_op, 3),
|
||||
[aux_sym_STR_LPAREN] = REDUCE_FRAGILE(sym_math_op, 3),
|
||||
[aux_sym_STR_RPAREN] = REDUCE_FRAGILE(sym_math_op, 3),
|
||||
[aux_sym_STR_STAR] = SHIFT(252),
|
||||
[aux_sym_STR_COMMA] = REDUCE(sym_math_op, 3),
|
||||
[aux_sym_STR_DOT] = REDUCE(sym_math_op, 3),
|
||||
[aux_sym_STR_COMMA] = REDUCE_FRAGILE(sym_math_op, 3),
|
||||
[aux_sym_STR_DOT] = REDUCE_FRAGILE(sym_math_op, 3),
|
||||
[aux_sym_STR_SLASH] = SHIFT(252),
|
||||
[aux_sym_STR_PLUS] = SHIFT(255),
|
||||
[aux_sym_STR_DASH] = SHIFT(255),
|
||||
|
|
@ -5491,16 +5491,16 @@ static const TSParseAction ts_parse_actions[STATE_COUNT][SYMBOL_COUNT] = {
|
|||
[266] = {
|
||||
[sym__line_break] = SHIFT_EXTRA(),
|
||||
[sym_comment] = SHIFT_EXTRA(),
|
||||
[aux_sym_call_expression_repeat0] = REDUCE(sym_math_op, 3),
|
||||
[aux_sym_STR_LPAREN] = REDUCE(sym_math_op, 3),
|
||||
[aux_sym_STR_RPAREN] = REDUCE(sym_math_op, 3),
|
||||
[aux_sym_call_expression_repeat0] = REDUCE_FRAGILE(sym_math_op, 3),
|
||||
[aux_sym_STR_LPAREN] = REDUCE_FRAGILE(sym_math_op, 3),
|
||||
[aux_sym_STR_RPAREN] = REDUCE_FRAGILE(sym_math_op, 3),
|
||||
[aux_sym_STR_STAR] = SHIFT(252),
|
||||
[aux_sym_STR_COMMA] = REDUCE(sym_math_op, 3),
|
||||
[aux_sym_STR_DOT] = REDUCE(sym_math_op, 3),
|
||||
[aux_sym_STR_COMMA] = REDUCE_FRAGILE(sym_math_op, 3),
|
||||
[aux_sym_STR_DOT] = REDUCE_FRAGILE(sym_math_op, 3),
|
||||
[aux_sym_STR_SLASH] = SHIFT(252),
|
||||
[aux_sym_STR_PLUS] = REDUCE(sym_math_op, 3),
|
||||
[aux_sym_STR_DASH] = REDUCE(sym_math_op, 3),
|
||||
[aux_sym_STR_PIPE_PIPE] = REDUCE(sym_math_op, 3),
|
||||
[aux_sym_STR_PLUS] = REDUCE_FRAGILE(sym_math_op, 3),
|
||||
[aux_sym_STR_DASH] = REDUCE_FRAGILE(sym_math_op, 3),
|
||||
[aux_sym_STR_PIPE_PIPE] = REDUCE_FRAGILE(sym_math_op, 3),
|
||||
[aux_sym_STR_AMP_AMP] = SHIFT(257),
|
||||
[aux_sym_STR_EQ_EQ] = SHIFT(258),
|
||||
[aux_sym_STR_LT_EQ] = SHIFT(258),
|
||||
|
|
@ -6050,17 +6050,17 @@ static const TSParseAction ts_parse_actions[STATE_COUNT][SYMBOL_COUNT] = {
|
|||
[aux_sym_STR_BANG] = SHIFT(217),
|
||||
},
|
||||
[301] = {
|
||||
[sym__line_break] = REDUCE(sym_bool_op, 3),
|
||||
[sym__line_break] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[sym_comment] = SHIFT_EXTRA(),
|
||||
[aux_sym_STR_LPAREN] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_SEMI] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_STAR] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_DOT] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_SLASH] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_PLUS] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_DASH] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_PIPE_PIPE] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_AMP_AMP] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_LPAREN] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_SEMI] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_STAR] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_DOT] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_SLASH] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_PLUS] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_DASH] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_PIPE_PIPE] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_AMP_AMP] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_EQ_EQ] = SHIFT(300),
|
||||
[aux_sym_STR_LT_EQ] = SHIFT(300),
|
||||
[aux_sym_STR_LT] = SHIFT(300),
|
||||
|
|
@ -6068,16 +6068,16 @@ static const TSParseAction ts_parse_actions[STATE_COUNT][SYMBOL_COUNT] = {
|
|||
[aux_sym_STR_GT] = SHIFT(300),
|
||||
},
|
||||
[302] = {
|
||||
[sym__line_break] = REDUCE(sym_bool_op, 3),
|
||||
[sym__line_break] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[sym_comment] = SHIFT_EXTRA(),
|
||||
[aux_sym_STR_LPAREN] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_SEMI] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_LPAREN] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_SEMI] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_STAR] = SHIFT(295),
|
||||
[aux_sym_STR_DOT] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_DOT] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_SLASH] = SHIFT(295),
|
||||
[aux_sym_STR_PLUS] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_DASH] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_PIPE_PIPE] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_PLUS] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_DASH] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_PIPE_PIPE] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_AMP_AMP] = SHIFT(299),
|
||||
[aux_sym_STR_EQ_EQ] = SHIFT(300),
|
||||
[aux_sym_STR_LT_EQ] = SHIFT(300),
|
||||
|
|
@ -6086,12 +6086,12 @@ static const TSParseAction ts_parse_actions[STATE_COUNT][SYMBOL_COUNT] = {
|
|||
[aux_sym_STR_GT] = SHIFT(300),
|
||||
},
|
||||
[303] = {
|
||||
[sym__line_break] = REDUCE(sym_bool_op, 3),
|
||||
[sym__line_break] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[sym_comment] = SHIFT_EXTRA(),
|
||||
[aux_sym_STR_LPAREN] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_SEMI] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_LPAREN] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_SEMI] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_STAR] = SHIFT(295),
|
||||
[aux_sym_STR_DOT] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_DOT] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_SLASH] = SHIFT(295),
|
||||
[aux_sym_STR_PLUS] = SHIFT(297),
|
||||
[aux_sym_STR_DASH] = SHIFT(297),
|
||||
|
|
@ -6104,12 +6104,12 @@ static const TSParseAction ts_parse_actions[STATE_COUNT][SYMBOL_COUNT] = {
|
|||
[aux_sym_STR_GT] = SHIFT(300),
|
||||
},
|
||||
[304] = {
|
||||
[sym__line_break] = REDUCE(sym_math_op, 3),
|
||||
[sym__line_break] = REDUCE_FRAGILE(sym_math_op, 3),
|
||||
[sym_comment] = SHIFT_EXTRA(),
|
||||
[aux_sym_STR_LPAREN] = REDUCE(sym_math_op, 3),
|
||||
[aux_sym_STR_SEMI] = REDUCE(sym_math_op, 3),
|
||||
[aux_sym_STR_LPAREN] = REDUCE_FRAGILE(sym_math_op, 3),
|
||||
[aux_sym_STR_SEMI] = REDUCE_FRAGILE(sym_math_op, 3),
|
||||
[aux_sym_STR_STAR] = SHIFT(295),
|
||||
[aux_sym_STR_DOT] = REDUCE(sym_math_op, 3),
|
||||
[aux_sym_STR_DOT] = REDUCE_FRAGILE(sym_math_op, 3),
|
||||
[aux_sym_STR_SLASH] = SHIFT(295),
|
||||
[aux_sym_STR_PLUS] = SHIFT(297),
|
||||
[aux_sym_STR_DASH] = SHIFT(297),
|
||||
|
|
@ -6140,16 +6140,16 @@ static const TSParseAction ts_parse_actions[STATE_COUNT][SYMBOL_COUNT] = {
|
|||
[aux_sym_STR_GT] = REDUCE(sym_selector_expression, 3),
|
||||
},
|
||||
[306] = {
|
||||
[sym__line_break] = REDUCE(sym_math_op, 3),
|
||||
[sym__line_break] = REDUCE_FRAGILE(sym_math_op, 3),
|
||||
[sym_comment] = SHIFT_EXTRA(),
|
||||
[aux_sym_STR_LPAREN] = REDUCE(sym_math_op, 3),
|
||||
[aux_sym_STR_SEMI] = REDUCE(sym_math_op, 3),
|
||||
[aux_sym_STR_LPAREN] = REDUCE_FRAGILE(sym_math_op, 3),
|
||||
[aux_sym_STR_SEMI] = REDUCE_FRAGILE(sym_math_op, 3),
|
||||
[aux_sym_STR_STAR] = SHIFT(295),
|
||||
[aux_sym_STR_DOT] = REDUCE(sym_math_op, 3),
|
||||
[aux_sym_STR_DOT] = REDUCE_FRAGILE(sym_math_op, 3),
|
||||
[aux_sym_STR_SLASH] = SHIFT(295),
|
||||
[aux_sym_STR_PLUS] = REDUCE(sym_math_op, 3),
|
||||
[aux_sym_STR_DASH] = REDUCE(sym_math_op, 3),
|
||||
[aux_sym_STR_PIPE_PIPE] = REDUCE(sym_math_op, 3),
|
||||
[aux_sym_STR_PLUS] = REDUCE_FRAGILE(sym_math_op, 3),
|
||||
[aux_sym_STR_DASH] = REDUCE_FRAGILE(sym_math_op, 3),
|
||||
[aux_sym_STR_PIPE_PIPE] = REDUCE_FRAGILE(sym_math_op, 3),
|
||||
[aux_sym_STR_AMP_AMP] = SHIFT(299),
|
||||
[aux_sym_STR_EQ_EQ] = SHIFT(300),
|
||||
[aux_sym_STR_LT_EQ] = SHIFT(300),
|
||||
|
|
@ -6514,19 +6514,19 @@ static const TSParseAction ts_parse_actions[STATE_COUNT][SYMBOL_COUNT] = {
|
|||
[aux_sym_STR_BANG] = SHIFT(316),
|
||||
},
|
||||
[328] = {
|
||||
[sym__line_break] = REDUCE(sym_bool_op, 3),
|
||||
[sym__line_break] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[sym_comment] = SHIFT_EXTRA(),
|
||||
[aux_sym_return_statement_repeat0] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_LPAREN] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_SEMI] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_STAR] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_COMMA] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_DOT] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_SLASH] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_PLUS] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_DASH] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_PIPE_PIPE] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_AMP_AMP] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_return_statement_repeat0] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_LPAREN] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_SEMI] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_STAR] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_COMMA] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_DOT] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_SLASH] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_PLUS] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_DASH] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_PIPE_PIPE] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_AMP_AMP] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_EQ_EQ] = SHIFT(327),
|
||||
[aux_sym_STR_LT_EQ] = SHIFT(327),
|
||||
[aux_sym_STR_LT] = SHIFT(327),
|
||||
|
|
@ -6534,18 +6534,18 @@ static const TSParseAction ts_parse_actions[STATE_COUNT][SYMBOL_COUNT] = {
|
|||
[aux_sym_STR_GT] = SHIFT(327),
|
||||
},
|
||||
[329] = {
|
||||
[sym__line_break] = REDUCE(sym_bool_op, 3),
|
||||
[sym__line_break] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[sym_comment] = SHIFT_EXTRA(),
|
||||
[aux_sym_return_statement_repeat0] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_LPAREN] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_SEMI] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_return_statement_repeat0] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_LPAREN] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_SEMI] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_STAR] = SHIFT(321),
|
||||
[aux_sym_STR_COMMA] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_DOT] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_COMMA] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_DOT] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_SLASH] = SHIFT(321),
|
||||
[aux_sym_STR_PLUS] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_DASH] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_PIPE_PIPE] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_PLUS] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_DASH] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_PIPE_PIPE] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_AMP_AMP] = SHIFT(326),
|
||||
[aux_sym_STR_EQ_EQ] = SHIFT(327),
|
||||
[aux_sym_STR_LT_EQ] = SHIFT(327),
|
||||
|
|
@ -6554,14 +6554,14 @@ static const TSParseAction ts_parse_actions[STATE_COUNT][SYMBOL_COUNT] = {
|
|||
[aux_sym_STR_GT] = SHIFT(327),
|
||||
},
|
||||
[330] = {
|
||||
[sym__line_break] = REDUCE(sym_bool_op, 3),
|
||||
[sym__line_break] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[sym_comment] = SHIFT_EXTRA(),
|
||||
[aux_sym_return_statement_repeat0] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_LPAREN] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_SEMI] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_return_statement_repeat0] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_LPAREN] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_SEMI] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_STAR] = SHIFT(321),
|
||||
[aux_sym_STR_COMMA] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_DOT] = REDUCE(sym_bool_op, 3),
|
||||
[aux_sym_STR_COMMA] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_DOT] = REDUCE_FRAGILE(sym_bool_op, 3),
|
||||
[aux_sym_STR_SLASH] = SHIFT(321),
|
||||
[aux_sym_STR_PLUS] = SHIFT(324),
|
||||
[aux_sym_STR_DASH] = SHIFT(324),
|
||||
|
|
@ -6574,14 +6574,14 @@ static const TSParseAction ts_parse_actions[STATE_COUNT][SYMBOL_COUNT] = {
|
|||
[aux_sym_STR_GT] = SHIFT(327),
|
||||
},
|
||||
[331] = {
|
||||
[sym__line_break] = REDUCE(sym_math_op, 3),
|
||||
[sym__line_break] = REDUCE_FRAGILE(sym_math_op, 3),
|
||||
[sym_comment] = SHIFT_EXTRA(),
|
||||
[aux_sym_return_statement_repeat0] = REDUCE(sym_math_op, 3),
|
||||
[aux_sym_STR_LPAREN] = REDUCE(sym_math_op, 3),
|
||||
[aux_sym_STR_SEMI] = REDUCE(sym_math_op, 3),
|
||||
[aux_sym_return_statement_repeat0] = REDUCE_FRAGILE(sym_math_op, 3),
|
||||
[aux_sym_STR_LPAREN] = REDUCE_FRAGILE(sym_math_op, 3),
|
||||
[aux_sym_STR_SEMI] = REDUCE_FRAGILE(sym_math_op, 3),
|
||||
[aux_sym_STR_STAR] = SHIFT(321),
|
||||
[aux_sym_STR_COMMA] = REDUCE(sym_math_op, 3),
|
||||
[aux_sym_STR_DOT] = REDUCE(sym_math_op, 3),
|
||||
[aux_sym_STR_COMMA] = REDUCE_FRAGILE(sym_math_op, 3),
|
||||
[aux_sym_STR_DOT] = REDUCE_FRAGILE(sym_math_op, 3),
|
||||
[aux_sym_STR_SLASH] = SHIFT(321),
|
||||
[aux_sym_STR_PLUS] = SHIFT(324),
|
||||
[aux_sym_STR_DASH] = SHIFT(324),
|
||||
|
|
@ -6639,18 +6639,18 @@ static const TSParseAction ts_parse_actions[STATE_COUNT][SYMBOL_COUNT] = {
|
|||
[aux_sym_STR_SEMI] = REDUCE(aux_sym_return_statement_repeat0, 3),
|
||||
},
|
||||
[335] = {
|
||||
[sym__line_break] = REDUCE(sym_math_op, 3),
|
||||
[sym__line_break] = REDUCE_FRAGILE(sym_math_op, 3),
|
||||
[sym_comment] = SHIFT_EXTRA(),
|
||||
[aux_sym_return_statement_repeat0] = REDUCE(sym_math_op, 3),
|
||||
[aux_sym_STR_LPAREN] = REDUCE(sym_math_op, 3),
|
||||
[aux_sym_STR_SEMI] = REDUCE(sym_math_op, 3),
|
||||
[aux_sym_return_statement_repeat0] = REDUCE_FRAGILE(sym_math_op, 3),
|
||||
[aux_sym_STR_LPAREN] = REDUCE_FRAGILE(sym_math_op, 3),
|
||||
[aux_sym_STR_SEMI] = REDUCE_FRAGILE(sym_math_op, 3),
|
||||
[aux_sym_STR_STAR] = SHIFT(321),
|
||||
[aux_sym_STR_COMMA] = REDUCE(sym_math_op, 3),
|
||||
[aux_sym_STR_DOT] = REDUCE(sym_math_op, 3),
|
||||
[aux_sym_STR_COMMA] = REDUCE_FRAGILE(sym_math_op, 3),
|
||||
[aux_sym_STR_DOT] = REDUCE_FRAGILE(sym_math_op, 3),
|
||||
[aux_sym_STR_SLASH] = SHIFT(321),
|
||||
[aux_sym_STR_PLUS] = REDUCE(sym_math_op, 3),
|
||||
[aux_sym_STR_DASH] = REDUCE(sym_math_op, 3),
|
||||
[aux_sym_STR_PIPE_PIPE] = REDUCE(sym_math_op, 3),
|
||||
[aux_sym_STR_PLUS] = REDUCE_FRAGILE(sym_math_op, 3),
|
||||
[aux_sym_STR_DASH] = REDUCE_FRAGILE(sym_math_op, 3),
|
||||
[aux_sym_STR_PIPE_PIPE] = REDUCE_FRAGILE(sym_math_op, 3),
|
||||
[aux_sym_STR_AMP_AMP] = SHIFT(326),
|
||||
[aux_sym_STR_EQ_EQ] = SHIFT(327),
|
||||
[aux_sym_STR_LT_EQ] = SHIFT(327),
|
||||
|
|
|
|||
9146
spec/fixtures/parsers/javascript.c
vendored
9146
spec/fixtures/parsers/javascript.c
vendored
File diff suppressed because it is too large
Load diff
|
|
@ -269,7 +269,7 @@ describe("Parser", [&]() {
|
|||
});
|
||||
|
||||
it("re-reads only the changed portion of the input", [&]() {
|
||||
AssertThat(reader->strings_read, Equals(vector<string>({ "123 + 5 ", " 4", "" })));
|
||||
AssertThat(reader->strings_read, Equals(vector<string>({ "123 + 5 ", " 4", " ^ (", "" })));
|
||||
});
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
#include <algorithm>
|
||||
#include <map>
|
||||
#include <set>
|
||||
#include <string>
|
||||
|
|
@ -17,6 +18,7 @@
|
|||
namespace tree_sitter {
|
||||
namespace build_tables {
|
||||
|
||||
using std::find;
|
||||
using std::pair;
|
||||
using std::vector;
|
||||
using std::set;
|
||||
|
|
@ -30,6 +32,7 @@ class ParseTableBuilder {
|
|||
const SyntaxGrammar grammar;
|
||||
const LexicalGrammar lex_grammar;
|
||||
unordered_map<const ParseItemSet, ParseStateId> parse_state_ids;
|
||||
vector<vector<Symbol>> productions;
|
||||
vector<pair<ParseItemSet, ParseStateId>> item_sets_to_process;
|
||||
ParseTable parse_table;
|
||||
std::set<Conflict> conflicts;
|
||||
|
|
@ -105,7 +108,7 @@ class ParseTableBuilder {
|
|||
(item.lhs == rules::START())
|
||||
? ParseAction::Accept()
|
||||
: ParseAction::Reduce(item.lhs, item.consumed_symbols.size(),
|
||||
item.precedence());
|
||||
item.precedence(), get_production_id(item.consumed_symbols));
|
||||
|
||||
for (const auto &lookahead_sym : lookahead_symbols)
|
||||
if (should_add_action(state_id, lookahead_sym, action, ParseItemSet()))
|
||||
|
|
@ -159,9 +162,15 @@ class ParseTableBuilder {
|
|||
auto result = action_takes_precedence(action, current_action->second,
|
||||
symbol);
|
||||
|
||||
if (result.second)
|
||||
if (result.second) {
|
||||
record_conflict(symbol, current_action->second, action, item_set);
|
||||
|
||||
if (action.type == ParseActionTypeReduce)
|
||||
parse_table.fragile_production_ids.insert(action.production_id);
|
||||
if (current_action->second.type == ParseActionTypeReduce)
|
||||
parse_table.fragile_production_ids.insert(current_action->second.production_id);
|
||||
}
|
||||
|
||||
return result.first;
|
||||
}
|
||||
|
||||
|
|
@ -175,6 +184,17 @@ class ParseTableBuilder {
|
|||
return result;
|
||||
}
|
||||
|
||||
int get_production_id(const vector<Symbol> &symbols) {
|
||||
auto begin = productions.begin();
|
||||
auto end = productions.end();
|
||||
auto iter = find(begin, end, symbols);
|
||||
if (iter == end) {
|
||||
productions.push_back(symbols);
|
||||
return productions.size() - 1;
|
||||
}
|
||||
return iter - begin;
|
||||
}
|
||||
|
||||
void record_conflict(const Symbol &sym, const ParseAction &left,
|
||||
const ParseAction &right, const ParseItemSet &item_set) {
|
||||
conflicts.insert(
|
||||
|
|
|
|||
|
|
@ -290,8 +290,12 @@ class CCodeGenerator {
|
|||
add("SHIFT_EXTRA()");
|
||||
break;
|
||||
case ParseActionTypeReduce:
|
||||
add("REDUCE(" + symbol_id(action.symbol) + ", " +
|
||||
to_string(action.consumed_symbol_count) + ")");
|
||||
if (reduce_action_is_fragile(action))
|
||||
add("REDUCE_FRAGILE(" + symbol_id(action.symbol) + ", " +
|
||||
to_string(action.consumed_symbol_count) + ")");
|
||||
else
|
||||
add("REDUCE(" + symbol_id(action.symbol) + ", " +
|
||||
to_string(action.consumed_symbol_count) + ")");
|
||||
break;
|
||||
case ParseActionTypeReduceExtra:
|
||||
add("REDUCE_EXTRA(" + symbol_id(action.symbol) + ")");
|
||||
|
|
@ -339,6 +343,11 @@ class CCodeGenerator {
|
|||
: syntax_grammar.rule_name(symbol);
|
||||
}
|
||||
|
||||
bool reduce_action_is_fragile(const ParseAction &action) const {
|
||||
return parse_table.fragile_production_ids.find(action.production_id) !=
|
||||
parse_table.fragile_production_ids.end();
|
||||
}
|
||||
|
||||
// C-code generation functions
|
||||
|
||||
void _switch(string condition, function<void()> body) {
|
||||
|
|
|
|||
|
|
@ -12,12 +12,14 @@ using rules::Symbol;
|
|||
|
||||
ParseAction::ParseAction(ParseActionType type, ParseStateId state_index,
|
||||
Symbol symbol, size_t consumed_symbol_count,
|
||||
set<int> precedence_values)
|
||||
set<int> precedence_values,
|
||||
int production_id)
|
||||
: type(type),
|
||||
symbol(symbol),
|
||||
state_index(state_index),
|
||||
consumed_symbol_count(consumed_symbol_count),
|
||||
precedence_values(precedence_values) {}
|
||||
precedence_values(precedence_values),
|
||||
production_id(production_id) {}
|
||||
|
||||
ParseAction::ParseAction()
|
||||
: type(ParseActionTypeError),
|
||||
|
|
@ -26,31 +28,31 @@ ParseAction::ParseAction()
|
|||
consumed_symbol_count(0) {}
|
||||
|
||||
ParseAction ParseAction::Error() {
|
||||
return ParseAction(ParseActionTypeError, -1, Symbol(-1), 0, { 0 });
|
||||
return ParseAction(ParseActionTypeError, -1, Symbol(-1), 0, { 0 }, 0);
|
||||
}
|
||||
|
||||
ParseAction ParseAction::Accept() {
|
||||
return ParseAction(ParseActionTypeAccept, -1, Symbol(-1), 0, { 0 });
|
||||
return ParseAction(ParseActionTypeAccept, -1, Symbol(-1), 0, { 0 }, 0);
|
||||
}
|
||||
|
||||
ParseAction ParseAction::Shift(ParseStateId state_index,
|
||||
set<int> precedence_values) {
|
||||
return ParseAction(ParseActionTypeShift, state_index, Symbol(-1), 0,
|
||||
precedence_values);
|
||||
precedence_values, 0);
|
||||
}
|
||||
|
||||
ParseAction ParseAction::ShiftExtra() {
|
||||
return ParseAction(ParseActionTypeShiftExtra, 0, Symbol(-1), 0, { 0 });
|
||||
return ParseAction(ParseActionTypeShiftExtra, 0, Symbol(-1), 0, { 0 }, 0);
|
||||
}
|
||||
|
||||
ParseAction ParseAction::ReduceExtra(Symbol symbol) {
|
||||
return ParseAction(ParseActionTypeReduceExtra, 0, symbol, 0, { 0 });
|
||||
return ParseAction(ParseActionTypeReduceExtra, 0, symbol, 0, { 0 }, 0);
|
||||
}
|
||||
|
||||
ParseAction ParseAction::Reduce(Symbol symbol, size_t consumed_symbol_count,
|
||||
int precedence) {
|
||||
int precedence, int production_id) {
|
||||
return ParseAction(ParseActionTypeReduce, 0, symbol, consumed_symbol_count,
|
||||
{ precedence });
|
||||
{ precedence }, production_id);
|
||||
}
|
||||
|
||||
bool ParseAction::operator==(const ParseAction &other) const {
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ typedef enum {
|
|||
class ParseAction {
|
||||
ParseAction(ParseActionType type, ParseStateId state_index,
|
||||
rules::Symbol symbol, size_t consumed_symbol_count,
|
||||
std::set<int> precedence_values);
|
||||
std::set<int> precedence_values, int production_id);
|
||||
|
||||
public:
|
||||
ParseAction();
|
||||
|
|
@ -33,7 +33,7 @@ class ParseAction {
|
|||
static ParseAction Shift(ParseStateId state_index,
|
||||
std::set<int> precedence_values);
|
||||
static ParseAction Reduce(rules::Symbol symbol, size_t consumed_symbol_count,
|
||||
int precedence);
|
||||
int precedence, int production_id);
|
||||
static ParseAction ShiftExtra();
|
||||
static ParseAction ReduceExtra(rules::Symbol symbol);
|
||||
bool operator==(const ParseAction &action) const;
|
||||
|
|
@ -43,6 +43,7 @@ class ParseAction {
|
|||
ParseStateId state_index;
|
||||
size_t consumed_symbol_count;
|
||||
std::set<int> precedence_values;
|
||||
int production_id;
|
||||
};
|
||||
|
||||
std::ostream &operator<<(std::ostream &stream, const ParseAction &item);
|
||||
|
|
@ -57,7 +58,8 @@ struct hash<tree_sitter::ParseAction> {
|
|||
return (hash<int>()(action.type) ^
|
||||
hash<tree_sitter::rules::Symbol>()(action.symbol) ^
|
||||
hash<size_t>()(action.state_index) ^
|
||||
hash<size_t>()(action.consumed_symbol_count));
|
||||
hash<size_t>()(action.consumed_symbol_count) ^
|
||||
hash<size_t>()(action.production_id));
|
||||
}
|
||||
};
|
||||
|
||||
|
|
@ -83,6 +85,7 @@ class ParseTable {
|
|||
|
||||
std::vector<ParseState> states;
|
||||
std::set<rules::Symbol> symbols;
|
||||
std::set<int> fragile_production_ids;
|
||||
};
|
||||
|
||||
} // namespace tree_sitter
|
||||
|
|
|
|||
|
|
@ -212,6 +212,12 @@ static void reduce_extra(TSParser *parser, TSSymbol symbol) {
|
|||
ts_tree_set_extra(parser->lookahead);
|
||||
}
|
||||
|
||||
static void reduce_fragile(TSParser *parser, TSSymbol symbol, size_t child_count) {
|
||||
reduce(parser, symbol, child_count);
|
||||
ts_tree_set_fragile_left(parser->lookahead);
|
||||
ts_tree_set_fragile_right(parser->lookahead);
|
||||
}
|
||||
|
||||
static int handle_error(TSParser *parser) {
|
||||
TSTree *error = parser->lookahead;
|
||||
ts_tree_retain(error);
|
||||
|
|
@ -374,6 +380,12 @@ const TSTree *ts_parser_parse(TSParser *parser, TSInput input,
|
|||
reduce_extra(parser, action.data.symbol);
|
||||
break;
|
||||
|
||||
case TSParseActionTypeReduceFragile:
|
||||
reduce_fragile(parser, action.data.symbol, action.data.child_count);
|
||||
DEBUG("reduce_fragile sym:%s, count:%u, state:%u", SYM_NAME(action.data.symbol),
|
||||
action.data.child_count, ts_stack_top_state(&parser->stack));
|
||||
break;
|
||||
|
||||
case TSParseActionTypeAccept:
|
||||
DEBUG("accept");
|
||||
return finish(parser);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue