Merge pull request #21 from maxbrunsfeld/reduce-binary-sizes
Store parse table more compactly
This commit is contained in:
commit
36cdb3afcd
12 changed files with 64894 additions and 61436 deletions
|
|
@ -55,7 +55,7 @@ typedef struct TSLexer {
|
|||
} TSLexer;
|
||||
|
||||
typedef enum {
|
||||
TSParseActionTypeError = 1,
|
||||
TSParseActionTypeError,
|
||||
TSParseActionTypeShift,
|
||||
TSParseActionTypeReduce,
|
||||
TSParseActionTypeAccept,
|
||||
|
|
@ -75,11 +75,17 @@ typedef struct {
|
|||
bool can_hide_split : 1;
|
||||
} TSParseAction;
|
||||
|
||||
typedef union {
|
||||
TSParseAction action;
|
||||
unsigned int count;
|
||||
} TSParseActionEntry;
|
||||
|
||||
struct TSLanguage {
|
||||
size_t symbol_count;
|
||||
const char **symbol_names;
|
||||
const TSSymbolMetadata *symbol_metadata;
|
||||
const TSParseAction **parse_table;
|
||||
const unsigned short *parse_table;
|
||||
const TSParseActionEntry *parse_actions;
|
||||
const TSStateId *lex_states;
|
||||
TSTree *(*lex_fn)(TSLexer *, TSStateId);
|
||||
};
|
||||
|
|
@ -143,37 +149,40 @@ enum {
|
|||
CAN_HIDE_SPLIT = 2,
|
||||
};
|
||||
|
||||
#define ERROR() {{.type = TSParseActionTypeError}}
|
||||
|
||||
#define SHIFT(to_state_value, flags) \
|
||||
{ \
|
||||
{{ \
|
||||
.type = TSParseActionTypeShift, \
|
||||
.can_hide_split = (flags & CAN_HIDE_SPLIT) != 0, \
|
||||
.data = {.to_state = to_state_value } \
|
||||
}
|
||||
}}
|
||||
|
||||
#define SHIFT_EXTRA() \
|
||||
{ .type = TSParseActionTypeShift, .extra = true }
|
||||
{{ .type = TSParseActionTypeShift, .extra = true }}
|
||||
|
||||
#define REDUCE_EXTRA(symbol_val) \
|
||||
{ \
|
||||
{{ \
|
||||
.type = TSParseActionTypeReduce, .extra = true, \
|
||||
.data = {.symbol = symbol_val, .child_count = 1 } \
|
||||
}
|
||||
}}
|
||||
|
||||
#define REDUCE(symbol_val, child_count_val, flags) \
|
||||
{ \
|
||||
{{ \
|
||||
.type = TSParseActionTypeReduce, .fragile = (flags & FRAGILE) != 0, \
|
||||
.can_hide_split = (flags & CAN_HIDE_SPLIT) != 0, \
|
||||
.data = {.symbol = symbol_val, .child_count = child_count_val } \
|
||||
}
|
||||
}}
|
||||
|
||||
#define ACCEPT_INPUT() \
|
||||
{ .type = TSParseActionTypeAccept }
|
||||
{{ .type = TSParseActionTypeAccept }}
|
||||
|
||||
#define EXPORT_LANGUAGE(language_name) \
|
||||
static TSLanguage language = { \
|
||||
.symbol_count = SYMBOL_COUNT, \
|
||||
.symbol_metadata = ts_symbol_metadata, \
|
||||
.parse_table = (const TSParseAction **)ts_parse_actions, \
|
||||
.parse_table = (const unsigned short *)ts_parse_table, \
|
||||
.parse_actions = ts_parse_actions, \
|
||||
.lex_states = ts_lex_states, \
|
||||
.symbol_names = ts_symbol_names, \
|
||||
.lex_fn = ts_lex, \
|
||||
|
|
|
|||
24
spec/fixtures/parsers/anonymous_tokens.c
vendored
24
spec/fixtures/parsers/anonymous_tokens.c
vendored
|
|
@ -140,22 +140,30 @@ static TSStateId ts_lex_states[STATE_COUNT] = {
|
|||
#pragma GCC diagnostic push
|
||||
#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
|
||||
|
||||
static const TSParseAction *ts_parse_actions[STATE_COUNT][SYMBOL_COUNT] = {
|
||||
static unsigned short ts_parse_table[STATE_COUNT][SYMBOL_COUNT] = {
|
||||
[0] = {
|
||||
[sym_program] = ACTIONS(SHIFT(1, 0)),
|
||||
[anon_sym_LF] = ACTIONS(SHIFT(2, 0)),
|
||||
[anon_sym_CR] = ACTIONS(SHIFT(2, 0)),
|
||||
[aux_sym_SLASH_BSLASHd_SLASH] = ACTIONS(SHIFT(2, 0)),
|
||||
[anon_sym_DQUOTEhello_DQUOTE] = ACTIONS(SHIFT(2, 0)),
|
||||
[sym_program] = 2,
|
||||
[anon_sym_LF] = 4,
|
||||
[anon_sym_CR] = 4,
|
||||
[aux_sym_SLASH_BSLASHd_SLASH] = 4,
|
||||
[anon_sym_DQUOTEhello_DQUOTE] = 4,
|
||||
},
|
||||
[1] = {
|
||||
[ts_builtin_sym_end] = ACTIONS(ACCEPT_INPUT()),
|
||||
[ts_builtin_sym_end] = 6,
|
||||
},
|
||||
[2] = {
|
||||
[ts_builtin_sym_end] = ACTIONS(REDUCE(sym_program, 1, 0)),
|
||||
[ts_builtin_sym_end] = 8,
|
||||
},
|
||||
};
|
||||
|
||||
static TSParseActionEntry ts_parse_actions[] = {
|
||||
[0] = {.count = 1}, ERROR(),
|
||||
[2] = {.count = 1}, SHIFT(1, 0),
|
||||
[4] = {.count = 1}, SHIFT(2, 0),
|
||||
[6] = {.count = 1}, ACCEPT_INPUT(),
|
||||
[8] = {.count = 1}, REDUCE(sym_program, 1, 0),
|
||||
};
|
||||
|
||||
#pragma GCC diagnostic pop
|
||||
|
||||
EXPORT_LANGUAGE(ts_language_anonymous_tokens);
|
||||
|
|
|
|||
591
spec/fixtures/parsers/arithmetic.c
vendored
591
spec/fixtures/parsers/arithmetic.c
vendored
|
|
@ -300,346 +300,393 @@ static TSStateId ts_lex_states[STATE_COUNT] = {
|
|||
#pragma GCC diagnostic push
|
||||
#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
|
||||
|
||||
static const TSParseAction *ts_parse_actions[STATE_COUNT][SYMBOL_COUNT] = {
|
||||
static unsigned short ts_parse_table[STATE_COUNT][SYMBOL_COUNT] = {
|
||||
[0] = {
|
||||
[sym_program] = ACTIONS(SHIFT(1, 0)),
|
||||
[sym__expression] = ACTIONS(SHIFT(2, 0)),
|
||||
[sym_sum] = ACTIONS(SHIFT(3, 0)),
|
||||
[sym_difference] = ACTIONS(SHIFT(3, 0)),
|
||||
[sym_product] = ACTIONS(SHIFT(3, 0)),
|
||||
[sym_quotient] = ACTIONS(SHIFT(3, 0)),
|
||||
[sym_exponent] = ACTIONS(SHIFT(3, 0)),
|
||||
[sym_group] = ACTIONS(SHIFT(3, 0)),
|
||||
[anon_sym_LPAREN] = ACTIONS(SHIFT(4, 0)),
|
||||
[sym_number] = ACTIONS(SHIFT(3, 0)),
|
||||
[sym_variable] = ACTIONS(SHIFT(3, 0)),
|
||||
[sym_comment] = ACTIONS(SHIFT_EXTRA()),
|
||||
[sym_program] = 2,
|
||||
[sym__expression] = 4,
|
||||
[sym_sum] = 6,
|
||||
[sym_difference] = 6,
|
||||
[sym_product] = 6,
|
||||
[sym_quotient] = 6,
|
||||
[sym_exponent] = 6,
|
||||
[sym_group] = 6,
|
||||
[anon_sym_LPAREN] = 8,
|
||||
[sym_number] = 6,
|
||||
[sym_variable] = 6,
|
||||
[sym_comment] = 10,
|
||||
},
|
||||
[1] = {
|
||||
[ts_builtin_sym_end] = ACTIONS(ACCEPT_INPUT()),
|
||||
[sym_comment] = ACTIONS(SHIFT_EXTRA()),
|
||||
[ts_builtin_sym_end] = 12,
|
||||
[sym_comment] = 14,
|
||||
},
|
||||
[2] = {
|
||||
[ts_builtin_sym_end] = ACTIONS(REDUCE(sym_program, 1, 0)),
|
||||
[anon_sym_PLUS] = ACTIONS(SHIFT(23, 0)),
|
||||
[anon_sym_DASH] = ACTIONS(SHIFT(24, 0)),
|
||||
[anon_sym_STAR] = ACTIONS(SHIFT(25, 0)),
|
||||
[anon_sym_SLASH] = ACTIONS(SHIFT(26, 0)),
|
||||
[anon_sym_CARET] = ACTIONS(SHIFT(27, 0)),
|
||||
[sym_comment] = ACTIONS(SHIFT_EXTRA()),
|
||||
[ts_builtin_sym_end] = 16,
|
||||
[anon_sym_PLUS] = 18,
|
||||
[anon_sym_DASH] = 20,
|
||||
[anon_sym_STAR] = 22,
|
||||
[anon_sym_SLASH] = 24,
|
||||
[anon_sym_CARET] = 26,
|
||||
[sym_comment] = 14,
|
||||
},
|
||||
[3] = {
|
||||
[ts_builtin_sym_end] = ACTIONS(REDUCE(sym__expression, 1, 0)),
|
||||
[anon_sym_PLUS] = ACTIONS(REDUCE(sym__expression, 1, 0)),
|
||||
[anon_sym_DASH] = ACTIONS(REDUCE(sym__expression, 1, 0)),
|
||||
[anon_sym_STAR] = ACTIONS(REDUCE(sym__expression, 1, 0)),
|
||||
[anon_sym_SLASH] = ACTIONS(REDUCE(sym__expression, 1, 0)),
|
||||
[anon_sym_CARET] = ACTIONS(REDUCE(sym__expression, 1, 0)),
|
||||
[sym_comment] = ACTIONS(SHIFT_EXTRA()),
|
||||
[ts_builtin_sym_end] = 28,
|
||||
[anon_sym_PLUS] = 28,
|
||||
[anon_sym_DASH] = 28,
|
||||
[anon_sym_STAR] = 28,
|
||||
[anon_sym_SLASH] = 28,
|
||||
[anon_sym_CARET] = 28,
|
||||
[sym_comment] = 14,
|
||||
},
|
||||
[4] = {
|
||||
[sym__expression] = ACTIONS(SHIFT(5, 0)),
|
||||
[sym_sum] = ACTIONS(SHIFT(6, 0)),
|
||||
[sym_difference] = ACTIONS(SHIFT(6, 0)),
|
||||
[sym_product] = ACTIONS(SHIFT(6, 0)),
|
||||
[sym_quotient] = ACTIONS(SHIFT(6, 0)),
|
||||
[sym_exponent] = ACTIONS(SHIFT(6, 0)),
|
||||
[sym_group] = ACTIONS(SHIFT(6, 0)),
|
||||
[ts_builtin_sym_error] = ACTIONS(SHIFT(7, 0)),
|
||||
[anon_sym_LPAREN] = ACTIONS(SHIFT(8, 0)),
|
||||
[sym_number] = ACTIONS(SHIFT(6, 0)),
|
||||
[sym_variable] = ACTIONS(SHIFT(6, 0)),
|
||||
[sym_comment] = ACTIONS(SHIFT_EXTRA()),
|
||||
[sym__expression] = 30,
|
||||
[sym_sum] = 32,
|
||||
[sym_difference] = 32,
|
||||
[sym_product] = 32,
|
||||
[sym_quotient] = 32,
|
||||
[sym_exponent] = 32,
|
||||
[sym_group] = 32,
|
||||
[ts_builtin_sym_error] = 34,
|
||||
[anon_sym_LPAREN] = 36,
|
||||
[sym_number] = 32,
|
||||
[sym_variable] = 32,
|
||||
[sym_comment] = 14,
|
||||
},
|
||||
[5] = {
|
||||
[anon_sym_PLUS] = ACTIONS(SHIFT(12, 0)),
|
||||
[anon_sym_DASH] = ACTIONS(SHIFT(13, 0)),
|
||||
[anon_sym_STAR] = ACTIONS(SHIFT(14, 0)),
|
||||
[anon_sym_SLASH] = ACTIONS(SHIFT(15, 0)),
|
||||
[anon_sym_CARET] = ACTIONS(SHIFT(16, 0)),
|
||||
[anon_sym_RPAREN] = ACTIONS(SHIFT(22, 0)),
|
||||
[sym_comment] = ACTIONS(SHIFT_EXTRA()),
|
||||
[anon_sym_PLUS] = 38,
|
||||
[anon_sym_DASH] = 40,
|
||||
[anon_sym_STAR] = 42,
|
||||
[anon_sym_SLASH] = 44,
|
||||
[anon_sym_CARET] = 46,
|
||||
[anon_sym_RPAREN] = 48,
|
||||
[sym_comment] = 14,
|
||||
},
|
||||
[6] = {
|
||||
[anon_sym_PLUS] = ACTIONS(REDUCE(sym__expression, 1, 0)),
|
||||
[anon_sym_DASH] = ACTIONS(REDUCE(sym__expression, 1, 0)),
|
||||
[anon_sym_STAR] = ACTIONS(REDUCE(sym__expression, 1, 0)),
|
||||
[anon_sym_SLASH] = ACTIONS(REDUCE(sym__expression, 1, 0)),
|
||||
[anon_sym_CARET] = ACTIONS(REDUCE(sym__expression, 1, 0)),
|
||||
[anon_sym_RPAREN] = ACTIONS(REDUCE(sym__expression, 1, 0)),
|
||||
[sym_comment] = ACTIONS(SHIFT_EXTRA()),
|
||||
[anon_sym_PLUS] = 28,
|
||||
[anon_sym_DASH] = 28,
|
||||
[anon_sym_STAR] = 28,
|
||||
[anon_sym_SLASH] = 28,
|
||||
[anon_sym_CARET] = 28,
|
||||
[anon_sym_RPAREN] = 28,
|
||||
[sym_comment] = 14,
|
||||
},
|
||||
[7] = {
|
||||
[anon_sym_RPAREN] = ACTIONS(SHIFT(22, 0)),
|
||||
[sym_comment] = ACTIONS(SHIFT_EXTRA()),
|
||||
[anon_sym_RPAREN] = 48,
|
||||
[sym_comment] = 14,
|
||||
},
|
||||
[8] = {
|
||||
[sym__expression] = ACTIONS(SHIFT(9, 0)),
|
||||
[sym_sum] = ACTIONS(SHIFT(6, 0)),
|
||||
[sym_difference] = ACTIONS(SHIFT(6, 0)),
|
||||
[sym_product] = ACTIONS(SHIFT(6, 0)),
|
||||
[sym_quotient] = ACTIONS(SHIFT(6, 0)),
|
||||
[sym_exponent] = ACTIONS(SHIFT(6, 0)),
|
||||
[sym_group] = ACTIONS(SHIFT(6, 0)),
|
||||
[ts_builtin_sym_error] = ACTIONS(SHIFT(10, 0)),
|
||||
[anon_sym_LPAREN] = ACTIONS(SHIFT(8, 0)),
|
||||
[sym_number] = ACTIONS(SHIFT(6, 0)),
|
||||
[sym_variable] = ACTIONS(SHIFT(6, 0)),
|
||||
[sym_comment] = ACTIONS(SHIFT_EXTRA()),
|
||||
[sym__expression] = 50,
|
||||
[sym_sum] = 32,
|
||||
[sym_difference] = 32,
|
||||
[sym_product] = 32,
|
||||
[sym_quotient] = 32,
|
||||
[sym_exponent] = 32,
|
||||
[sym_group] = 32,
|
||||
[ts_builtin_sym_error] = 52,
|
||||
[anon_sym_LPAREN] = 36,
|
||||
[sym_number] = 32,
|
||||
[sym_variable] = 32,
|
||||
[sym_comment] = 14,
|
||||
},
|
||||
[9] = {
|
||||
[anon_sym_PLUS] = ACTIONS(SHIFT(12, 0)),
|
||||
[anon_sym_DASH] = ACTIONS(SHIFT(13, 0)),
|
||||
[anon_sym_STAR] = ACTIONS(SHIFT(14, 0)),
|
||||
[anon_sym_SLASH] = ACTIONS(SHIFT(15, 0)),
|
||||
[anon_sym_CARET] = ACTIONS(SHIFT(16, 0)),
|
||||
[anon_sym_RPAREN] = ACTIONS(SHIFT(11, 0)),
|
||||
[sym_comment] = ACTIONS(SHIFT_EXTRA()),
|
||||
[anon_sym_PLUS] = 38,
|
||||
[anon_sym_DASH] = 40,
|
||||
[anon_sym_STAR] = 42,
|
||||
[anon_sym_SLASH] = 44,
|
||||
[anon_sym_CARET] = 46,
|
||||
[anon_sym_RPAREN] = 54,
|
||||
[sym_comment] = 14,
|
||||
},
|
||||
[10] = {
|
||||
[anon_sym_RPAREN] = ACTIONS(SHIFT(11, 0)),
|
||||
[sym_comment] = ACTIONS(SHIFT_EXTRA()),
|
||||
[anon_sym_RPAREN] = 54,
|
||||
[sym_comment] = 14,
|
||||
},
|
||||
[11] = {
|
||||
[anon_sym_PLUS] = ACTIONS(REDUCE(sym_group, 3, 0)),
|
||||
[anon_sym_DASH] = ACTIONS(REDUCE(sym_group, 3, 0)),
|
||||
[anon_sym_STAR] = ACTIONS(REDUCE(sym_group, 3, 0)),
|
||||
[anon_sym_SLASH] = ACTIONS(REDUCE(sym_group, 3, 0)),
|
||||
[anon_sym_CARET] = ACTIONS(REDUCE(sym_group, 3, 0)),
|
||||
[anon_sym_RPAREN] = ACTIONS(REDUCE(sym_group, 3, 0)),
|
||||
[sym_comment] = ACTIONS(SHIFT_EXTRA()),
|
||||
[anon_sym_PLUS] = 56,
|
||||
[anon_sym_DASH] = 56,
|
||||
[anon_sym_STAR] = 56,
|
||||
[anon_sym_SLASH] = 56,
|
||||
[anon_sym_CARET] = 56,
|
||||
[anon_sym_RPAREN] = 56,
|
||||
[sym_comment] = 14,
|
||||
},
|
||||
[12] = {
|
||||
[sym__expression] = ACTIONS(SHIFT(21, 0)),
|
||||
[sym_sum] = ACTIONS(SHIFT(6, 0)),
|
||||
[sym_difference] = ACTIONS(SHIFT(6, 0)),
|
||||
[sym_product] = ACTIONS(SHIFT(6, 0)),
|
||||
[sym_quotient] = ACTIONS(SHIFT(6, 0)),
|
||||
[sym_exponent] = ACTIONS(SHIFT(6, 0)),
|
||||
[sym_group] = ACTIONS(SHIFT(6, 0)),
|
||||
[anon_sym_LPAREN] = ACTIONS(SHIFT(8, 0)),
|
||||
[sym_number] = ACTIONS(SHIFT(6, 0)),
|
||||
[sym_variable] = ACTIONS(SHIFT(6, 0)),
|
||||
[sym_comment] = ACTIONS(SHIFT_EXTRA()),
|
||||
[sym__expression] = 58,
|
||||
[sym_sum] = 32,
|
||||
[sym_difference] = 32,
|
||||
[sym_product] = 32,
|
||||
[sym_quotient] = 32,
|
||||
[sym_exponent] = 32,
|
||||
[sym_group] = 32,
|
||||
[anon_sym_LPAREN] = 36,
|
||||
[sym_number] = 32,
|
||||
[sym_variable] = 32,
|
||||
[sym_comment] = 14,
|
||||
},
|
||||
[13] = {
|
||||
[sym__expression] = ACTIONS(SHIFT(20, 0)),
|
||||
[sym_sum] = ACTIONS(SHIFT(6, 0)),
|
||||
[sym_difference] = ACTIONS(SHIFT(6, 0)),
|
||||
[sym_product] = ACTIONS(SHIFT(6, 0)),
|
||||
[sym_quotient] = ACTIONS(SHIFT(6, 0)),
|
||||
[sym_exponent] = ACTIONS(SHIFT(6, 0)),
|
||||
[sym_group] = ACTIONS(SHIFT(6, 0)),
|
||||
[anon_sym_LPAREN] = ACTIONS(SHIFT(8, 0)),
|
||||
[sym_number] = ACTIONS(SHIFT(6, 0)),
|
||||
[sym_variable] = ACTIONS(SHIFT(6, 0)),
|
||||
[sym_comment] = ACTIONS(SHIFT_EXTRA()),
|
||||
[sym__expression] = 60,
|
||||
[sym_sum] = 32,
|
||||
[sym_difference] = 32,
|
||||
[sym_product] = 32,
|
||||
[sym_quotient] = 32,
|
||||
[sym_exponent] = 32,
|
||||
[sym_group] = 32,
|
||||
[anon_sym_LPAREN] = 36,
|
||||
[sym_number] = 32,
|
||||
[sym_variable] = 32,
|
||||
[sym_comment] = 14,
|
||||
},
|
||||
[14] = {
|
||||
[sym__expression] = ACTIONS(SHIFT(19, 0)),
|
||||
[sym_sum] = ACTIONS(SHIFT(6, 0)),
|
||||
[sym_difference] = ACTIONS(SHIFT(6, 0)),
|
||||
[sym_product] = ACTIONS(SHIFT(6, 0)),
|
||||
[sym_quotient] = ACTIONS(SHIFT(6, 0)),
|
||||
[sym_exponent] = ACTIONS(SHIFT(6, 0)),
|
||||
[sym_group] = ACTIONS(SHIFT(6, 0)),
|
||||
[anon_sym_LPAREN] = ACTIONS(SHIFT(8, 0)),
|
||||
[sym_number] = ACTIONS(SHIFT(6, 0)),
|
||||
[sym_variable] = ACTIONS(SHIFT(6, 0)),
|
||||
[sym_comment] = ACTIONS(SHIFT_EXTRA()),
|
||||
[sym__expression] = 62,
|
||||
[sym_sum] = 32,
|
||||
[sym_difference] = 32,
|
||||
[sym_product] = 32,
|
||||
[sym_quotient] = 32,
|
||||
[sym_exponent] = 32,
|
||||
[sym_group] = 32,
|
||||
[anon_sym_LPAREN] = 36,
|
||||
[sym_number] = 32,
|
||||
[sym_variable] = 32,
|
||||
[sym_comment] = 14,
|
||||
},
|
||||
[15] = {
|
||||
[sym__expression] = ACTIONS(SHIFT(18, 0)),
|
||||
[sym_sum] = ACTIONS(SHIFT(6, 0)),
|
||||
[sym_difference] = ACTIONS(SHIFT(6, 0)),
|
||||
[sym_product] = ACTIONS(SHIFT(6, 0)),
|
||||
[sym_quotient] = ACTIONS(SHIFT(6, 0)),
|
||||
[sym_exponent] = ACTIONS(SHIFT(6, 0)),
|
||||
[sym_group] = ACTIONS(SHIFT(6, 0)),
|
||||
[anon_sym_LPAREN] = ACTIONS(SHIFT(8, 0)),
|
||||
[sym_number] = ACTIONS(SHIFT(6, 0)),
|
||||
[sym_variable] = ACTIONS(SHIFT(6, 0)),
|
||||
[sym_comment] = ACTIONS(SHIFT_EXTRA()),
|
||||
[sym__expression] = 64,
|
||||
[sym_sum] = 32,
|
||||
[sym_difference] = 32,
|
||||
[sym_product] = 32,
|
||||
[sym_quotient] = 32,
|
||||
[sym_exponent] = 32,
|
||||
[sym_group] = 32,
|
||||
[anon_sym_LPAREN] = 36,
|
||||
[sym_number] = 32,
|
||||
[sym_variable] = 32,
|
||||
[sym_comment] = 14,
|
||||
},
|
||||
[16] = {
|
||||
[sym__expression] = ACTIONS(SHIFT(17, 0)),
|
||||
[sym_sum] = ACTIONS(SHIFT(6, 0)),
|
||||
[sym_difference] = ACTIONS(SHIFT(6, 0)),
|
||||
[sym_product] = ACTIONS(SHIFT(6, 0)),
|
||||
[sym_quotient] = ACTIONS(SHIFT(6, 0)),
|
||||
[sym_exponent] = ACTIONS(SHIFT(6, 0)),
|
||||
[sym_group] = ACTIONS(SHIFT(6, 0)),
|
||||
[anon_sym_LPAREN] = ACTIONS(SHIFT(8, 0)),
|
||||
[sym_number] = ACTIONS(SHIFT(6, 0)),
|
||||
[sym_variable] = ACTIONS(SHIFT(6, 0)),
|
||||
[sym_comment] = ACTIONS(SHIFT_EXTRA()),
|
||||
[sym__expression] = 66,
|
||||
[sym_sum] = 32,
|
||||
[sym_difference] = 32,
|
||||
[sym_product] = 32,
|
||||
[sym_quotient] = 32,
|
||||
[sym_exponent] = 32,
|
||||
[sym_group] = 32,
|
||||
[anon_sym_LPAREN] = 36,
|
||||
[sym_number] = 32,
|
||||
[sym_variable] = 32,
|
||||
[sym_comment] = 14,
|
||||
},
|
||||
[17] = {
|
||||
[anon_sym_PLUS] = ACTIONS(REDUCE(sym_exponent, 3, 0)),
|
||||
[anon_sym_DASH] = ACTIONS(REDUCE(sym_exponent, 3, 0)),
|
||||
[anon_sym_STAR] = ACTIONS(REDUCE(sym_exponent, 3, 0)),
|
||||
[anon_sym_SLASH] = ACTIONS(REDUCE(sym_exponent, 3, 0)),
|
||||
[anon_sym_CARET] = ACTIONS(REDUCE(sym_exponent, 3, 0)),
|
||||
[anon_sym_RPAREN] = ACTIONS(REDUCE(sym_exponent, 3, 0)),
|
||||
[sym_comment] = ACTIONS(SHIFT_EXTRA()),
|
||||
[anon_sym_PLUS] = 68,
|
||||
[anon_sym_DASH] = 68,
|
||||
[anon_sym_STAR] = 68,
|
||||
[anon_sym_SLASH] = 68,
|
||||
[anon_sym_CARET] = 68,
|
||||
[anon_sym_RPAREN] = 68,
|
||||
[sym_comment] = 14,
|
||||
},
|
||||
[18] = {
|
||||
[anon_sym_PLUS] = ACTIONS(REDUCE(sym_quotient, 3, FRAGILE)),
|
||||
[anon_sym_DASH] = ACTIONS(REDUCE(sym_quotient, 3, FRAGILE)),
|
||||
[anon_sym_STAR] = ACTIONS(REDUCE(sym_quotient, 3, FRAGILE)),
|
||||
[anon_sym_SLASH] = ACTIONS(REDUCE(sym_quotient, 3, FRAGILE)),
|
||||
[anon_sym_CARET] = ACTIONS(SHIFT(16, 0)),
|
||||
[anon_sym_RPAREN] = ACTIONS(REDUCE(sym_quotient, 3, FRAGILE)),
|
||||
[sym_comment] = ACTIONS(SHIFT_EXTRA()),
|
||||
[anon_sym_PLUS] = 70,
|
||||
[anon_sym_DASH] = 70,
|
||||
[anon_sym_STAR] = 70,
|
||||
[anon_sym_SLASH] = 70,
|
||||
[anon_sym_CARET] = 46,
|
||||
[anon_sym_RPAREN] = 70,
|
||||
[sym_comment] = 14,
|
||||
},
|
||||
[19] = {
|
||||
[anon_sym_PLUS] = ACTIONS(REDUCE(sym_product, 3, FRAGILE)),
|
||||
[anon_sym_DASH] = ACTIONS(REDUCE(sym_product, 3, FRAGILE)),
|
||||
[anon_sym_STAR] = ACTIONS(REDUCE(sym_product, 3, FRAGILE)),
|
||||
[anon_sym_SLASH] = ACTIONS(REDUCE(sym_product, 3, FRAGILE)),
|
||||
[anon_sym_CARET] = ACTIONS(SHIFT(16, 0)),
|
||||
[anon_sym_RPAREN] = ACTIONS(REDUCE(sym_product, 3, FRAGILE)),
|
||||
[sym_comment] = ACTIONS(SHIFT_EXTRA()),
|
||||
[anon_sym_PLUS] = 72,
|
||||
[anon_sym_DASH] = 72,
|
||||
[anon_sym_STAR] = 72,
|
||||
[anon_sym_SLASH] = 72,
|
||||
[anon_sym_CARET] = 46,
|
||||
[anon_sym_RPAREN] = 72,
|
||||
[sym_comment] = 14,
|
||||
},
|
||||
[20] = {
|
||||
[anon_sym_PLUS] = ACTIONS(REDUCE(sym_difference, 3, FRAGILE)),
|
||||
[anon_sym_DASH] = ACTIONS(REDUCE(sym_difference, 3, FRAGILE)),
|
||||
[anon_sym_STAR] = ACTIONS(SHIFT(14, 0)),
|
||||
[anon_sym_SLASH] = ACTIONS(SHIFT(15, 0)),
|
||||
[anon_sym_CARET] = ACTIONS(SHIFT(16, 0)),
|
||||
[anon_sym_RPAREN] = ACTIONS(REDUCE(sym_difference, 3, FRAGILE)),
|
||||
[sym_comment] = ACTIONS(SHIFT_EXTRA()),
|
||||
[anon_sym_PLUS] = 74,
|
||||
[anon_sym_DASH] = 74,
|
||||
[anon_sym_STAR] = 42,
|
||||
[anon_sym_SLASH] = 44,
|
||||
[anon_sym_CARET] = 46,
|
||||
[anon_sym_RPAREN] = 74,
|
||||
[sym_comment] = 14,
|
||||
},
|
||||
[21] = {
|
||||
[anon_sym_PLUS] = ACTIONS(REDUCE(sym_sum, 3, FRAGILE)),
|
||||
[anon_sym_DASH] = ACTIONS(REDUCE(sym_sum, 3, FRAGILE)),
|
||||
[anon_sym_STAR] = ACTIONS(SHIFT(14, 0)),
|
||||
[anon_sym_SLASH] = ACTIONS(SHIFT(15, 0)),
|
||||
[anon_sym_CARET] = ACTIONS(SHIFT(16, 0)),
|
||||
[anon_sym_RPAREN] = ACTIONS(REDUCE(sym_sum, 3, FRAGILE)),
|
||||
[sym_comment] = ACTIONS(SHIFT_EXTRA()),
|
||||
[anon_sym_PLUS] = 76,
|
||||
[anon_sym_DASH] = 76,
|
||||
[anon_sym_STAR] = 42,
|
||||
[anon_sym_SLASH] = 44,
|
||||
[anon_sym_CARET] = 46,
|
||||
[anon_sym_RPAREN] = 76,
|
||||
[sym_comment] = 14,
|
||||
},
|
||||
[22] = {
|
||||
[ts_builtin_sym_end] = ACTIONS(REDUCE(sym_group, 3, 0)),
|
||||
[anon_sym_PLUS] = ACTIONS(REDUCE(sym_group, 3, 0)),
|
||||
[anon_sym_DASH] = ACTIONS(REDUCE(sym_group, 3, 0)),
|
||||
[anon_sym_STAR] = ACTIONS(REDUCE(sym_group, 3, 0)),
|
||||
[anon_sym_SLASH] = ACTIONS(REDUCE(sym_group, 3, 0)),
|
||||
[anon_sym_CARET] = ACTIONS(REDUCE(sym_group, 3, 0)),
|
||||
[sym_comment] = ACTIONS(SHIFT_EXTRA()),
|
||||
[ts_builtin_sym_end] = 56,
|
||||
[anon_sym_PLUS] = 56,
|
||||
[anon_sym_DASH] = 56,
|
||||
[anon_sym_STAR] = 56,
|
||||
[anon_sym_SLASH] = 56,
|
||||
[anon_sym_CARET] = 56,
|
||||
[sym_comment] = 14,
|
||||
},
|
||||
[23] = {
|
||||
[sym__expression] = ACTIONS(SHIFT(32, 0)),
|
||||
[sym_sum] = ACTIONS(SHIFT(3, 0)),
|
||||
[sym_difference] = ACTIONS(SHIFT(3, 0)),
|
||||
[sym_product] = ACTIONS(SHIFT(3, 0)),
|
||||
[sym_quotient] = ACTIONS(SHIFT(3, 0)),
|
||||
[sym_exponent] = ACTIONS(SHIFT(3, 0)),
|
||||
[sym_group] = ACTIONS(SHIFT(3, 0)),
|
||||
[anon_sym_LPAREN] = ACTIONS(SHIFT(4, 0)),
|
||||
[sym_number] = ACTIONS(SHIFT(3, 0)),
|
||||
[sym_variable] = ACTIONS(SHIFT(3, 0)),
|
||||
[sym_comment] = ACTIONS(SHIFT_EXTRA()),
|
||||
[sym__expression] = 78,
|
||||
[sym_sum] = 6,
|
||||
[sym_difference] = 6,
|
||||
[sym_product] = 6,
|
||||
[sym_quotient] = 6,
|
||||
[sym_exponent] = 6,
|
||||
[sym_group] = 6,
|
||||
[anon_sym_LPAREN] = 8,
|
||||
[sym_number] = 6,
|
||||
[sym_variable] = 6,
|
||||
[sym_comment] = 14,
|
||||
},
|
||||
[24] = {
|
||||
[sym__expression] = ACTIONS(SHIFT(31, 0)),
|
||||
[sym_sum] = ACTIONS(SHIFT(3, 0)),
|
||||
[sym_difference] = ACTIONS(SHIFT(3, 0)),
|
||||
[sym_product] = ACTIONS(SHIFT(3, 0)),
|
||||
[sym_quotient] = ACTIONS(SHIFT(3, 0)),
|
||||
[sym_exponent] = ACTIONS(SHIFT(3, 0)),
|
||||
[sym_group] = ACTIONS(SHIFT(3, 0)),
|
||||
[anon_sym_LPAREN] = ACTIONS(SHIFT(4, 0)),
|
||||
[sym_number] = ACTIONS(SHIFT(3, 0)),
|
||||
[sym_variable] = ACTIONS(SHIFT(3, 0)),
|
||||
[sym_comment] = ACTIONS(SHIFT_EXTRA()),
|
||||
[sym__expression] = 80,
|
||||
[sym_sum] = 6,
|
||||
[sym_difference] = 6,
|
||||
[sym_product] = 6,
|
||||
[sym_quotient] = 6,
|
||||
[sym_exponent] = 6,
|
||||
[sym_group] = 6,
|
||||
[anon_sym_LPAREN] = 8,
|
||||
[sym_number] = 6,
|
||||
[sym_variable] = 6,
|
||||
[sym_comment] = 14,
|
||||
},
|
||||
[25] = {
|
||||
[sym__expression] = ACTIONS(SHIFT(30, 0)),
|
||||
[sym_sum] = ACTIONS(SHIFT(3, 0)),
|
||||
[sym_difference] = ACTIONS(SHIFT(3, 0)),
|
||||
[sym_product] = ACTIONS(SHIFT(3, 0)),
|
||||
[sym_quotient] = ACTIONS(SHIFT(3, 0)),
|
||||
[sym_exponent] = ACTIONS(SHIFT(3, 0)),
|
||||
[sym_group] = ACTIONS(SHIFT(3, 0)),
|
||||
[anon_sym_LPAREN] = ACTIONS(SHIFT(4, 0)),
|
||||
[sym_number] = ACTIONS(SHIFT(3, 0)),
|
||||
[sym_variable] = ACTIONS(SHIFT(3, 0)),
|
||||
[sym_comment] = ACTIONS(SHIFT_EXTRA()),
|
||||
[sym__expression] = 82,
|
||||
[sym_sum] = 6,
|
||||
[sym_difference] = 6,
|
||||
[sym_product] = 6,
|
||||
[sym_quotient] = 6,
|
||||
[sym_exponent] = 6,
|
||||
[sym_group] = 6,
|
||||
[anon_sym_LPAREN] = 8,
|
||||
[sym_number] = 6,
|
||||
[sym_variable] = 6,
|
||||
[sym_comment] = 14,
|
||||
},
|
||||
[26] = {
|
||||
[sym__expression] = ACTIONS(SHIFT(29, 0)),
|
||||
[sym_sum] = ACTIONS(SHIFT(3, 0)),
|
||||
[sym_difference] = ACTIONS(SHIFT(3, 0)),
|
||||
[sym_product] = ACTIONS(SHIFT(3, 0)),
|
||||
[sym_quotient] = ACTIONS(SHIFT(3, 0)),
|
||||
[sym_exponent] = ACTIONS(SHIFT(3, 0)),
|
||||
[sym_group] = ACTIONS(SHIFT(3, 0)),
|
||||
[anon_sym_LPAREN] = ACTIONS(SHIFT(4, 0)),
|
||||
[sym_number] = ACTIONS(SHIFT(3, 0)),
|
||||
[sym_variable] = ACTIONS(SHIFT(3, 0)),
|
||||
[sym_comment] = ACTIONS(SHIFT_EXTRA()),
|
||||
[sym__expression] = 84,
|
||||
[sym_sum] = 6,
|
||||
[sym_difference] = 6,
|
||||
[sym_product] = 6,
|
||||
[sym_quotient] = 6,
|
||||
[sym_exponent] = 6,
|
||||
[sym_group] = 6,
|
||||
[anon_sym_LPAREN] = 8,
|
||||
[sym_number] = 6,
|
||||
[sym_variable] = 6,
|
||||
[sym_comment] = 14,
|
||||
},
|
||||
[27] = {
|
||||
[sym__expression] = ACTIONS(SHIFT(28, 0)),
|
||||
[sym_sum] = ACTIONS(SHIFT(3, 0)),
|
||||
[sym_difference] = ACTIONS(SHIFT(3, 0)),
|
||||
[sym_product] = ACTIONS(SHIFT(3, 0)),
|
||||
[sym_quotient] = ACTIONS(SHIFT(3, 0)),
|
||||
[sym_exponent] = ACTIONS(SHIFT(3, 0)),
|
||||
[sym_group] = ACTIONS(SHIFT(3, 0)),
|
||||
[anon_sym_LPAREN] = ACTIONS(SHIFT(4, 0)),
|
||||
[sym_number] = ACTIONS(SHIFT(3, 0)),
|
||||
[sym_variable] = ACTIONS(SHIFT(3, 0)),
|
||||
[sym_comment] = ACTIONS(SHIFT_EXTRA()),
|
||||
[sym__expression] = 86,
|
||||
[sym_sum] = 6,
|
||||
[sym_difference] = 6,
|
||||
[sym_product] = 6,
|
||||
[sym_quotient] = 6,
|
||||
[sym_exponent] = 6,
|
||||
[sym_group] = 6,
|
||||
[anon_sym_LPAREN] = 8,
|
||||
[sym_number] = 6,
|
||||
[sym_variable] = 6,
|
||||
[sym_comment] = 14,
|
||||
},
|
||||
[28] = {
|
||||
[ts_builtin_sym_end] = ACTIONS(REDUCE(sym_exponent, 3, 0)),
|
||||
[anon_sym_PLUS] = ACTIONS(REDUCE(sym_exponent, 3, 0)),
|
||||
[anon_sym_DASH] = ACTIONS(REDUCE(sym_exponent, 3, 0)),
|
||||
[anon_sym_STAR] = ACTIONS(REDUCE(sym_exponent, 3, 0)),
|
||||
[anon_sym_SLASH] = ACTIONS(REDUCE(sym_exponent, 3, 0)),
|
||||
[anon_sym_CARET] = ACTIONS(REDUCE(sym_exponent, 3, 0)),
|
||||
[sym_comment] = ACTIONS(SHIFT_EXTRA()),
|
||||
[ts_builtin_sym_end] = 68,
|
||||
[anon_sym_PLUS] = 68,
|
||||
[anon_sym_DASH] = 68,
|
||||
[anon_sym_STAR] = 68,
|
||||
[anon_sym_SLASH] = 68,
|
||||
[anon_sym_CARET] = 68,
|
||||
[sym_comment] = 14,
|
||||
},
|
||||
[29] = {
|
||||
[ts_builtin_sym_end] = ACTIONS(REDUCE(sym_quotient, 3, FRAGILE)),
|
||||
[anon_sym_PLUS] = ACTIONS(REDUCE(sym_quotient, 3, FRAGILE)),
|
||||
[anon_sym_DASH] = ACTIONS(REDUCE(sym_quotient, 3, FRAGILE)),
|
||||
[anon_sym_STAR] = ACTIONS(REDUCE(sym_quotient, 3, FRAGILE)),
|
||||
[anon_sym_SLASH] = ACTIONS(REDUCE(sym_quotient, 3, FRAGILE)),
|
||||
[anon_sym_CARET] = ACTIONS(SHIFT(27, 0)),
|
||||
[sym_comment] = ACTIONS(SHIFT_EXTRA()),
|
||||
[ts_builtin_sym_end] = 70,
|
||||
[anon_sym_PLUS] = 70,
|
||||
[anon_sym_DASH] = 70,
|
||||
[anon_sym_STAR] = 70,
|
||||
[anon_sym_SLASH] = 70,
|
||||
[anon_sym_CARET] = 26,
|
||||
[sym_comment] = 14,
|
||||
},
|
||||
[30] = {
|
||||
[ts_builtin_sym_end] = ACTIONS(REDUCE(sym_product, 3, FRAGILE)),
|
||||
[anon_sym_PLUS] = ACTIONS(REDUCE(sym_product, 3, FRAGILE)),
|
||||
[anon_sym_DASH] = ACTIONS(REDUCE(sym_product, 3, FRAGILE)),
|
||||
[anon_sym_STAR] = ACTIONS(REDUCE(sym_product, 3, FRAGILE)),
|
||||
[anon_sym_SLASH] = ACTIONS(REDUCE(sym_product, 3, FRAGILE)),
|
||||
[anon_sym_CARET] = ACTIONS(SHIFT(27, 0)),
|
||||
[sym_comment] = ACTIONS(SHIFT_EXTRA()),
|
||||
[ts_builtin_sym_end] = 72,
|
||||
[anon_sym_PLUS] = 72,
|
||||
[anon_sym_DASH] = 72,
|
||||
[anon_sym_STAR] = 72,
|
||||
[anon_sym_SLASH] = 72,
|
||||
[anon_sym_CARET] = 26,
|
||||
[sym_comment] = 14,
|
||||
},
|
||||
[31] = {
|
||||
[ts_builtin_sym_end] = ACTIONS(REDUCE(sym_difference, 3, FRAGILE)),
|
||||
[anon_sym_PLUS] = ACTIONS(REDUCE(sym_difference, 3, FRAGILE)),
|
||||
[anon_sym_DASH] = ACTIONS(REDUCE(sym_difference, 3, FRAGILE)),
|
||||
[anon_sym_STAR] = ACTIONS(SHIFT(25, 0)),
|
||||
[anon_sym_SLASH] = ACTIONS(SHIFT(26, 0)),
|
||||
[anon_sym_CARET] = ACTIONS(SHIFT(27, 0)),
|
||||
[sym_comment] = ACTIONS(SHIFT_EXTRA()),
|
||||
[ts_builtin_sym_end] = 74,
|
||||
[anon_sym_PLUS] = 74,
|
||||
[anon_sym_DASH] = 74,
|
||||
[anon_sym_STAR] = 22,
|
||||
[anon_sym_SLASH] = 24,
|
||||
[anon_sym_CARET] = 26,
|
||||
[sym_comment] = 14,
|
||||
},
|
||||
[32] = {
|
||||
[ts_builtin_sym_end] = ACTIONS(REDUCE(sym_sum, 3, FRAGILE)),
|
||||
[anon_sym_PLUS] = ACTIONS(REDUCE(sym_sum, 3, FRAGILE)),
|
||||
[anon_sym_DASH] = ACTIONS(REDUCE(sym_sum, 3, FRAGILE)),
|
||||
[anon_sym_STAR] = ACTIONS(SHIFT(25, 0)),
|
||||
[anon_sym_SLASH] = ACTIONS(SHIFT(26, 0)),
|
||||
[anon_sym_CARET] = ACTIONS(SHIFT(27, 0)),
|
||||
[sym_comment] = ACTIONS(SHIFT_EXTRA()),
|
||||
[ts_builtin_sym_end] = 76,
|
||||
[anon_sym_PLUS] = 76,
|
||||
[anon_sym_DASH] = 76,
|
||||
[anon_sym_STAR] = 22,
|
||||
[anon_sym_SLASH] = 24,
|
||||
[anon_sym_CARET] = 26,
|
||||
[sym_comment] = 14,
|
||||
},
|
||||
};
|
||||
|
||||
static TSParseActionEntry ts_parse_actions[] = {
|
||||
[0] = {.count = 1}, ERROR(),
|
||||
[2] = {.count = 1}, SHIFT(1, 0),
|
||||
[4] = {.count = 1}, SHIFT(2, 0),
|
||||
[6] = {.count = 1}, SHIFT(3, 0),
|
||||
[8] = {.count = 1}, SHIFT(4, 0),
|
||||
[10] = {.count = 1}, SHIFT_EXTRA(),
|
||||
[12] = {.count = 1}, ACCEPT_INPUT(),
|
||||
[14] = {.count = 1}, SHIFT_EXTRA(),
|
||||
[16] = {.count = 1}, REDUCE(sym_program, 1, 0),
|
||||
[18] = {.count = 1}, SHIFT(23, 0),
|
||||
[20] = {.count = 1}, SHIFT(24, 0),
|
||||
[22] = {.count = 1}, SHIFT(25, 0),
|
||||
[24] = {.count = 1}, SHIFT(26, 0),
|
||||
[26] = {.count = 1}, SHIFT(27, 0),
|
||||
[28] = {.count = 1}, REDUCE(sym__expression, 1, 0),
|
||||
[30] = {.count = 1}, SHIFT(5, 0),
|
||||
[32] = {.count = 1}, SHIFT(6, 0),
|
||||
[34] = {.count = 1}, SHIFT(7, 0),
|
||||
[36] = {.count = 1}, SHIFT(8, 0),
|
||||
[38] = {.count = 1}, SHIFT(12, 0),
|
||||
[40] = {.count = 1}, SHIFT(13, 0),
|
||||
[42] = {.count = 1}, SHIFT(14, 0),
|
||||
[44] = {.count = 1}, SHIFT(15, 0),
|
||||
[46] = {.count = 1}, SHIFT(16, 0),
|
||||
[48] = {.count = 1}, SHIFT(22, 0),
|
||||
[50] = {.count = 1}, SHIFT(9, 0),
|
||||
[52] = {.count = 1}, SHIFT(10, 0),
|
||||
[54] = {.count = 1}, SHIFT(11, 0),
|
||||
[56] = {.count = 1}, REDUCE(sym_group, 3, 0),
|
||||
[58] = {.count = 1}, SHIFT(21, 0),
|
||||
[60] = {.count = 1}, SHIFT(20, 0),
|
||||
[62] = {.count = 1}, SHIFT(19, 0),
|
||||
[64] = {.count = 1}, SHIFT(18, 0),
|
||||
[66] = {.count = 1}, SHIFT(17, 0),
|
||||
[68] = {.count = 1}, REDUCE(sym_exponent, 3, 0),
|
||||
[70] = {.count = 1}, REDUCE(sym_quotient, 3, FRAGILE),
|
||||
[72] = {.count = 1}, REDUCE(sym_product, 3, FRAGILE),
|
||||
[74] = {.count = 1}, REDUCE(sym_difference, 3, FRAGILE),
|
||||
[76] = {.count = 1}, REDUCE(sym_sum, 3, FRAGILE),
|
||||
[78] = {.count = 1}, SHIFT(32, 0),
|
||||
[80] = {.count = 1}, SHIFT(31, 0),
|
||||
[82] = {.count = 1}, SHIFT(30, 0),
|
||||
[84] = {.count = 1}, SHIFT(29, 0),
|
||||
[86] = {.count = 1}, SHIFT(28, 0),
|
||||
};
|
||||
|
||||
#pragma GCC diagnostic pop
|
||||
|
||||
EXPORT_LANGUAGE(ts_language_arithmetic);
|
||||
|
|
|
|||
9812
spec/fixtures/parsers/c.c
vendored
9812
spec/fixtures/parsers/c.c
vendored
File diff suppressed because it is too large
Load diff
7237
spec/fixtures/parsers/cpp.c
vendored
7237
spec/fixtures/parsers/cpp.c
vendored
File diff suppressed because it is too large
Load diff
9573
spec/fixtures/parsers/golang.c
vendored
9573
spec/fixtures/parsers/golang.c
vendored
File diff suppressed because it is too large
Load diff
98377
spec/fixtures/parsers/javascript.c
vendored
98377
spec/fixtures/parsers/javascript.c
vendored
File diff suppressed because it is too large
Load diff
538
spec/fixtures/parsers/json.c
vendored
538
spec/fixtures/parsers/json.c
vendored
|
|
@ -449,371 +449,459 @@ static TSStateId ts_lex_states[STATE_COUNT] = {
|
|||
#pragma GCC diagnostic push
|
||||
#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
|
||||
|
||||
static const TSParseAction *ts_parse_actions[STATE_COUNT][SYMBOL_COUNT] = {
|
||||
static unsigned short ts_parse_table[STATE_COUNT][SYMBOL_COUNT] = {
|
||||
[0] = {
|
||||
[sym__value] = ACTIONS(SHIFT(1, 0)),
|
||||
[sym_object] = ACTIONS(SHIFT(2, 0)),
|
||||
[sym_array] = ACTIONS(SHIFT(2, 0)),
|
||||
[anon_sym_LBRACE] = ACTIONS(SHIFT(3, 0)),
|
||||
[anon_sym_LBRACK] = ACTIONS(SHIFT(4, 0)),
|
||||
[sym_string] = ACTIONS(SHIFT(2, 0)),
|
||||
[sym_number] = ACTIONS(SHIFT(2, 0)),
|
||||
[sym_null] = ACTIONS(SHIFT(2, 0)),
|
||||
[sym_true] = ACTIONS(SHIFT(2, 0)),
|
||||
[sym_false] = ACTIONS(SHIFT(2, 0)),
|
||||
[sym__value] = 2,
|
||||
[sym_object] = 4,
|
||||
[sym_array] = 4,
|
||||
[anon_sym_LBRACE] = 6,
|
||||
[anon_sym_LBRACK] = 8,
|
||||
[sym_string] = 4,
|
||||
[sym_number] = 4,
|
||||
[sym_null] = 4,
|
||||
[sym_true] = 4,
|
||||
[sym_false] = 4,
|
||||
},
|
||||
[1] = {
|
||||
[ts_builtin_sym_end] = ACTIONS(ACCEPT_INPUT()),
|
||||
[ts_builtin_sym_end] = 10,
|
||||
},
|
||||
[2] = {
|
||||
[ts_builtin_sym_end] = ACTIONS(REDUCE(sym__value, 1, 0)),
|
||||
[ts_builtin_sym_end] = 12,
|
||||
},
|
||||
[3] = {
|
||||
[ts_builtin_sym_error] = ACTIONS(SHIFT(58, 0)),
|
||||
[anon_sym_RBRACE] = ACTIONS(SHIFT(59, 0)),
|
||||
[sym_string] = ACTIONS(SHIFT(60, 0)),
|
||||
[ts_builtin_sym_error] = 14,
|
||||
[anon_sym_RBRACE] = 16,
|
||||
[sym_string] = 18,
|
||||
},
|
||||
[4] = {
|
||||
[sym__value] = ACTIONS(SHIFT(5, 0)),
|
||||
[sym_object] = ACTIONS(SHIFT(6, 0)),
|
||||
[sym_array] = ACTIONS(SHIFT(6, 0)),
|
||||
[ts_builtin_sym_error] = ACTIONS(SHIFT(5, 0)),
|
||||
[anon_sym_LBRACE] = ACTIONS(SHIFT(7, 0)),
|
||||
[anon_sym_LBRACK] = ACTIONS(SHIFT(8, 0)),
|
||||
[anon_sym_RBRACK] = ACTIONS(SHIFT(9, 0)),
|
||||
[sym_string] = ACTIONS(SHIFT(6, 0)),
|
||||
[sym_number] = ACTIONS(SHIFT(6, 0)),
|
||||
[sym_null] = ACTIONS(SHIFT(6, 0)),
|
||||
[sym_true] = ACTIONS(SHIFT(6, 0)),
|
||||
[sym_false] = ACTIONS(SHIFT(6, 0)),
|
||||
[sym__value] = 20,
|
||||
[sym_object] = 22,
|
||||
[sym_array] = 22,
|
||||
[ts_builtin_sym_error] = 20,
|
||||
[anon_sym_LBRACE] = 24,
|
||||
[anon_sym_LBRACK] = 26,
|
||||
[anon_sym_RBRACK] = 28,
|
||||
[sym_string] = 22,
|
||||
[sym_number] = 22,
|
||||
[sym_null] = 22,
|
||||
[sym_true] = 22,
|
||||
[sym_false] = 22,
|
||||
},
|
||||
[5] = {
|
||||
[aux_sym_array_repeat1] = ACTIONS(SHIFT(55, 0)),
|
||||
[anon_sym_COMMA] = ACTIONS(SHIFT(13, 0)),
|
||||
[anon_sym_RBRACK] = ACTIONS(SHIFT(56, 0)),
|
||||
[aux_sym_array_repeat1] = 30,
|
||||
[anon_sym_COMMA] = 32,
|
||||
[anon_sym_RBRACK] = 34,
|
||||
},
|
||||
[6] = {
|
||||
[aux_sym_array_repeat1] = ACTIONS(REDUCE(sym__value, 1, 0)),
|
||||
[anon_sym_COMMA] = ACTIONS(REDUCE(sym__value, 1, 0)),
|
||||
[anon_sym_RBRACK] = ACTIONS(REDUCE(sym__value, 1, 0)),
|
||||
[aux_sym_array_repeat1] = 12,
|
||||
[anon_sym_COMMA] = 12,
|
||||
[anon_sym_RBRACK] = 12,
|
||||
},
|
||||
[7] = {
|
||||
[ts_builtin_sym_error] = ACTIONS(SHIFT(18, 0)),
|
||||
[anon_sym_RBRACE] = ACTIONS(SHIFT(19, 0)),
|
||||
[sym_string] = ACTIONS(SHIFT(20, 0)),
|
||||
[ts_builtin_sym_error] = 36,
|
||||
[anon_sym_RBRACE] = 38,
|
||||
[sym_string] = 40,
|
||||
},
|
||||
[8] = {
|
||||
[sym__value] = ACTIONS(SHIFT(10, 0)),
|
||||
[sym_object] = ACTIONS(SHIFT(6, 0)),
|
||||
[sym_array] = ACTIONS(SHIFT(6, 0)),
|
||||
[ts_builtin_sym_error] = ACTIONS(SHIFT(10, 0)),
|
||||
[anon_sym_LBRACE] = ACTIONS(SHIFT(7, 0)),
|
||||
[anon_sym_LBRACK] = ACTIONS(SHIFT(8, 0)),
|
||||
[anon_sym_RBRACK] = ACTIONS(SHIFT(11, 0)),
|
||||
[sym_string] = ACTIONS(SHIFT(6, 0)),
|
||||
[sym_number] = ACTIONS(SHIFT(6, 0)),
|
||||
[sym_null] = ACTIONS(SHIFT(6, 0)),
|
||||
[sym_true] = ACTIONS(SHIFT(6, 0)),
|
||||
[sym_false] = ACTIONS(SHIFT(6, 0)),
|
||||
[sym__value] = 42,
|
||||
[sym_object] = 22,
|
||||
[sym_array] = 22,
|
||||
[ts_builtin_sym_error] = 42,
|
||||
[anon_sym_LBRACE] = 24,
|
||||
[anon_sym_LBRACK] = 26,
|
||||
[anon_sym_RBRACK] = 44,
|
||||
[sym_string] = 22,
|
||||
[sym_number] = 22,
|
||||
[sym_null] = 22,
|
||||
[sym_true] = 22,
|
||||
[sym_false] = 22,
|
||||
},
|
||||
[9] = {
|
||||
[ts_builtin_sym_end] = ACTIONS(REDUCE(sym_array, 2, 0)),
|
||||
[ts_builtin_sym_end] = 46,
|
||||
},
|
||||
[10] = {
|
||||
[aux_sym_array_repeat1] = ACTIONS(SHIFT(12, 0)),
|
||||
[anon_sym_COMMA] = ACTIONS(SHIFT(13, 0)),
|
||||
[anon_sym_RBRACK] = ACTIONS(SHIFT(14, 0)),
|
||||
[aux_sym_array_repeat1] = 48,
|
||||
[anon_sym_COMMA] = 32,
|
||||
[anon_sym_RBRACK] = 50,
|
||||
},
|
||||
[11] = {
|
||||
[aux_sym_array_repeat1] = ACTIONS(REDUCE(sym_array, 2, 0)),
|
||||
[anon_sym_COMMA] = ACTIONS(REDUCE(sym_array, 2, 0)),
|
||||
[anon_sym_RBRACK] = ACTIONS(REDUCE(sym_array, 2, 0)),
|
||||
[aux_sym_array_repeat1] = 46,
|
||||
[anon_sym_COMMA] = 46,
|
||||
[anon_sym_RBRACK] = 46,
|
||||
},
|
||||
[12] = {
|
||||
[anon_sym_RBRACK] = ACTIONS(SHIFT(17, 0)),
|
||||
[anon_sym_RBRACK] = 52,
|
||||
},
|
||||
[13] = {
|
||||
[sym__value] = ACTIONS(SHIFT(15, 0)),
|
||||
[sym_object] = ACTIONS(SHIFT(6, 0)),
|
||||
[sym_array] = ACTIONS(SHIFT(6, 0)),
|
||||
[ts_builtin_sym_error] = ACTIONS(SHIFT(15, 0)),
|
||||
[anon_sym_LBRACE] = ACTIONS(SHIFT(7, 0)),
|
||||
[anon_sym_LBRACK] = ACTIONS(SHIFT(8, 0)),
|
||||
[sym_string] = ACTIONS(SHIFT(6, 0)),
|
||||
[sym_number] = ACTIONS(SHIFT(6, 0)),
|
||||
[sym_null] = ACTIONS(SHIFT(6, 0)),
|
||||
[sym_true] = ACTIONS(SHIFT(6, 0)),
|
||||
[sym_false] = ACTIONS(SHIFT(6, 0)),
|
||||
[sym__value] = 54,
|
||||
[sym_object] = 22,
|
||||
[sym_array] = 22,
|
||||
[ts_builtin_sym_error] = 54,
|
||||
[anon_sym_LBRACE] = 24,
|
||||
[anon_sym_LBRACK] = 26,
|
||||
[sym_string] = 22,
|
||||
[sym_number] = 22,
|
||||
[sym_null] = 22,
|
||||
[sym_true] = 22,
|
||||
[sym_false] = 22,
|
||||
},
|
||||
[14] = {
|
||||
[aux_sym_array_repeat1] = ACTIONS(REDUCE(sym_array, 3, 0)),
|
||||
[anon_sym_COMMA] = ACTIONS(REDUCE(sym_array, 3, 0)),
|
||||
[anon_sym_RBRACK] = ACTIONS(REDUCE(sym_array, 3, 0)),
|
||||
[aux_sym_array_repeat1] = 56,
|
||||
[anon_sym_COMMA] = 56,
|
||||
[anon_sym_RBRACK] = 56,
|
||||
},
|
||||
[15] = {
|
||||
[aux_sym_array_repeat1] = ACTIONS(SHIFT(16, 0)),
|
||||
[anon_sym_COMMA] = ACTIONS(SHIFT(13, 0)),
|
||||
[anon_sym_RBRACK] = ACTIONS(REDUCE(aux_sym_array_repeat1, 2, 0)),
|
||||
[aux_sym_array_repeat1] = 58,
|
||||
[anon_sym_COMMA] = 32,
|
||||
[anon_sym_RBRACK] = 60,
|
||||
},
|
||||
[16] = {
|
||||
[anon_sym_RBRACK] = ACTIONS(REDUCE(aux_sym_array_repeat1, 3, 0)),
|
||||
[anon_sym_RBRACK] = 62,
|
||||
},
|
||||
[17] = {
|
||||
[aux_sym_array_repeat1] = ACTIONS(REDUCE(sym_array, 4, 0)),
|
||||
[anon_sym_COMMA] = ACTIONS(REDUCE(sym_array, 4, 0)),
|
||||
[anon_sym_RBRACK] = ACTIONS(REDUCE(sym_array, 4, 0)),
|
||||
[aux_sym_array_repeat1] = 64,
|
||||
[anon_sym_COMMA] = 64,
|
||||
[anon_sym_RBRACK] = 64,
|
||||
},
|
||||
[18] = {
|
||||
[aux_sym_object_repeat1] = ACTIONS(SHIFT(52, 0)),
|
||||
[anon_sym_COMMA] = ACTIONS(SHIFT(37, 0)),
|
||||
[anon_sym_RBRACE] = ACTIONS(SHIFT(53, 0)),
|
||||
[aux_sym_object_repeat1] = 66,
|
||||
[anon_sym_COMMA] = 68,
|
||||
[anon_sym_RBRACE] = 70,
|
||||
},
|
||||
[19] = {
|
||||
[aux_sym_array_repeat1] = ACTIONS(REDUCE(sym_object, 2, 0)),
|
||||
[anon_sym_COMMA] = ACTIONS(REDUCE(sym_object, 2, 0)),
|
||||
[anon_sym_RBRACK] = ACTIONS(REDUCE(sym_object, 2, 0)),
|
||||
[aux_sym_array_repeat1] = 72,
|
||||
[anon_sym_COMMA] = 72,
|
||||
[anon_sym_RBRACK] = 72,
|
||||
},
|
||||
[20] = {
|
||||
[anon_sym_COLON] = ACTIONS(SHIFT(21, 0)),
|
||||
[anon_sym_COLON] = 74,
|
||||
},
|
||||
[21] = {
|
||||
[sym__value] = ACTIONS(SHIFT(22, 0)),
|
||||
[sym_object] = ACTIONS(SHIFT(23, 0)),
|
||||
[sym_array] = ACTIONS(SHIFT(23, 0)),
|
||||
[anon_sym_LBRACE] = ACTIONS(SHIFT(24, 0)),
|
||||
[anon_sym_LBRACK] = ACTIONS(SHIFT(25, 0)),
|
||||
[sym_string] = ACTIONS(SHIFT(23, 0)),
|
||||
[sym_number] = ACTIONS(SHIFT(23, 0)),
|
||||
[sym_null] = ACTIONS(SHIFT(23, 0)),
|
||||
[sym_true] = ACTIONS(SHIFT(23, 0)),
|
||||
[sym_false] = ACTIONS(SHIFT(23, 0)),
|
||||
[sym__value] = 76,
|
||||
[sym_object] = 78,
|
||||
[sym_array] = 78,
|
||||
[anon_sym_LBRACE] = 80,
|
||||
[anon_sym_LBRACK] = 82,
|
||||
[sym_string] = 78,
|
||||
[sym_number] = 78,
|
||||
[sym_null] = 78,
|
||||
[sym_true] = 78,
|
||||
[sym_false] = 78,
|
||||
},
|
||||
[22] = {
|
||||
[aux_sym_object_repeat1] = ACTIONS(SHIFT(49, 0)),
|
||||
[anon_sym_COMMA] = ACTIONS(SHIFT(37, 0)),
|
||||
[anon_sym_RBRACE] = ACTIONS(SHIFT(50, 0)),
|
||||
[aux_sym_object_repeat1] = 84,
|
||||
[anon_sym_COMMA] = 68,
|
||||
[anon_sym_RBRACE] = 86,
|
||||
},
|
||||
[23] = {
|
||||
[aux_sym_object_repeat1] = ACTIONS(REDUCE(sym__value, 1, 0)),
|
||||
[anon_sym_COMMA] = ACTIONS(REDUCE(sym__value, 1, 0)),
|
||||
[anon_sym_RBRACE] = ACTIONS(REDUCE(sym__value, 1, 0)),
|
||||
[aux_sym_object_repeat1] = 12,
|
||||
[anon_sym_COMMA] = 12,
|
||||
[anon_sym_RBRACE] = 12,
|
||||
},
|
||||
[24] = {
|
||||
[ts_builtin_sym_error] = ACTIONS(SHIFT(31, 0)),
|
||||
[anon_sym_RBRACE] = ACTIONS(SHIFT(32, 0)),
|
||||
[sym_string] = ACTIONS(SHIFT(33, 0)),
|
||||
[ts_builtin_sym_error] = 88,
|
||||
[anon_sym_RBRACE] = 90,
|
||||
[sym_string] = 92,
|
||||
},
|
||||
[25] = {
|
||||
[sym__value] = ACTIONS(SHIFT(26, 0)),
|
||||
[sym_object] = ACTIONS(SHIFT(6, 0)),
|
||||
[sym_array] = ACTIONS(SHIFT(6, 0)),
|
||||
[ts_builtin_sym_error] = ACTIONS(SHIFT(26, 0)),
|
||||
[anon_sym_LBRACE] = ACTIONS(SHIFT(7, 0)),
|
||||
[anon_sym_LBRACK] = ACTIONS(SHIFT(8, 0)),
|
||||
[anon_sym_RBRACK] = ACTIONS(SHIFT(27, 0)),
|
||||
[sym_string] = ACTIONS(SHIFT(6, 0)),
|
||||
[sym_number] = ACTIONS(SHIFT(6, 0)),
|
||||
[sym_null] = ACTIONS(SHIFT(6, 0)),
|
||||
[sym_true] = ACTIONS(SHIFT(6, 0)),
|
||||
[sym_false] = ACTIONS(SHIFT(6, 0)),
|
||||
[sym__value] = 94,
|
||||
[sym_object] = 22,
|
||||
[sym_array] = 22,
|
||||
[ts_builtin_sym_error] = 94,
|
||||
[anon_sym_LBRACE] = 24,
|
||||
[anon_sym_LBRACK] = 26,
|
||||
[anon_sym_RBRACK] = 96,
|
||||
[sym_string] = 22,
|
||||
[sym_number] = 22,
|
||||
[sym_null] = 22,
|
||||
[sym_true] = 22,
|
||||
[sym_false] = 22,
|
||||
},
|
||||
[26] = {
|
||||
[aux_sym_array_repeat1] = ACTIONS(SHIFT(28, 0)),
|
||||
[anon_sym_COMMA] = ACTIONS(SHIFT(13, 0)),
|
||||
[anon_sym_RBRACK] = ACTIONS(SHIFT(29, 0)),
|
||||
[aux_sym_array_repeat1] = 98,
|
||||
[anon_sym_COMMA] = 32,
|
||||
[anon_sym_RBRACK] = 100,
|
||||
},
|
||||
[27] = {
|
||||
[aux_sym_object_repeat1] = ACTIONS(REDUCE(sym_array, 2, 0)),
|
||||
[anon_sym_COMMA] = ACTIONS(REDUCE(sym_array, 2, 0)),
|
||||
[anon_sym_RBRACE] = ACTIONS(REDUCE(sym_array, 2, 0)),
|
||||
[aux_sym_object_repeat1] = 46,
|
||||
[anon_sym_COMMA] = 46,
|
||||
[anon_sym_RBRACE] = 46,
|
||||
},
|
||||
[28] = {
|
||||
[anon_sym_RBRACK] = ACTIONS(SHIFT(30, 0)),
|
||||
[anon_sym_RBRACK] = 102,
|
||||
},
|
||||
[29] = {
|
||||
[aux_sym_object_repeat1] = ACTIONS(REDUCE(sym_array, 3, 0)),
|
||||
[anon_sym_COMMA] = ACTIONS(REDUCE(sym_array, 3, 0)),
|
||||
[anon_sym_RBRACE] = ACTIONS(REDUCE(sym_array, 3, 0)),
|
||||
[aux_sym_object_repeat1] = 56,
|
||||
[anon_sym_COMMA] = 56,
|
||||
[anon_sym_RBRACE] = 56,
|
||||
},
|
||||
[30] = {
|
||||
[aux_sym_object_repeat1] = ACTIONS(REDUCE(sym_array, 4, 0)),
|
||||
[anon_sym_COMMA] = ACTIONS(REDUCE(sym_array, 4, 0)),
|
||||
[anon_sym_RBRACE] = ACTIONS(REDUCE(sym_array, 4, 0)),
|
||||
[aux_sym_object_repeat1] = 64,
|
||||
[anon_sym_COMMA] = 64,
|
||||
[anon_sym_RBRACE] = 64,
|
||||
},
|
||||
[31] = {
|
||||
[aux_sym_object_repeat1] = ACTIONS(SHIFT(46, 0)),
|
||||
[anon_sym_COMMA] = ACTIONS(SHIFT(37, 0)),
|
||||
[anon_sym_RBRACE] = ACTIONS(SHIFT(47, 0)),
|
||||
[aux_sym_object_repeat1] = 104,
|
||||
[anon_sym_COMMA] = 68,
|
||||
[anon_sym_RBRACE] = 106,
|
||||
},
|
||||
[32] = {
|
||||
[aux_sym_object_repeat1] = ACTIONS(REDUCE(sym_object, 2, 0)),
|
||||
[anon_sym_COMMA] = ACTIONS(REDUCE(sym_object, 2, 0)),
|
||||
[anon_sym_RBRACE] = ACTIONS(REDUCE(sym_object, 2, 0)),
|
||||
[aux_sym_object_repeat1] = 72,
|
||||
[anon_sym_COMMA] = 72,
|
||||
[anon_sym_RBRACE] = 72,
|
||||
},
|
||||
[33] = {
|
||||
[anon_sym_COLON] = ACTIONS(SHIFT(34, 0)),
|
||||
[anon_sym_COLON] = 108,
|
||||
},
|
||||
[34] = {
|
||||
[sym__value] = ACTIONS(SHIFT(35, 0)),
|
||||
[sym_object] = ACTIONS(SHIFT(23, 0)),
|
||||
[sym_array] = ACTIONS(SHIFT(23, 0)),
|
||||
[anon_sym_LBRACE] = ACTIONS(SHIFT(24, 0)),
|
||||
[anon_sym_LBRACK] = ACTIONS(SHIFT(25, 0)),
|
||||
[sym_string] = ACTIONS(SHIFT(23, 0)),
|
||||
[sym_number] = ACTIONS(SHIFT(23, 0)),
|
||||
[sym_null] = ACTIONS(SHIFT(23, 0)),
|
||||
[sym_true] = ACTIONS(SHIFT(23, 0)),
|
||||
[sym_false] = ACTIONS(SHIFT(23, 0)),
|
||||
[sym__value] = 110,
|
||||
[sym_object] = 78,
|
||||
[sym_array] = 78,
|
||||
[anon_sym_LBRACE] = 80,
|
||||
[anon_sym_LBRACK] = 82,
|
||||
[sym_string] = 78,
|
||||
[sym_number] = 78,
|
||||
[sym_null] = 78,
|
||||
[sym_true] = 78,
|
||||
[sym_false] = 78,
|
||||
},
|
||||
[35] = {
|
||||
[aux_sym_object_repeat1] = ACTIONS(SHIFT(36, 0)),
|
||||
[anon_sym_COMMA] = ACTIONS(SHIFT(37, 0)),
|
||||
[anon_sym_RBRACE] = ACTIONS(SHIFT(38, 0)),
|
||||
[aux_sym_object_repeat1] = 112,
|
||||
[anon_sym_COMMA] = 68,
|
||||
[anon_sym_RBRACE] = 114,
|
||||
},
|
||||
[36] = {
|
||||
[anon_sym_RBRACE] = ACTIONS(SHIFT(45, 0)),
|
||||
[anon_sym_RBRACE] = 116,
|
||||
},
|
||||
[37] = {
|
||||
[ts_builtin_sym_error] = ACTIONS(SHIFT(39, 0)),
|
||||
[sym_string] = ACTIONS(SHIFT(40, 0)),
|
||||
[ts_builtin_sym_error] = 118,
|
||||
[sym_string] = 120,
|
||||
},
|
||||
[38] = {
|
||||
[aux_sym_object_repeat1] = ACTIONS(REDUCE(sym_object, 5, 0)),
|
||||
[anon_sym_COMMA] = ACTIONS(REDUCE(sym_object, 5, 0)),
|
||||
[anon_sym_RBRACE] = ACTIONS(REDUCE(sym_object, 5, 0)),
|
||||
[aux_sym_object_repeat1] = 122,
|
||||
[anon_sym_COMMA] = 122,
|
||||
[anon_sym_RBRACE] = 122,
|
||||
},
|
||||
[39] = {
|
||||
[aux_sym_object_repeat1] = ACTIONS(SHIFT(44, 0)),
|
||||
[anon_sym_COMMA] = ACTIONS(SHIFT(37, 0)),
|
||||
[anon_sym_RBRACE] = ACTIONS(REDUCE(aux_sym_object_repeat1, 2, 0)),
|
||||
[aux_sym_object_repeat1] = 124,
|
||||
[anon_sym_COMMA] = 68,
|
||||
[anon_sym_RBRACE] = 126,
|
||||
},
|
||||
[40] = {
|
||||
[anon_sym_COLON] = ACTIONS(SHIFT(41, 0)),
|
||||
[anon_sym_COLON] = 128,
|
||||
},
|
||||
[41] = {
|
||||
[sym__value] = ACTIONS(SHIFT(42, 0)),
|
||||
[sym_object] = ACTIONS(SHIFT(23, 0)),
|
||||
[sym_array] = ACTIONS(SHIFT(23, 0)),
|
||||
[anon_sym_LBRACE] = ACTIONS(SHIFT(24, 0)),
|
||||
[anon_sym_LBRACK] = ACTIONS(SHIFT(25, 0)),
|
||||
[sym_string] = ACTIONS(SHIFT(23, 0)),
|
||||
[sym_number] = ACTIONS(SHIFT(23, 0)),
|
||||
[sym_null] = ACTIONS(SHIFT(23, 0)),
|
||||
[sym_true] = ACTIONS(SHIFT(23, 0)),
|
||||
[sym_false] = ACTIONS(SHIFT(23, 0)),
|
||||
[sym__value] = 130,
|
||||
[sym_object] = 78,
|
||||
[sym_array] = 78,
|
||||
[anon_sym_LBRACE] = 80,
|
||||
[anon_sym_LBRACK] = 82,
|
||||
[sym_string] = 78,
|
||||
[sym_number] = 78,
|
||||
[sym_null] = 78,
|
||||
[sym_true] = 78,
|
||||
[sym_false] = 78,
|
||||
},
|
||||
[42] = {
|
||||
[aux_sym_object_repeat1] = ACTIONS(SHIFT(43, 0)),
|
||||
[anon_sym_COMMA] = ACTIONS(SHIFT(37, 0)),
|
||||
[anon_sym_RBRACE] = ACTIONS(REDUCE(aux_sym_object_repeat1, 4, 0)),
|
||||
[aux_sym_object_repeat1] = 132,
|
||||
[anon_sym_COMMA] = 68,
|
||||
[anon_sym_RBRACE] = 134,
|
||||
},
|
||||
[43] = {
|
||||
[anon_sym_RBRACE] = ACTIONS(REDUCE(aux_sym_object_repeat1, 5, 0)),
|
||||
[anon_sym_RBRACE] = 136,
|
||||
},
|
||||
[44] = {
|
||||
[anon_sym_RBRACE] = ACTIONS(REDUCE(aux_sym_object_repeat1, 3, 0)),
|
||||
[anon_sym_RBRACE] = 138,
|
||||
},
|
||||
[45] = {
|
||||
[aux_sym_object_repeat1] = ACTIONS(REDUCE(sym_object, 6, 0)),
|
||||
[anon_sym_COMMA] = ACTIONS(REDUCE(sym_object, 6, 0)),
|
||||
[anon_sym_RBRACE] = ACTIONS(REDUCE(sym_object, 6, 0)),
|
||||
[aux_sym_object_repeat1] = 140,
|
||||
[anon_sym_COMMA] = 140,
|
||||
[anon_sym_RBRACE] = 140,
|
||||
},
|
||||
[46] = {
|
||||
[anon_sym_RBRACE] = ACTIONS(SHIFT(48, 0)),
|
||||
[anon_sym_RBRACE] = 142,
|
||||
},
|
||||
[47] = {
|
||||
[aux_sym_object_repeat1] = ACTIONS(REDUCE(sym_object, 3, 0)),
|
||||
[anon_sym_COMMA] = ACTIONS(REDUCE(sym_object, 3, 0)),
|
||||
[anon_sym_RBRACE] = ACTIONS(REDUCE(sym_object, 3, 0)),
|
||||
[aux_sym_object_repeat1] = 144,
|
||||
[anon_sym_COMMA] = 144,
|
||||
[anon_sym_RBRACE] = 144,
|
||||
},
|
||||
[48] = {
|
||||
[aux_sym_object_repeat1] = ACTIONS(REDUCE(sym_object, 4, 0)),
|
||||
[anon_sym_COMMA] = ACTIONS(REDUCE(sym_object, 4, 0)),
|
||||
[anon_sym_RBRACE] = ACTIONS(REDUCE(sym_object, 4, 0)),
|
||||
[aux_sym_object_repeat1] = 146,
|
||||
[anon_sym_COMMA] = 146,
|
||||
[anon_sym_RBRACE] = 146,
|
||||
},
|
||||
[49] = {
|
||||
[anon_sym_RBRACE] = ACTIONS(SHIFT(51, 0)),
|
||||
[anon_sym_RBRACE] = 148,
|
||||
},
|
||||
[50] = {
|
||||
[aux_sym_array_repeat1] = ACTIONS(REDUCE(sym_object, 5, 0)),
|
||||
[anon_sym_COMMA] = ACTIONS(REDUCE(sym_object, 5, 0)),
|
||||
[anon_sym_RBRACK] = ACTIONS(REDUCE(sym_object, 5, 0)),
|
||||
[aux_sym_array_repeat1] = 122,
|
||||
[anon_sym_COMMA] = 122,
|
||||
[anon_sym_RBRACK] = 122,
|
||||
},
|
||||
[51] = {
|
||||
[aux_sym_array_repeat1] = ACTIONS(REDUCE(sym_object, 6, 0)),
|
||||
[anon_sym_COMMA] = ACTIONS(REDUCE(sym_object, 6, 0)),
|
||||
[anon_sym_RBRACK] = ACTIONS(REDUCE(sym_object, 6, 0)),
|
||||
[aux_sym_array_repeat1] = 140,
|
||||
[anon_sym_COMMA] = 140,
|
||||
[anon_sym_RBRACK] = 140,
|
||||
},
|
||||
[52] = {
|
||||
[anon_sym_RBRACE] = ACTIONS(SHIFT(54, 0)),
|
||||
[anon_sym_RBRACE] = 150,
|
||||
},
|
||||
[53] = {
|
||||
[aux_sym_array_repeat1] = ACTIONS(REDUCE(sym_object, 3, 0)),
|
||||
[anon_sym_COMMA] = ACTIONS(REDUCE(sym_object, 3, 0)),
|
||||
[anon_sym_RBRACK] = ACTIONS(REDUCE(sym_object, 3, 0)),
|
||||
[aux_sym_array_repeat1] = 144,
|
||||
[anon_sym_COMMA] = 144,
|
||||
[anon_sym_RBRACK] = 144,
|
||||
},
|
||||
[54] = {
|
||||
[aux_sym_array_repeat1] = ACTIONS(REDUCE(sym_object, 4, 0)),
|
||||
[anon_sym_COMMA] = ACTIONS(REDUCE(sym_object, 4, 0)),
|
||||
[anon_sym_RBRACK] = ACTIONS(REDUCE(sym_object, 4, 0)),
|
||||
[aux_sym_array_repeat1] = 146,
|
||||
[anon_sym_COMMA] = 146,
|
||||
[anon_sym_RBRACK] = 146,
|
||||
},
|
||||
[55] = {
|
||||
[anon_sym_RBRACK] = ACTIONS(SHIFT(57, 0)),
|
||||
[anon_sym_RBRACK] = 152,
|
||||
},
|
||||
[56] = {
|
||||
[ts_builtin_sym_end] = ACTIONS(REDUCE(sym_array, 3, 0)),
|
||||
[ts_builtin_sym_end] = 56,
|
||||
},
|
||||
[57] = {
|
||||
[ts_builtin_sym_end] = ACTIONS(REDUCE(sym_array, 4, 0)),
|
||||
[ts_builtin_sym_end] = 64,
|
||||
},
|
||||
[58] = {
|
||||
[aux_sym_object_repeat1] = ACTIONS(SHIFT(66, 0)),
|
||||
[anon_sym_COMMA] = ACTIONS(SHIFT(37, 0)),
|
||||
[anon_sym_RBRACE] = ACTIONS(SHIFT(67, 0)),
|
||||
[aux_sym_object_repeat1] = 154,
|
||||
[anon_sym_COMMA] = 68,
|
||||
[anon_sym_RBRACE] = 156,
|
||||
},
|
||||
[59] = {
|
||||
[ts_builtin_sym_end] = ACTIONS(REDUCE(sym_object, 2, 0)),
|
||||
[ts_builtin_sym_end] = 72,
|
||||
},
|
||||
[60] = {
|
||||
[anon_sym_COLON] = ACTIONS(SHIFT(61, 0)),
|
||||
[anon_sym_COLON] = 158,
|
||||
},
|
||||
[61] = {
|
||||
[sym__value] = ACTIONS(SHIFT(62, 0)),
|
||||
[sym_object] = ACTIONS(SHIFT(23, 0)),
|
||||
[sym_array] = ACTIONS(SHIFT(23, 0)),
|
||||
[anon_sym_LBRACE] = ACTIONS(SHIFT(24, 0)),
|
||||
[anon_sym_LBRACK] = ACTIONS(SHIFT(25, 0)),
|
||||
[sym_string] = ACTIONS(SHIFT(23, 0)),
|
||||
[sym_number] = ACTIONS(SHIFT(23, 0)),
|
||||
[sym_null] = ACTIONS(SHIFT(23, 0)),
|
||||
[sym_true] = ACTIONS(SHIFT(23, 0)),
|
||||
[sym_false] = ACTIONS(SHIFT(23, 0)),
|
||||
[sym__value] = 160,
|
||||
[sym_object] = 78,
|
||||
[sym_array] = 78,
|
||||
[anon_sym_LBRACE] = 80,
|
||||
[anon_sym_LBRACK] = 82,
|
||||
[sym_string] = 78,
|
||||
[sym_number] = 78,
|
||||
[sym_null] = 78,
|
||||
[sym_true] = 78,
|
||||
[sym_false] = 78,
|
||||
},
|
||||
[62] = {
|
||||
[aux_sym_object_repeat1] = ACTIONS(SHIFT(63, 0)),
|
||||
[anon_sym_COMMA] = ACTIONS(SHIFT(37, 0)),
|
||||
[anon_sym_RBRACE] = ACTIONS(SHIFT(64, 0)),
|
||||
[aux_sym_object_repeat1] = 162,
|
||||
[anon_sym_COMMA] = 68,
|
||||
[anon_sym_RBRACE] = 164,
|
||||
},
|
||||
[63] = {
|
||||
[anon_sym_RBRACE] = ACTIONS(SHIFT(65, 0)),
|
||||
[anon_sym_RBRACE] = 166,
|
||||
},
|
||||
[64] = {
|
||||
[ts_builtin_sym_end] = ACTIONS(REDUCE(sym_object, 5, 0)),
|
||||
[ts_builtin_sym_end] = 122,
|
||||
},
|
||||
[65] = {
|
||||
[ts_builtin_sym_end] = ACTIONS(REDUCE(sym_object, 6, 0)),
|
||||
[ts_builtin_sym_end] = 140,
|
||||
},
|
||||
[66] = {
|
||||
[anon_sym_RBRACE] = ACTIONS(SHIFT(68, 0)),
|
||||
[anon_sym_RBRACE] = 168,
|
||||
},
|
||||
[67] = {
|
||||
[ts_builtin_sym_end] = ACTIONS(REDUCE(sym_object, 3, 0)),
|
||||
[ts_builtin_sym_end] = 144,
|
||||
},
|
||||
[68] = {
|
||||
[ts_builtin_sym_end] = ACTIONS(REDUCE(sym_object, 4, 0)),
|
||||
[ts_builtin_sym_end] = 146,
|
||||
},
|
||||
};
|
||||
|
||||
static TSParseActionEntry ts_parse_actions[] = {
|
||||
[0] = {.count = 1}, ERROR(),
|
||||
[2] = {.count = 1}, SHIFT(1, 0),
|
||||
[4] = {.count = 1}, SHIFT(2, 0),
|
||||
[6] = {.count = 1}, SHIFT(3, 0),
|
||||
[8] = {.count = 1}, SHIFT(4, 0),
|
||||
[10] = {.count = 1}, ACCEPT_INPUT(),
|
||||
[12] = {.count = 1}, REDUCE(sym__value, 1, 0),
|
||||
[14] = {.count = 1}, SHIFT(58, 0),
|
||||
[16] = {.count = 1}, SHIFT(59, 0),
|
||||
[18] = {.count = 1}, SHIFT(60, 0),
|
||||
[20] = {.count = 1}, SHIFT(5, 0),
|
||||
[22] = {.count = 1}, SHIFT(6, 0),
|
||||
[24] = {.count = 1}, SHIFT(7, 0),
|
||||
[26] = {.count = 1}, SHIFT(8, 0),
|
||||
[28] = {.count = 1}, SHIFT(9, 0),
|
||||
[30] = {.count = 1}, SHIFT(55, 0),
|
||||
[32] = {.count = 1}, SHIFT(13, 0),
|
||||
[34] = {.count = 1}, SHIFT(56, 0),
|
||||
[36] = {.count = 1}, SHIFT(18, 0),
|
||||
[38] = {.count = 1}, SHIFT(19, 0),
|
||||
[40] = {.count = 1}, SHIFT(20, 0),
|
||||
[42] = {.count = 1}, SHIFT(10, 0),
|
||||
[44] = {.count = 1}, SHIFT(11, 0),
|
||||
[46] = {.count = 1}, REDUCE(sym_array, 2, 0),
|
||||
[48] = {.count = 1}, SHIFT(12, 0),
|
||||
[50] = {.count = 1}, SHIFT(14, 0),
|
||||
[52] = {.count = 1}, SHIFT(17, 0),
|
||||
[54] = {.count = 1}, SHIFT(15, 0),
|
||||
[56] = {.count = 1}, REDUCE(sym_array, 3, 0),
|
||||
[58] = {.count = 1}, SHIFT(16, 0),
|
||||
[60] = {.count = 1}, REDUCE(aux_sym_array_repeat1, 2, 0),
|
||||
[62] = {.count = 1}, REDUCE(aux_sym_array_repeat1, 3, 0),
|
||||
[64] = {.count = 1}, REDUCE(sym_array, 4, 0),
|
||||
[66] = {.count = 1}, SHIFT(52, 0),
|
||||
[68] = {.count = 1}, SHIFT(37, 0),
|
||||
[70] = {.count = 1}, SHIFT(53, 0),
|
||||
[72] = {.count = 1}, REDUCE(sym_object, 2, 0),
|
||||
[74] = {.count = 1}, SHIFT(21, 0),
|
||||
[76] = {.count = 1}, SHIFT(22, 0),
|
||||
[78] = {.count = 1}, SHIFT(23, 0),
|
||||
[80] = {.count = 1}, SHIFT(24, 0),
|
||||
[82] = {.count = 1}, SHIFT(25, 0),
|
||||
[84] = {.count = 1}, SHIFT(49, 0),
|
||||
[86] = {.count = 1}, SHIFT(50, 0),
|
||||
[88] = {.count = 1}, SHIFT(31, 0),
|
||||
[90] = {.count = 1}, SHIFT(32, 0),
|
||||
[92] = {.count = 1}, SHIFT(33, 0),
|
||||
[94] = {.count = 1}, SHIFT(26, 0),
|
||||
[96] = {.count = 1}, SHIFT(27, 0),
|
||||
[98] = {.count = 1}, SHIFT(28, 0),
|
||||
[100] = {.count = 1}, SHIFT(29, 0),
|
||||
[102] = {.count = 1}, SHIFT(30, 0),
|
||||
[104] = {.count = 1}, SHIFT(46, 0),
|
||||
[106] = {.count = 1}, SHIFT(47, 0),
|
||||
[108] = {.count = 1}, SHIFT(34, 0),
|
||||
[110] = {.count = 1}, SHIFT(35, 0),
|
||||
[112] = {.count = 1}, SHIFT(36, 0),
|
||||
[114] = {.count = 1}, SHIFT(38, 0),
|
||||
[116] = {.count = 1}, SHIFT(45, 0),
|
||||
[118] = {.count = 1}, SHIFT(39, 0),
|
||||
[120] = {.count = 1}, SHIFT(40, 0),
|
||||
[122] = {.count = 1}, REDUCE(sym_object, 5, 0),
|
||||
[124] = {.count = 1}, SHIFT(44, 0),
|
||||
[126] = {.count = 1}, REDUCE(aux_sym_object_repeat1, 2, 0),
|
||||
[128] = {.count = 1}, SHIFT(41, 0),
|
||||
[130] = {.count = 1}, SHIFT(42, 0),
|
||||
[132] = {.count = 1}, SHIFT(43, 0),
|
||||
[134] = {.count = 1}, REDUCE(aux_sym_object_repeat1, 4, 0),
|
||||
[136] = {.count = 1}, REDUCE(aux_sym_object_repeat1, 5, 0),
|
||||
[138] = {.count = 1}, REDUCE(aux_sym_object_repeat1, 3, 0),
|
||||
[140] = {.count = 1}, REDUCE(sym_object, 6, 0),
|
||||
[142] = {.count = 1}, SHIFT(48, 0),
|
||||
[144] = {.count = 1}, REDUCE(sym_object, 3, 0),
|
||||
[146] = {.count = 1}, REDUCE(sym_object, 4, 0),
|
||||
[148] = {.count = 1}, SHIFT(51, 0),
|
||||
[150] = {.count = 1}, SHIFT(54, 0),
|
||||
[152] = {.count = 1}, SHIFT(57, 0),
|
||||
[154] = {.count = 1}, SHIFT(66, 0),
|
||||
[156] = {.count = 1}, SHIFT(67, 0),
|
||||
[158] = {.count = 1}, SHIFT(61, 0),
|
||||
[160] = {.count = 1}, SHIFT(62, 0),
|
||||
[162] = {.count = 1}, SHIFT(63, 0),
|
||||
[164] = {.count = 1}, SHIFT(64, 0),
|
||||
[166] = {.count = 1}, SHIFT(65, 0),
|
||||
[168] = {.count = 1}, SHIFT(68, 0),
|
||||
};
|
||||
|
||||
#pragma GCC diagnostic pop
|
||||
|
||||
EXPORT_LANGUAGE(ts_language_json);
|
||||
|
|
|
|||
|
|
@ -73,6 +73,8 @@ class CCodeGenerator {
|
|||
const SyntaxGrammar syntax_grammar;
|
||||
const LexicalGrammar lexical_grammar;
|
||||
map<string, string> sanitized_names;
|
||||
vector<pair<size_t, vector<ParseAction>>> parse_actions;
|
||||
size_t next_parse_action_list_index;
|
||||
|
||||
public:
|
||||
CCodeGenerator(string name, const ParseTable &parse_table,
|
||||
|
|
@ -83,7 +85,8 @@ class CCodeGenerator {
|
|||
parse_table(parse_table),
|
||||
lex_table(lex_table),
|
||||
syntax_grammar(syntax_grammar),
|
||||
lexical_grammar(lexical_grammar) {}
|
||||
lexical_grammar(lexical_grammar),
|
||||
next_parse_action_list_index(0) {}
|
||||
|
||||
string code() {
|
||||
buffer = "";
|
||||
|
|
@ -214,13 +217,13 @@ class CCodeGenerator {
|
|||
}
|
||||
|
||||
void add_parse_table() {
|
||||
add_parse_actions({ ParseAction::Error() });
|
||||
|
||||
size_t state_id = 0;
|
||||
line("#pragma GCC diagnostic push");
|
||||
line("#pragma GCC diagnostic ignored \"-Wmissing-field-initializers\"");
|
||||
line();
|
||||
line(
|
||||
"static const TSParseAction *"
|
||||
"ts_parse_actions[STATE_COUNT][SYMBOL_COUNT] = {");
|
||||
line("static unsigned short ts_parse_table[STATE_COUNT][SYMBOL_COUNT] = {");
|
||||
|
||||
indent([&]() {
|
||||
for (const auto &state : parse_table.states) {
|
||||
|
|
@ -228,9 +231,8 @@ class CCodeGenerator {
|
|||
indent([&]() {
|
||||
for (const auto &pair : state.actions) {
|
||||
line("[" + symbol_id(pair.first) + "] = ");
|
||||
add("ACTIONS(");
|
||||
add_parse_actions(pair.second);
|
||||
add("),");
|
||||
add(to_string(add_parse_actions(pair.second)));
|
||||
add(",");
|
||||
}
|
||||
});
|
||||
line("},");
|
||||
|
|
@ -239,6 +241,8 @@ class CCodeGenerator {
|
|||
|
||||
line("};");
|
||||
line();
|
||||
add_parse_action_list();
|
||||
line();
|
||||
line("#pragma GCC diagnostic pop");
|
||||
line();
|
||||
}
|
||||
|
|
@ -319,38 +323,64 @@ class CCodeGenerator {
|
|||
}
|
||||
}
|
||||
|
||||
void add_parse_actions(const vector<ParseAction> &actions) {
|
||||
bool started = false;
|
||||
for (const auto &action : actions) {
|
||||
if (started)
|
||||
add(", ");
|
||||
switch (action.type) {
|
||||
case ParseActionTypeAccept:
|
||||
add("ACCEPT_INPUT()");
|
||||
break;
|
||||
case ParseActionTypeShift:
|
||||
if (action.extra) {
|
||||
add("SHIFT_EXTRA()");
|
||||
} else {
|
||||
add("SHIFT(" + to_string(action.state_index) + ", ");
|
||||
add_action_flags(action);
|
||||
add(")");
|
||||
void add_parse_action_list() {
|
||||
line("static TSParseActionEntry ts_parse_actions[] = {");
|
||||
|
||||
indent([&]() {
|
||||
for (const auto &pair : parse_actions) {
|
||||
size_t index = pair.first;
|
||||
line("[" + to_string(index) + "] = {.count = " + to_string(pair.second.size()) + "},");
|
||||
|
||||
for (const ParseAction &action : pair.second) {
|
||||
index++;
|
||||
add(" ");
|
||||
switch (action.type) {
|
||||
case ParseActionTypeError:
|
||||
add("ERROR()");
|
||||
break;
|
||||
case ParseActionTypeAccept:
|
||||
add("ACCEPT_INPUT()");
|
||||
break;
|
||||
case ParseActionTypeShift:
|
||||
if (action.extra) {
|
||||
add("SHIFT_EXTRA()");
|
||||
} else {
|
||||
add("SHIFT(" + to_string(action.state_index) + ", ");
|
||||
add_action_flags(action);
|
||||
add(")");
|
||||
}
|
||||
break;
|
||||
case ParseActionTypeReduce:
|
||||
if (action.extra) {
|
||||
add("REDUCE_EXTRA(" + symbol_id(action.symbol) + ")");
|
||||
} else {
|
||||
add("REDUCE(" + symbol_id(action.symbol) + ", " +
|
||||
to_string(action.consumed_symbol_count) + ", ");
|
||||
add_action_flags(action);
|
||||
add(")");
|
||||
}
|
||||
break;
|
||||
default: {}
|
||||
}
|
||||
break;
|
||||
case ParseActionTypeReduce:
|
||||
if (action.extra) {
|
||||
add("REDUCE_EXTRA(" + symbol_id(action.symbol) + ")");
|
||||
} else {
|
||||
add("REDUCE(" + symbol_id(action.symbol) + ", " +
|
||||
to_string(action.consumed_symbol_count) + ", ");
|
||||
add_action_flags(action);
|
||||
add(")");
|
||||
}
|
||||
break;
|
||||
default: {}
|
||||
add(",");
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
line ("};");
|
||||
}
|
||||
|
||||
size_t add_parse_actions(const vector<ParseAction> &actions) {
|
||||
for (const auto &pair : parse_actions) {
|
||||
if (pair.second == actions) {
|
||||
return pair.first;
|
||||
}
|
||||
started = true;
|
||||
}
|
||||
|
||||
size_t result = next_parse_action_list_index;
|
||||
parse_actions.push_back({ next_parse_action_list_index, actions });
|
||||
next_parse_action_list_index += 1 + actions.size();
|
||||
return result;
|
||||
}
|
||||
|
||||
void add_action_flags(const ParseAction &action) {
|
||||
|
|
|
|||
|
|
@ -1,22 +1,17 @@
|
|||
#include "tree_sitter/parser.h"
|
||||
|
||||
static const TSParseAction ERROR_ACTIONS[2] = {
|
||||
{.type = TSParseActionTypeError }, {.type = 0 }
|
||||
};
|
||||
|
||||
const TSParseAction *ts_language_actions(const TSLanguage *language,
|
||||
TSStateId state, TSSymbol sym) {
|
||||
const TSParseAction *actions =
|
||||
(language->parse_table + (state * language->symbol_count))[sym];
|
||||
return actions ? actions : ERROR_ACTIONS;
|
||||
const TSParseAction *ts_language_actions(const TSLanguage *language, TSStateId state, TSSymbol sym, size_t *count) {
|
||||
unsigned short action_index = (language->parse_table + (state * language->symbol_count))[sym];
|
||||
*count = language->parse_actions[action_index].count;
|
||||
const TSParseActionEntry *entry = language->parse_actions + action_index + 1;
|
||||
return (const TSParseAction *)entry;
|
||||
}
|
||||
|
||||
TSParseAction ts_language_last_action(const TSLanguage *language,
|
||||
TSStateId state, TSSymbol sym) {
|
||||
const TSParseAction *action = ts_language_actions(language, state, sym);
|
||||
while ((action + 1)->type)
|
||||
action++;
|
||||
return *action;
|
||||
size_t count;
|
||||
const TSParseAction *actions = ts_language_actions(language, state, sym, &count);
|
||||
return actions[count - 1];
|
||||
}
|
||||
|
||||
size_t ts_language_symbol_count(const TSLanguage *language) {
|
||||
|
|
|
|||
|
|
@ -7,8 +7,7 @@ extern "C" {
|
|||
|
||||
#include "tree_sitter/parser.h"
|
||||
|
||||
const TSParseAction *ts_language_actions(const TSLanguage *, TSStateId,
|
||||
TSSymbol);
|
||||
const TSParseAction *ts_language_actions(const TSLanguage *, TSStateId, TSSymbol, size_t *);
|
||||
TSParseAction ts_language_last_action(const TSLanguage *, TSStateId, TSSymbol);
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
|
|
|||
|
|
@ -142,12 +142,11 @@ static bool ts_parser__can_reuse(TSParser *self, int head, TSTree *subtree) {
|
|||
return false;
|
||||
}
|
||||
|
||||
const TSParseAction *action =
|
||||
ts_language_actions(self->language, state, subtree->symbol);
|
||||
if (action->type == TSParseActionTypeError || action->can_hide_split)
|
||||
const TSParseAction action = ts_language_last_action(self->language, state, subtree->symbol);
|
||||
if (action.type == TSParseActionTypeError || action.can_hide_split)
|
||||
return false;
|
||||
|
||||
if (subtree->extra && !action->extra)
|
||||
if (subtree->extra && !action.extra)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
|
|
@ -543,8 +542,8 @@ static bool ts_parser__consume_lookahead(TSParser *self, int head,
|
|||
TSTree *lookahead) {
|
||||
for (;;) {
|
||||
TSStateId state = ts_stack_top_state(self->stack, head);
|
||||
const TSParseAction *next_action =
|
||||
ts_language_actions(self->language, state, lookahead->symbol);
|
||||
size_t action_count;
|
||||
const TSParseAction *actions = ts_language_actions(self->language, state, lookahead->symbol, &action_count);
|
||||
|
||||
/*
|
||||
* If there are multiple actions for the current state and lookahead symbol,
|
||||
|
|
@ -552,14 +551,12 @@ static bool ts_parser__consume_lookahead(TSParser *self, int head,
|
|||
* action, it will always appear *last* in the list of actions. Perform it
|
||||
* on the original stack head and return.
|
||||
*/
|
||||
while (next_action) {
|
||||
TSParseAction action = *next_action;
|
||||
next_action++;
|
||||
for (size_t i = 0; i < action_count; i++) {
|
||||
TSParseAction action = actions[i];
|
||||
|
||||
int current_head;
|
||||
if (next_action->type == 0) {
|
||||
if (i == action_count - 1) {
|
||||
current_head = head;
|
||||
next_action = NULL;
|
||||
} else {
|
||||
current_head = ts_parser__split(self, head);
|
||||
LOG("split_action from_head:%d, new_head:%d", head, current_head);
|
||||
|
|
@ -620,7 +617,7 @@ static bool ts_parser__consume_lookahead(TSParser *self, int head,
|
|||
if (!ts_parser__reduce(self, current_head, action.data.symbol,
|
||||
action.data.child_count, false,
|
||||
action.fragile, false))
|
||||
if (!next_action)
|
||||
if (current_head == head)
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue