Merge pull request #21 from maxbrunsfeld/reduce-binary-sizes

Store parse table more compactly
This commit is contained in:
Max Brunsfeld 2015-12-29 20:52:04 -08:00
commit 36cdb3afcd
12 changed files with 64894 additions and 61436 deletions

View file

@ -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, \

View file

@ -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);

View file

@ -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);

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -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);

View file

@ -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) {

View file

@ -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) {

View file

@ -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

View file

@ -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;