Add 'extra' field to symbol metadata
This stores whether a symbol is only ever used as a ubiquitous token. This will allow ubiquitous nodes to be reused more effectively: if they are always ubiquitous, then they can be reused immediately, and otherwise, they must be broken down in case they need to be used structurally.
This commit is contained in:
parent
f08554e958
commit
ad619d95f6
13 changed files with 439 additions and 414 deletions
|
|
@ -19,6 +19,7 @@ typedef unsigned short TSStateId;
|
|||
typedef struct {
|
||||
bool visible : 1;
|
||||
bool named : 1;
|
||||
bool extra : 1;
|
||||
} TSSymbolMetadata;
|
||||
|
||||
typedef struct TSLexer {
|
||||
|
|
|
|||
14
spec/fixtures/parsers/anonymous_tokens.c
vendored
14
spec/fixtures/parsers/anonymous_tokens.c
vendored
|
|
@ -22,13 +22,13 @@ static const char *ts_symbol_names[] = {
|
|||
};
|
||||
|
||||
static const TSSymbolMetadata ts_symbol_metadata[SYMBOL_COUNT] = {
|
||||
[sym_program] = {.visible = true, .named = true},
|
||||
[ts_builtin_sym_error] = {.visible = true, .named = true},
|
||||
[ts_builtin_sym_end] = {.visible = false, .named = false},
|
||||
[anon_sym_LF] = {.visible = true, .named = false},
|
||||
[anon_sym_CR] = {.visible = true, .named = false},
|
||||
[aux_sym_SLASH_BSLASHd_SLASH] = {.visible = false, .named = false},
|
||||
[anon_sym_DQUOTEhello_DQUOTE] = {.visible = true, .named = false},
|
||||
[sym_program] = {.visible = true, .named = true, .extra = false},
|
||||
[ts_builtin_sym_error] = {.visible = true, .named = true, .extra = true},
|
||||
[ts_builtin_sym_end] = {.visible = false, .named = false, .extra = false},
|
||||
[anon_sym_LF] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_CR] = {.visible = true, .named = false, .extra = false},
|
||||
[aux_sym_SLASH_BSLASHd_SLASH] = {.visible = false, .named = false, .extra = false},
|
||||
[anon_sym_DQUOTEhello_DQUOTE] = {.visible = true, .named = false, .extra = false},
|
||||
};
|
||||
|
||||
static TSTree *ts_lex(TSLexer *lexer, TSStateId lex_state) {
|
||||
|
|
|
|||
40
spec/fixtures/parsers/arithmetic.c
vendored
40
spec/fixtures/parsers/arithmetic.c
vendored
|
|
@ -48,26 +48,26 @@ static const char *ts_symbol_names[] = {
|
|||
};
|
||||
|
||||
static const TSSymbolMetadata ts_symbol_metadata[SYMBOL_COUNT] = {
|
||||
[sym_program] = {.visible = true, .named = true},
|
||||
[sym__expression] = {.visible = false, .named = false},
|
||||
[sym_sum] = {.visible = true, .named = true},
|
||||
[sym_difference] = {.visible = true, .named = true},
|
||||
[sym_product] = {.visible = true, .named = true},
|
||||
[sym_quotient] = {.visible = true, .named = true},
|
||||
[sym_exponent] = {.visible = true, .named = true},
|
||||
[sym_group] = {.visible = true, .named = true},
|
||||
[ts_builtin_sym_error] = {.visible = true, .named = true},
|
||||
[ts_builtin_sym_end] = {.visible = false, .named = false},
|
||||
[anon_sym_PLUS] = {.visible = true, .named = false},
|
||||
[anon_sym_DASH] = {.visible = true, .named = false},
|
||||
[anon_sym_STAR] = {.visible = true, .named = false},
|
||||
[anon_sym_SLASH] = {.visible = true, .named = false},
|
||||
[anon_sym_CARET] = {.visible = true, .named = false},
|
||||
[anon_sym_LPAREN] = {.visible = true, .named = false},
|
||||
[anon_sym_RPAREN] = {.visible = true, .named = false},
|
||||
[sym_number] = {.visible = true, .named = true},
|
||||
[sym_variable] = {.visible = true, .named = true},
|
||||
[sym_comment] = {.visible = true, .named = true},
|
||||
[sym_program] = {.visible = true, .named = true, .extra = false},
|
||||
[sym__expression] = {.visible = false, .named = false, .extra = false},
|
||||
[sym_sum] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_difference] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_product] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_quotient] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_exponent] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_group] = {.visible = true, .named = true, .extra = false},
|
||||
[ts_builtin_sym_error] = {.visible = true, .named = true, .extra = false},
|
||||
[ts_builtin_sym_end] = {.visible = false, .named = false, .extra = false},
|
||||
[anon_sym_PLUS] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_DASH] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_STAR] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_SLASH] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_CARET] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_LPAREN] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_RPAREN] = {.visible = true, .named = false, .extra = false},
|
||||
[sym_number] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_variable] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_comment] = {.visible = true, .named = true, .extra = true},
|
||||
};
|
||||
|
||||
static TSTree *ts_lex(TSLexer *lexer, TSStateId lex_state) {
|
||||
|
|
|
|||
158
spec/fixtures/parsers/c.c
vendored
158
spec/fixtures/parsers/c.c
vendored
|
|
@ -166,85 +166,85 @@ static const char *ts_symbol_names[] = {
|
|||
};
|
||||
|
||||
static const TSSymbolMetadata ts_symbol_metadata[SYMBOL_COUNT] = {
|
||||
[sym_translation_unit] = {.visible = true, .named = true},
|
||||
[sym_preproc_define] = {.visible = true, .named = true},
|
||||
[sym_function_definition] = {.visible = true, .named = true},
|
||||
[sym_declaration_specifiers] = {.visible = true, .named = true},
|
||||
[sym_storage_class_specifier] = {.visible = true, .named = true},
|
||||
[sym__type_specifier] = {.visible = false, .named = false},
|
||||
[sym_numeric_type_specifier] = {.visible = true, .named = true},
|
||||
[sym_struct_specifier] = {.visible = true, .named = true},
|
||||
[sym_type_name] = {.visible = true, .named = true},
|
||||
[sym_struct_declaration] = {.visible = true, .named = true},
|
||||
[sym_parameter_declaration] = {.visible = true, .named = true},
|
||||
[sym_declaration] = {.visible = true, .named = true},
|
||||
[sym__init_declarator] = {.visible = false, .named = false},
|
||||
[sym_initializer] = {.visible = true, .named = true},
|
||||
[sym_initializer_list] = {.visible = true, .named = true},
|
||||
[sym_designation] = {.visible = true, .named = true},
|
||||
[sym__declarator] = {.visible = false, .named = false},
|
||||
[sym__abstract_declarator] = {.visible = false, .named = false},
|
||||
[sym_pointer_declarator] = {.visible = true, .named = true},
|
||||
[sym_abstract_pointer_declarator] = {.visible = true, .named = true},
|
||||
[sym_function_declarator] = {.visible = true, .named = true},
|
||||
[sym_abstract_function_declarator] = {.visible = true, .named = true},
|
||||
[sym_array_declarator] = {.visible = true, .named = true},
|
||||
[sym_abstract_array_declarator] = {.visible = true, .named = true},
|
||||
[sym_type_qualifier] = {.visible = true, .named = true},
|
||||
[sym_compound_statement] = {.visible = true, .named = true},
|
||||
[sym__expression] = {.visible = false, .named = false},
|
||||
[sym_cast_expression] = {.visible = true, .named = true},
|
||||
[sym_math_expression] = {.visible = true, .named = true},
|
||||
[sym_call_expression] = {.visible = true, .named = true},
|
||||
[sym_pointer_expression] = {.visible = true, .named = true},
|
||||
[sym__statement] = {.visible = false, .named = false},
|
||||
[sym_expression_statement] = {.visible = true, .named = true},
|
||||
[sym_macro_type] = {.visible = true, .named = true},
|
||||
[aux_sym_translation_unit_repeat1] = {.visible = false, .named = false},
|
||||
[aux_sym_declaration_specifiers_repeat1] = {.visible = false, .named = false},
|
||||
[aux_sym_numeric_type_specifier_repeat1] = {.visible = false, .named = false},
|
||||
[aux_sym_struct_specifier_repeat1] = {.visible = false, .named = false},
|
||||
[aux_sym_type_name_repeat1] = {.visible = false, .named = false},
|
||||
[aux_sym_declaration_repeat1] = {.visible = false, .named = false},
|
||||
[aux_sym_designation_repeat1] = {.visible = false, .named = false},
|
||||
[aux_sym_function_declarator_repeat1] = {.visible = false, .named = false},
|
||||
[aux_sym_compound_statement_repeat1] = {.visible = false, .named = false},
|
||||
[aux_sym_call_expression_repeat1] = {.visible = false, .named = false},
|
||||
[ts_builtin_sym_error] = {.visible = true, .named = true},
|
||||
[ts_builtin_sym_end] = {.visible = false, .named = false},
|
||||
[anon_sym_POUNDdefine] = {.visible = true, .named = false},
|
||||
[anon_sym_LF] = {.visible = true, .named = false},
|
||||
[sym_preproc_arg] = {.visible = true, .named = true},
|
||||
[anon_sym_typedef] = {.visible = true, .named = false},
|
||||
[anon_sym_extern] = {.visible = true, .named = false},
|
||||
[anon_sym_static] = {.visible = true, .named = false},
|
||||
[anon_sym_auto] = {.visible = true, .named = false},
|
||||
[anon_sym_register] = {.visible = true, .named = false},
|
||||
[anon_sym_signed] = {.visible = true, .named = false},
|
||||
[anon_sym_unsigned] = {.visible = true, .named = false},
|
||||
[anon_sym_long] = {.visible = true, .named = false},
|
||||
[anon_sym_short] = {.visible = true, .named = false},
|
||||
[anon_sym_struct] = {.visible = true, .named = false},
|
||||
[anon_sym_LBRACE] = {.visible = true, .named = false},
|
||||
[anon_sym_RBRACE] = {.visible = true, .named = false},
|
||||
[anon_sym_COMMA] = {.visible = true, .named = false},
|
||||
[anon_sym_SEMI] = {.visible = true, .named = false},
|
||||
[anon_sym_EQ] = {.visible = true, .named = false},
|
||||
[anon_sym_LBRACK] = {.visible = true, .named = false},
|
||||
[anon_sym_RBRACK] = {.visible = true, .named = false},
|
||||
[anon_sym_DOT] = {.visible = true, .named = false},
|
||||
[anon_sym_LPAREN] = {.visible = true, .named = false},
|
||||
[anon_sym_RPAREN] = {.visible = true, .named = false},
|
||||
[anon_sym_STAR] = {.visible = true, .named = false},
|
||||
[anon_sym_const] = {.visible = true, .named = false},
|
||||
[anon_sym_restrict] = {.visible = true, .named = false},
|
||||
[anon_sym_volatile] = {.visible = true, .named = false},
|
||||
[anon_sym_PLUS] = {.visible = true, .named = false},
|
||||
[anon_sym_AMP] = {.visible = true, .named = false},
|
||||
[sym_string] = {.visible = true, .named = true},
|
||||
[sym_identifier] = {.visible = true, .named = true},
|
||||
[sym_number] = {.visible = true, .named = true},
|
||||
[sym_comment] = {.visible = true, .named = true},
|
||||
[sym_translation_unit] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_preproc_define] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_function_definition] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_declaration_specifiers] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_storage_class_specifier] = {.visible = true, .named = true, .extra = false},
|
||||
[sym__type_specifier] = {.visible = false, .named = false, .extra = false},
|
||||
[sym_numeric_type_specifier] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_struct_specifier] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_type_name] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_struct_declaration] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_parameter_declaration] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_declaration] = {.visible = true, .named = true, .extra = false},
|
||||
[sym__init_declarator] = {.visible = false, .named = false, .extra = false},
|
||||
[sym_initializer] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_initializer_list] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_designation] = {.visible = true, .named = true, .extra = false},
|
||||
[sym__declarator] = {.visible = false, .named = false, .extra = false},
|
||||
[sym__abstract_declarator] = {.visible = false, .named = false, .extra = false},
|
||||
[sym_pointer_declarator] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_abstract_pointer_declarator] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_function_declarator] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_abstract_function_declarator] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_array_declarator] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_abstract_array_declarator] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_type_qualifier] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_compound_statement] = {.visible = true, .named = true, .extra = false},
|
||||
[sym__expression] = {.visible = false, .named = false, .extra = false},
|
||||
[sym_cast_expression] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_math_expression] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_call_expression] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_pointer_expression] = {.visible = true, .named = true, .extra = false},
|
||||
[sym__statement] = {.visible = false, .named = false, .extra = false},
|
||||
[sym_expression_statement] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_macro_type] = {.visible = true, .named = true, .extra = false},
|
||||
[aux_sym_translation_unit_repeat1] = {.visible = false, .named = false, .extra = false},
|
||||
[aux_sym_declaration_specifiers_repeat1] = {.visible = false, .named = false, .extra = false},
|
||||
[aux_sym_numeric_type_specifier_repeat1] = {.visible = false, .named = false, .extra = false},
|
||||
[aux_sym_struct_specifier_repeat1] = {.visible = false, .named = false, .extra = false},
|
||||
[aux_sym_type_name_repeat1] = {.visible = false, .named = false, .extra = false},
|
||||
[aux_sym_declaration_repeat1] = {.visible = false, .named = false, .extra = false},
|
||||
[aux_sym_designation_repeat1] = {.visible = false, .named = false, .extra = false},
|
||||
[aux_sym_function_declarator_repeat1] = {.visible = false, .named = false, .extra = false},
|
||||
[aux_sym_compound_statement_repeat1] = {.visible = false, .named = false, .extra = false},
|
||||
[aux_sym_call_expression_repeat1] = {.visible = false, .named = false, .extra = false},
|
||||
[ts_builtin_sym_error] = {.visible = true, .named = true, .extra = false},
|
||||
[ts_builtin_sym_end] = {.visible = false, .named = false, .extra = false},
|
||||
[anon_sym_POUNDdefine] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_LF] = {.visible = true, .named = false, .extra = false},
|
||||
[sym_preproc_arg] = {.visible = true, .named = true, .extra = false},
|
||||
[anon_sym_typedef] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_extern] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_static] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_auto] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_register] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_signed] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_unsigned] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_long] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_short] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_struct] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_LBRACE] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_RBRACE] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_COMMA] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_SEMI] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_EQ] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_LBRACK] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_RBRACK] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_DOT] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_LPAREN] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_RPAREN] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_STAR] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_const] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_restrict] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_volatile] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_PLUS] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_AMP] = {.visible = true, .named = false, .extra = false},
|
||||
[sym_string] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_identifier] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_number] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_comment] = {.visible = true, .named = true, .extra = true},
|
||||
};
|
||||
|
||||
static TSTree *ts_lex(TSLexer *lexer, TSStateId lex_state) {
|
||||
|
|
|
|||
166
spec/fixtures/parsers/cpp.c
vendored
166
spec/fixtures/parsers/cpp.c
vendored
|
|
@ -174,89 +174,89 @@ static const char *ts_symbol_names[] = {
|
|||
};
|
||||
|
||||
static const TSSymbolMetadata ts_symbol_metadata[SYMBOL_COUNT] = {
|
||||
[sym_translation_unit] = {.visible = true, .named = true},
|
||||
[sym__declaration] = {.visible = false, .named = false},
|
||||
[sym__block_declaration] = {.visible = false, .named = false},
|
||||
[sym_function_definition] = {.visible = true, .named = true},
|
||||
[sym_simple_declaration] = {.visible = true, .named = true},
|
||||
[sym_namespace_alias_definition] = {.visible = true, .named = true},
|
||||
[sym_scoped_identifier] = {.visible = true, .named = true},
|
||||
[sym_declarator] = {.visible = true, .named = true},
|
||||
[sym_abstract_declarator] = {.visible = true, .named = true},
|
||||
[sym_direct_declarator] = {.visible = true, .named = true},
|
||||
[sym_parameter_declaration] = {.visible = true, .named = true},
|
||||
[sym_direct_abstract_declarator] = {.visible = true, .named = true},
|
||||
[sym_cv_qualifier] = {.visible = true, .named = true},
|
||||
[sym_type_id] = {.visible = true, .named = true},
|
||||
[sym_pointer_operator] = {.visible = true, .named = true},
|
||||
[sym_function_body] = {.visible = true, .named = true},
|
||||
[sym_constructor_initializer] = {.visible = true, .named = true},
|
||||
[sym_member_initializer] = {.visible = true, .named = true},
|
||||
[sym_init_declarator] = {.visible = true, .named = true},
|
||||
[sym_decl_specifier] = {.visible = true, .named = true},
|
||||
[sym_storage_class_specifier] = {.visible = true, .named = true},
|
||||
[sym_type_specifier] = {.visible = true, .named = true},
|
||||
[sym_compound_statement] = {.visible = true, .named = true},
|
||||
[sym__statement] = {.visible = false, .named = false},
|
||||
[sym_expression_statement] = {.visible = true, .named = true},
|
||||
[sym_initializer] = {.visible = true, .named = true},
|
||||
[sym_initializer_clause] = {.visible = true, .named = true},
|
||||
[sym_function_specifier] = {.visible = true, .named = true},
|
||||
[sym__expression] = {.visible = false, .named = false},
|
||||
[sym_call_expression] = {.visible = true, .named = true},
|
||||
[sym_relational_expression] = {.visible = true, .named = true},
|
||||
[sym_template_call] = {.visible = true, .named = true},
|
||||
[aux_sym_translation_unit_repeat1] = {.visible = false, .named = false},
|
||||
[aux_sym_function_definition_repeat1] = {.visible = false, .named = false},
|
||||
[aux_sym_simple_declaration_repeat1] = {.visible = false, .named = false},
|
||||
[aux_sym_declarator_repeat1] = {.visible = false, .named = false},
|
||||
[aux_sym_direct_declarator_repeat1] = {.visible = false, .named = false},
|
||||
[aux_sym_pointer_operator_repeat1] = {.visible = false, .named = false},
|
||||
[aux_sym_constructor_initializer_repeat1] = {.visible = false, .named = false},
|
||||
[aux_sym_compound_statement_repeat1] = {.visible = false, .named = false},
|
||||
[aux_sym_call_expression_repeat1] = {.visible = false, .named = false},
|
||||
[ts_builtin_sym_error] = {.visible = true, .named = true},
|
||||
[ts_builtin_sym_end] = {.visible = false, .named = false},
|
||||
[anon_sym_EQ] = {.visible = true, .named = false},
|
||||
[anon_sym_default] = {.visible = true, .named = false},
|
||||
[anon_sym_delete] = {.visible = true, .named = false},
|
||||
[anon_sym_SEMI] = {.visible = true, .named = false},
|
||||
[anon_sym_COMMA] = {.visible = true, .named = false},
|
||||
[anon_sym_namespace] = {.visible = true, .named = false},
|
||||
[anon_sym_COLON_COLON] = {.visible = true, .named = false},
|
||||
[anon_sym_LPAREN] = {.visible = true, .named = false},
|
||||
[anon_sym_RPAREN] = {.visible = true, .named = false},
|
||||
[anon_sym_const] = {.visible = true, .named = false},
|
||||
[anon_sym_volatile] = {.visible = true, .named = false},
|
||||
[anon_sym_STAR] = {.visible = true, .named = false},
|
||||
[anon_sym_AMP] = {.visible = true, .named = false},
|
||||
[anon_sym_AMP_AMP] = {.visible = true, .named = false},
|
||||
[anon_sym_COLON] = {.visible = true, .named = false},
|
||||
[anon_sym_DOT_DOT_DOT] = {.visible = true, .named = false},
|
||||
[anon_sym_initializer_list] = {.visible = true, .named = false},
|
||||
[anon_sym_friend] = {.visible = true, .named = false},
|
||||
[anon_sym_typedef] = {.visible = true, .named = false},
|
||||
[anon_sym_constexpr] = {.visible = true, .named = false},
|
||||
[anon_sym_register] = {.visible = true, .named = false},
|
||||
[anon_sym_static] = {.visible = true, .named = false},
|
||||
[anon_sym_thread_local] = {.visible = true, .named = false},
|
||||
[anon_sym_extern] = {.visible = true, .named = false},
|
||||
[anon_sym_mutable] = {.visible = true, .named = false},
|
||||
[anon_sym_LBRACE] = {.visible = true, .named = false},
|
||||
[anon_sym_RBRACE] = {.visible = true, .named = false},
|
||||
[anon_sym_inline] = {.visible = true, .named = false},
|
||||
[anon_sym_virtual] = {.visible = true, .named = false},
|
||||
[anon_sym_explicit] = {.visible = true, .named = false},
|
||||
[anon_sym_GT] = {.visible = true, .named = false},
|
||||
[anon_sym_GT_EQ] = {.visible = true, .named = false},
|
||||
[anon_sym_EQ_EQ] = {.visible = true, .named = false},
|
||||
[anon_sym_BANG_EQ] = {.visible = true, .named = false},
|
||||
[anon_sym_LT_EQ] = {.visible = true, .named = false},
|
||||
[anon_sym_LT] = {.visible = true, .named = false},
|
||||
[sym_string] = {.visible = true, .named = true},
|
||||
[sym_identifier] = {.visible = true, .named = true},
|
||||
[sym_number] = {.visible = true, .named = true},
|
||||
[sym_comment] = {.visible = true, .named = true},
|
||||
[sym_translation_unit] = {.visible = true, .named = true, .extra = false},
|
||||
[sym__declaration] = {.visible = false, .named = false, .extra = false},
|
||||
[sym__block_declaration] = {.visible = false, .named = false, .extra = false},
|
||||
[sym_function_definition] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_simple_declaration] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_namespace_alias_definition] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_scoped_identifier] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_declarator] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_abstract_declarator] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_direct_declarator] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_parameter_declaration] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_direct_abstract_declarator] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_cv_qualifier] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_type_id] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_pointer_operator] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_function_body] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_constructor_initializer] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_member_initializer] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_init_declarator] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_decl_specifier] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_storage_class_specifier] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_type_specifier] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_compound_statement] = {.visible = true, .named = true, .extra = false},
|
||||
[sym__statement] = {.visible = false, .named = false, .extra = false},
|
||||
[sym_expression_statement] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_initializer] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_initializer_clause] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_function_specifier] = {.visible = true, .named = true, .extra = false},
|
||||
[sym__expression] = {.visible = false, .named = false, .extra = false},
|
||||
[sym_call_expression] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_relational_expression] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_template_call] = {.visible = true, .named = true, .extra = false},
|
||||
[aux_sym_translation_unit_repeat1] = {.visible = false, .named = false, .extra = false},
|
||||
[aux_sym_function_definition_repeat1] = {.visible = false, .named = false, .extra = false},
|
||||
[aux_sym_simple_declaration_repeat1] = {.visible = false, .named = false, .extra = false},
|
||||
[aux_sym_declarator_repeat1] = {.visible = false, .named = false, .extra = false},
|
||||
[aux_sym_direct_declarator_repeat1] = {.visible = false, .named = false, .extra = false},
|
||||
[aux_sym_pointer_operator_repeat1] = {.visible = false, .named = false, .extra = false},
|
||||
[aux_sym_constructor_initializer_repeat1] = {.visible = false, .named = false, .extra = false},
|
||||
[aux_sym_compound_statement_repeat1] = {.visible = false, .named = false, .extra = false},
|
||||
[aux_sym_call_expression_repeat1] = {.visible = false, .named = false, .extra = false},
|
||||
[ts_builtin_sym_error] = {.visible = true, .named = true, .extra = true},
|
||||
[ts_builtin_sym_end] = {.visible = false, .named = false, .extra = false},
|
||||
[anon_sym_EQ] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_default] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_delete] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_SEMI] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_COMMA] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_namespace] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_COLON_COLON] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_LPAREN] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_RPAREN] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_const] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_volatile] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_STAR] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_AMP] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_AMP_AMP] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_COLON] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_DOT_DOT_DOT] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_initializer_list] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_friend] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_typedef] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_constexpr] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_register] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_static] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_thread_local] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_extern] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_mutable] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_LBRACE] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_RBRACE] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_inline] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_virtual] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_explicit] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_GT] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_GT_EQ] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_EQ_EQ] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_BANG_EQ] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_LT_EQ] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_LT] = {.visible = true, .named = false, .extra = false},
|
||||
[sym_string] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_identifier] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_number] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_comment] = {.visible = true, .named = true, .extra = true},
|
||||
};
|
||||
|
||||
static TSTree *ts_lex(TSLexer *lexer, TSStateId lex_state) {
|
||||
|
|
|
|||
168
spec/fixtures/parsers/golang.c
vendored
168
spec/fixtures/parsers/golang.c
vendored
|
|
@ -176,90 +176,90 @@ static const char *ts_symbol_names[] = {
|
|||
};
|
||||
|
||||
static const TSSymbolMetadata ts_symbol_metadata[SYMBOL_COUNT] = {
|
||||
[sym_program] = {.visible = true, .named = true},
|
||||
[sym_package_directive] = {.visible = true, .named = true},
|
||||
[sym_imports_block] = {.visible = true, .named = true},
|
||||
[sym_package_import] = {.visible = true, .named = true},
|
||||
[sym__declaration] = {.visible = false, .named = false},
|
||||
[sym_type_declaration] = {.visible = true, .named = true},
|
||||
[sym_var_declaration] = {.visible = true, .named = true},
|
||||
[sym_func_declaration] = {.visible = true, .named = true},
|
||||
[sym_block_statement] = {.visible = true, .named = true},
|
||||
[sym__type_expression] = {.visible = false, .named = false},
|
||||
[sym_pointer_type] = {.visible = true, .named = true},
|
||||
[sym_map_type] = {.visible = true, .named = true},
|
||||
[sym_slice_type] = {.visible = true, .named = true},
|
||||
[sym_struct_type] = {.visible = true, .named = true},
|
||||
[sym_interface_type] = {.visible = true, .named = true},
|
||||
[sym__statement] = {.visible = false, .named = false},
|
||||
[sym_return_statement] = {.visible = true, .named = true},
|
||||
[sym_short_var_declaration] = {.visible = true, .named = true},
|
||||
[sym_range_statement] = {.visible = true, .named = true},
|
||||
[sym_if_statement] = {.visible = true, .named = true},
|
||||
[sym_expression_statement] = {.visible = true, .named = true},
|
||||
[sym__expression] = {.visible = false, .named = false},
|
||||
[sym_call_expression] = {.visible = true, .named = true},
|
||||
[sym_selector_expression] = {.visible = true, .named = true},
|
||||
[sym_math_op] = {.visible = true, .named = true},
|
||||
[sym_bool_op] = {.visible = true, .named = true},
|
||||
[sym__func_signature] = {.visible = false, .named = false},
|
||||
[sym_package_name] = {.visible = true, .named = true},
|
||||
[sym_var_name] = {.visible = true, .named = true},
|
||||
[sym_type_name] = {.visible = true, .named = true},
|
||||
[aux_sym_program_repeat1] = {.visible = false, .named = false},
|
||||
[aux_sym_program_repeat2] = {.visible = false, .named = false},
|
||||
[aux_sym_imports_block_repeat1] = {.visible = false, .named = false},
|
||||
[aux_sym_block_statement_repeat1] = {.visible = false, .named = false},
|
||||
[aux_sym_struct_type_repeat1] = {.visible = false, .named = false},
|
||||
[aux_sym_interface_type_repeat1] = {.visible = false, .named = false},
|
||||
[aux_sym_return_statement_repeat1] = {.visible = false, .named = false},
|
||||
[aux_sym_short_var_declaration_repeat1] = {.visible = false, .named = false},
|
||||
[aux_sym__func_signature_repeat1] = {.visible = false, .named = false},
|
||||
[aux_sym__func_signature_repeat2] = {.visible = false, .named = false},
|
||||
[aux_sym__func_signature_repeat3] = {.visible = false, .named = false},
|
||||
[ts_builtin_sym_error] = {.visible = true, .named = true},
|
||||
[ts_builtin_sym_end] = {.visible = false, .named = false},
|
||||
[anon_sym_package] = {.visible = true, .named = false},
|
||||
[anon_sym_import] = {.visible = true, .named = false},
|
||||
[anon_sym_LPAREN] = {.visible = true, .named = false},
|
||||
[anon_sym_RPAREN] = {.visible = true, .named = false},
|
||||
[anon_sym_type] = {.visible = true, .named = false},
|
||||
[anon_sym_SEMI] = {.visible = true, .named = false},
|
||||
[anon_sym_var] = {.visible = true, .named = false},
|
||||
[anon_sym_EQ] = {.visible = true, .named = false},
|
||||
[anon_sym_func] = {.visible = true, .named = false},
|
||||
[anon_sym_LBRACE] = {.visible = true, .named = false},
|
||||
[anon_sym_RBRACE] = {.visible = true, .named = false},
|
||||
[anon_sym_STAR] = {.visible = true, .named = false},
|
||||
[anon_sym_map] = {.visible = true, .named = false},
|
||||
[anon_sym_LBRACK] = {.visible = true, .named = false},
|
||||
[anon_sym_RBRACK] = {.visible = true, .named = false},
|
||||
[anon_sym_struct] = {.visible = true, .named = false},
|
||||
[anon_sym_interface] = {.visible = true, .named = false},
|
||||
[anon_sym_return] = {.visible = true, .named = false},
|
||||
[anon_sym_COMMA] = {.visible = true, .named = false},
|
||||
[anon_sym_COLON_EQ] = {.visible = true, .named = false},
|
||||
[anon_sym_for] = {.visible = true, .named = false},
|
||||
[anon_sym_range] = {.visible = true, .named = false},
|
||||
[anon_sym_if] = {.visible = true, .named = false},
|
||||
[anon_sym_else] = {.visible = true, .named = false},
|
||||
[anon_sym_DOT] = {.visible = true, .named = false},
|
||||
[anon_sym_SLASH] = {.visible = true, .named = false},
|
||||
[anon_sym_PLUS] = {.visible = true, .named = false},
|
||||
[anon_sym_DASH] = {.visible = true, .named = false},
|
||||
[anon_sym_PIPE_PIPE] = {.visible = true, .named = false},
|
||||
[anon_sym_AMP_AMP] = {.visible = true, .named = false},
|
||||
[anon_sym_EQ_EQ] = {.visible = true, .named = false},
|
||||
[anon_sym_LT_EQ] = {.visible = true, .named = false},
|
||||
[anon_sym_LT] = {.visible = true, .named = false},
|
||||
[anon_sym_GT_EQ] = {.visible = true, .named = false},
|
||||
[anon_sym_GT] = {.visible = true, .named = false},
|
||||
[anon_sym_BANG] = {.visible = true, .named = false},
|
||||
[sym__line_break] = {.visible = false, .named = false},
|
||||
[sym_string] = {.visible = true, .named = true},
|
||||
[sym__identifier] = {.visible = false, .named = false},
|
||||
[sym_number] = {.visible = true, .named = true},
|
||||
[sym_comment] = {.visible = true, .named = true},
|
||||
[sym_program] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_package_directive] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_imports_block] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_package_import] = {.visible = true, .named = true, .extra = false},
|
||||
[sym__declaration] = {.visible = false, .named = false, .extra = false},
|
||||
[sym_type_declaration] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_var_declaration] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_func_declaration] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_block_statement] = {.visible = true, .named = true, .extra = false},
|
||||
[sym__type_expression] = {.visible = false, .named = false, .extra = false},
|
||||
[sym_pointer_type] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_map_type] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_slice_type] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_struct_type] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_interface_type] = {.visible = true, .named = true, .extra = false},
|
||||
[sym__statement] = {.visible = false, .named = false, .extra = false},
|
||||
[sym_return_statement] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_short_var_declaration] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_range_statement] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_if_statement] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_expression_statement] = {.visible = true, .named = true, .extra = false},
|
||||
[sym__expression] = {.visible = false, .named = false, .extra = false},
|
||||
[sym_call_expression] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_selector_expression] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_math_op] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_bool_op] = {.visible = true, .named = true, .extra = false},
|
||||
[sym__func_signature] = {.visible = false, .named = false, .extra = false},
|
||||
[sym_package_name] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_var_name] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_type_name] = {.visible = true, .named = true, .extra = false},
|
||||
[aux_sym_program_repeat1] = {.visible = false, .named = false, .extra = false},
|
||||
[aux_sym_program_repeat2] = {.visible = false, .named = false, .extra = false},
|
||||
[aux_sym_imports_block_repeat1] = {.visible = false, .named = false, .extra = false},
|
||||
[aux_sym_block_statement_repeat1] = {.visible = false, .named = false, .extra = false},
|
||||
[aux_sym_struct_type_repeat1] = {.visible = false, .named = false, .extra = false},
|
||||
[aux_sym_interface_type_repeat1] = {.visible = false, .named = false, .extra = false},
|
||||
[aux_sym_return_statement_repeat1] = {.visible = false, .named = false, .extra = false},
|
||||
[aux_sym_short_var_declaration_repeat1] = {.visible = false, .named = false, .extra = false},
|
||||
[aux_sym__func_signature_repeat1] = {.visible = false, .named = false, .extra = false},
|
||||
[aux_sym__func_signature_repeat2] = {.visible = false, .named = false, .extra = false},
|
||||
[aux_sym__func_signature_repeat3] = {.visible = false, .named = false, .extra = false},
|
||||
[ts_builtin_sym_error] = {.visible = true, .named = true, .extra = false},
|
||||
[ts_builtin_sym_end] = {.visible = false, .named = false, .extra = false},
|
||||
[anon_sym_package] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_import] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_LPAREN] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_RPAREN] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_type] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_SEMI] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_var] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_EQ] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_func] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_LBRACE] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_RBRACE] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_STAR] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_map] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_LBRACK] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_RBRACK] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_struct] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_interface] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_return] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_COMMA] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_COLON_EQ] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_for] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_range] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_if] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_else] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_DOT] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_SLASH] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_PLUS] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_DASH] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_PIPE_PIPE] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_AMP_AMP] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_EQ_EQ] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_LT_EQ] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_LT] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_GT_EQ] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_GT] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_BANG] = {.visible = true, .named = false, .extra = false},
|
||||
[sym__line_break] = {.visible = false, .named = false, .extra = false},
|
||||
[sym_string] = {.visible = true, .named = true, .extra = false},
|
||||
[sym__identifier] = {.visible = false, .named = false, .extra = false},
|
||||
[sym_number] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_comment] = {.visible = true, .named = true, .extra = false},
|
||||
};
|
||||
|
||||
static TSTree *ts_lex(TSLexer *lexer, TSStateId lex_state) {
|
||||
|
|
|
|||
212
spec/fixtures/parsers/javascript.c
vendored
212
spec/fixtures/parsers/javascript.c
vendored
|
|
@ -220,112 +220,112 @@ static const char *ts_symbol_names[] = {
|
|||
};
|
||||
|
||||
static const TSSymbolMetadata ts_symbol_metadata[SYMBOL_COUNT] = {
|
||||
[sym_program] = {.visible = true, .named = true},
|
||||
[sym__statement] = {.visible = false, .named = false},
|
||||
[sym_expression_statement] = {.visible = true, .named = true},
|
||||
[sym_var_declaration] = {.visible = true, .named = true},
|
||||
[sym_statement_block] = {.visible = true, .named = true},
|
||||
[sym_if_statement] = {.visible = true, .named = true},
|
||||
[sym_switch_statement] = {.visible = true, .named = true},
|
||||
[sym_for_statement] = {.visible = true, .named = true},
|
||||
[sym_for_in_statement] = {.visible = true, .named = true},
|
||||
[sym_while_statement] = {.visible = true, .named = true},
|
||||
[sym_try_statement] = {.visible = true, .named = true},
|
||||
[sym_return_statement] = {.visible = true, .named = true},
|
||||
[sym_throw_statement] = {.visible = true, .named = true},
|
||||
[sym_break_statement] = {.visible = true, .named = true},
|
||||
[sym_delete_statement] = {.visible = true, .named = true},
|
||||
[sym_case] = {.visible = true, .named = true},
|
||||
[sym_default] = {.visible = true, .named = true},
|
||||
[sym_catch] = {.visible = true, .named = true},
|
||||
[sym_finally] = {.visible = true, .named = true},
|
||||
[sym_var_assignment] = {.visible = true, .named = true},
|
||||
[sym__paren_expression] = {.visible = false, .named = false},
|
||||
[sym__expression] = {.visible = false, .named = false},
|
||||
[sym_object] = {.visible = true, .named = true},
|
||||
[sym_array] = {.visible = true, .named = true},
|
||||
[sym_function_expression] = {.visible = true, .named = true},
|
||||
[sym_function_call] = {.visible = true, .named = true},
|
||||
[sym_constructor_call] = {.visible = true, .named = true},
|
||||
[sym_member_access] = {.visible = true, .named = true},
|
||||
[sym_subscript_access] = {.visible = true, .named = true},
|
||||
[sym_assignment] = {.visible = true, .named = true},
|
||||
[sym_math_assignment] = {.visible = true, .named = true},
|
||||
[sym_ternary] = {.visible = true, .named = true},
|
||||
[sym_bool_op] = {.visible = true, .named = true},
|
||||
[sym_math_op] = {.visible = true, .named = true},
|
||||
[sym_rel_op] = {.visible = true, .named = true},
|
||||
[sym_type_op] = {.visible = true, .named = true},
|
||||
[sym_formal_parameters] = {.visible = true, .named = true},
|
||||
[sym_arguments] = {.visible = true, .named = true},
|
||||
[sym_pair] = {.visible = true, .named = true},
|
||||
[aux_sym_program_repeat1] = {.visible = false, .named = false},
|
||||
[aux_sym_var_declaration_repeat1] = {.visible = false, .named = false},
|
||||
[aux_sym_switch_statement_repeat1] = {.visible = false, .named = false},
|
||||
[aux_sym_object_repeat1] = {.visible = false, .named = false},
|
||||
[aux_sym_array_repeat1] = {.visible = false, .named = false},
|
||||
[aux_sym_formal_parameters_repeat1] = {.visible = false, .named = false},
|
||||
[ts_builtin_sym_error] = {.visible = true, .named = true},
|
||||
[ts_builtin_sym_end] = {.visible = false, .named = false},
|
||||
[anon_sym_SEMI] = {.visible = true, .named = false},
|
||||
[anon_sym_var] = {.visible = true, .named = false},
|
||||
[anon_sym_COMMA] = {.visible = true, .named = false},
|
||||
[anon_sym_LBRACE] = {.visible = true, .named = false},
|
||||
[anon_sym_RBRACE] = {.visible = true, .named = false},
|
||||
[anon_sym_if] = {.visible = true, .named = false},
|
||||
[anon_sym_else] = {.visible = true, .named = false},
|
||||
[anon_sym_switch] = {.visible = true, .named = false},
|
||||
[anon_sym_for] = {.visible = true, .named = false},
|
||||
[anon_sym_LPAREN] = {.visible = true, .named = false},
|
||||
[anon_sym_RPAREN] = {.visible = true, .named = false},
|
||||
[anon_sym_in] = {.visible = true, .named = false},
|
||||
[anon_sym_while] = {.visible = true, .named = false},
|
||||
[anon_sym_try] = {.visible = true, .named = false},
|
||||
[anon_sym_return] = {.visible = true, .named = false},
|
||||
[anon_sym_throw] = {.visible = true, .named = false},
|
||||
[anon_sym_break] = {.visible = true, .named = false},
|
||||
[anon_sym_delete] = {.visible = true, .named = false},
|
||||
[anon_sym_case] = {.visible = true, .named = false},
|
||||
[anon_sym_COLON] = {.visible = true, .named = false},
|
||||
[anon_sym_default] = {.visible = true, .named = false},
|
||||
[anon_sym_catch] = {.visible = true, .named = false},
|
||||
[anon_sym_finally] = {.visible = true, .named = false},
|
||||
[anon_sym_EQ] = {.visible = true, .named = false},
|
||||
[anon_sym_LBRACK] = {.visible = true, .named = false},
|
||||
[anon_sym_RBRACK] = {.visible = true, .named = false},
|
||||
[anon_sym_function] = {.visible = true, .named = false},
|
||||
[anon_sym_new] = {.visible = true, .named = false},
|
||||
[anon_sym_DOT] = {.visible = true, .named = false},
|
||||
[anon_sym_PLUS_EQ] = {.visible = true, .named = false},
|
||||
[anon_sym_DASH_EQ] = {.visible = true, .named = false},
|
||||
[anon_sym_STAR_EQ] = {.visible = true, .named = false},
|
||||
[anon_sym_SLASH_EQ] = {.visible = true, .named = false},
|
||||
[anon_sym_QMARK] = {.visible = true, .named = false},
|
||||
[anon_sym_PIPE_PIPE] = {.visible = true, .named = false},
|
||||
[anon_sym_AMP_AMP] = {.visible = true, .named = false},
|
||||
[anon_sym_BANG] = {.visible = true, .named = false},
|
||||
[anon_sym_PLUS_PLUS] = {.visible = true, .named = false},
|
||||
[anon_sym_DASH_DASH] = {.visible = true, .named = false},
|
||||
[anon_sym_STAR] = {.visible = true, .named = false},
|
||||
[anon_sym_SLASH] = {.visible = true, .named = false},
|
||||
[anon_sym_PLUS] = {.visible = true, .named = false},
|
||||
[anon_sym_DASH] = {.visible = true, .named = false},
|
||||
[anon_sym_EQ_EQ_EQ] = {.visible = true, .named = false},
|
||||
[anon_sym_BANG_EQ_EQ] = {.visible = true, .named = false},
|
||||
[anon_sym_LT] = {.visible = true, .named = false},
|
||||
[anon_sym_GT] = {.visible = true, .named = false},
|
||||
[anon_sym_instanceof] = {.visible = true, .named = false},
|
||||
[anon_sym_typeof] = {.visible = true, .named = false},
|
||||
[sym_comment] = {.visible = true, .named = true},
|
||||
[sym_string] = {.visible = true, .named = true},
|
||||
[sym_regex] = {.visible = true, .named = true},
|
||||
[sym_number] = {.visible = true, .named = true},
|
||||
[sym_identifier] = {.visible = true, .named = true},
|
||||
[sym_null] = {.visible = true, .named = true},
|
||||
[sym_undefined] = {.visible = true, .named = true},
|
||||
[sym_true] = {.visible = true, .named = true},
|
||||
[sym_false] = {.visible = true, .named = true},
|
||||
[sym__line_break] = {.visible = false, .named = false},
|
||||
[sym_program] = {.visible = true, .named = true, .extra = false},
|
||||
[sym__statement] = {.visible = false, .named = false, .extra = false},
|
||||
[sym_expression_statement] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_var_declaration] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_statement_block] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_if_statement] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_switch_statement] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_for_statement] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_for_in_statement] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_while_statement] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_try_statement] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_return_statement] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_throw_statement] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_break_statement] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_delete_statement] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_case] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_default] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_catch] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_finally] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_var_assignment] = {.visible = true, .named = true, .extra = false},
|
||||
[sym__paren_expression] = {.visible = false, .named = false, .extra = false},
|
||||
[sym__expression] = {.visible = false, .named = false, .extra = false},
|
||||
[sym_object] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_array] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_function_expression] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_function_call] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_constructor_call] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_member_access] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_subscript_access] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_assignment] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_math_assignment] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_ternary] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_bool_op] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_math_op] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_rel_op] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_type_op] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_formal_parameters] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_arguments] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_pair] = {.visible = true, .named = true, .extra = false},
|
||||
[aux_sym_program_repeat1] = {.visible = false, .named = false, .extra = false},
|
||||
[aux_sym_var_declaration_repeat1] = {.visible = false, .named = false, .extra = false},
|
||||
[aux_sym_switch_statement_repeat1] = {.visible = false, .named = false, .extra = false},
|
||||
[aux_sym_object_repeat1] = {.visible = false, .named = false, .extra = false},
|
||||
[aux_sym_array_repeat1] = {.visible = false, .named = false, .extra = false},
|
||||
[aux_sym_formal_parameters_repeat1] = {.visible = false, .named = false, .extra = false},
|
||||
[ts_builtin_sym_error] = {.visible = true, .named = true, .extra = false},
|
||||
[ts_builtin_sym_end] = {.visible = false, .named = false, .extra = false},
|
||||
[anon_sym_SEMI] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_var] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_COMMA] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_LBRACE] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_RBRACE] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_if] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_else] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_switch] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_for] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_LPAREN] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_RPAREN] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_in] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_while] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_try] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_return] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_throw] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_break] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_delete] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_case] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_COLON] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_default] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_catch] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_finally] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_EQ] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_LBRACK] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_RBRACK] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_function] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_new] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_DOT] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_PLUS_EQ] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_DASH_EQ] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_STAR_EQ] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_SLASH_EQ] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_QMARK] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_PIPE_PIPE] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_AMP_AMP] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_BANG] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_PLUS_PLUS] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_DASH_DASH] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_STAR] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_SLASH] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_PLUS] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_DASH] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_EQ_EQ_EQ] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_BANG_EQ_EQ] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_LT] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_GT] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_instanceof] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_typeof] = {.visible = true, .named = false, .extra = false},
|
||||
[sym_comment] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_string] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_regex] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_number] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_identifier] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_null] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_undefined] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_true] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_false] = {.visible = true, .named = true, .extra = false},
|
||||
[sym__line_break] = {.visible = false, .named = false, .extra = false},
|
||||
};
|
||||
|
||||
static TSTree *ts_lex(TSLexer *lexer, TSStateId lex_state) {
|
||||
|
|
|
|||
36
spec/fixtures/parsers/json.c
vendored
36
spec/fixtures/parsers/json.c
vendored
|
|
@ -44,24 +44,24 @@ static const char *ts_symbol_names[] = {
|
|||
};
|
||||
|
||||
static const TSSymbolMetadata ts_symbol_metadata[SYMBOL_COUNT] = {
|
||||
[sym__value] = {.visible = false, .named = false},
|
||||
[sym_object] = {.visible = true, .named = true},
|
||||
[sym_array] = {.visible = true, .named = true},
|
||||
[aux_sym_object_repeat1] = {.visible = false, .named = false},
|
||||
[aux_sym_array_repeat1] = {.visible = false, .named = false},
|
||||
[ts_builtin_sym_error] = {.visible = true, .named = true},
|
||||
[ts_builtin_sym_end] = {.visible = false, .named = false},
|
||||
[anon_sym_LBRACE] = {.visible = true, .named = false},
|
||||
[anon_sym_COLON] = {.visible = true, .named = false},
|
||||
[anon_sym_COMMA] = {.visible = true, .named = false},
|
||||
[anon_sym_RBRACE] = {.visible = true, .named = false},
|
||||
[anon_sym_LBRACK] = {.visible = true, .named = false},
|
||||
[anon_sym_RBRACK] = {.visible = true, .named = false},
|
||||
[sym_string] = {.visible = true, .named = true},
|
||||
[sym_number] = {.visible = true, .named = true},
|
||||
[sym_null] = {.visible = true, .named = true},
|
||||
[sym_true] = {.visible = true, .named = true},
|
||||
[sym_false] = {.visible = true, .named = true},
|
||||
[sym__value] = {.visible = false, .named = false, .extra = false},
|
||||
[sym_object] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_array] = {.visible = true, .named = true, .extra = false},
|
||||
[aux_sym_object_repeat1] = {.visible = false, .named = false, .extra = false},
|
||||
[aux_sym_array_repeat1] = {.visible = false, .named = false, .extra = false},
|
||||
[ts_builtin_sym_error] = {.visible = true, .named = true, .extra = false},
|
||||
[ts_builtin_sym_end] = {.visible = false, .named = false, .extra = false},
|
||||
[anon_sym_LBRACE] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_COLON] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_COMMA] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_RBRACE] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_LBRACK] = {.visible = true, .named = false, .extra = false},
|
||||
[anon_sym_RBRACK] = {.visible = true, .named = false, .extra = false},
|
||||
[sym_string] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_number] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_null] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_true] = {.visible = true, .named = true, .extra = false},
|
||||
[sym_false] = {.visible = true, .named = true, .extra = false},
|
||||
};
|
||||
|
||||
static TSTree *ts_lex(TSLexer *lexer, TSStateId lex_state) {
|
||||
|
|
|
|||
|
|
@ -55,7 +55,7 @@ class LexTableBuilder {
|
|||
parse_state.lex_state_id = add_lex_state(item_set);
|
||||
}
|
||||
|
||||
LexItemSet error_item_set = build_lex_item_set(parse_table->symbols, true);
|
||||
LexItemSet error_item_set = build_lex_item_set(parse_table->all_symbols(), true);
|
||||
populate_lex_state(error_item_set, LexTable::ERROR_STATE_ID);
|
||||
|
||||
return lex_table;
|
||||
|
|
|
|||
|
|
@ -36,6 +36,7 @@ class ParseTableBuilder {
|
|||
vector<pair<ParseItemSet, ParseStateId>> item_sets_to_process;
|
||||
ParseTable parse_table;
|
||||
std::set<string> conflicts;
|
||||
ParseItemSet null_item_set;
|
||||
|
||||
public:
|
||||
ParseTableBuilder(const SyntaxGrammar &grammar,
|
||||
|
|
@ -65,7 +66,6 @@ class ParseTableBuilder {
|
|||
|
||||
add_reduce_actions(item_set, state_id);
|
||||
add_shift_actions(item_set, state_id);
|
||||
add_shift_extra_actions(item_set, state_id);
|
||||
|
||||
if (!conflicts.empty())
|
||||
return { parse_table, new GrammarError(GrammarErrorTypeParseConflict,
|
||||
|
|
@ -73,10 +73,12 @@ class ParseTableBuilder {
|
|||
*conflicts.begin()) };
|
||||
}
|
||||
|
||||
for (ParseStateId state = 0; state < parse_table.states.size(); state++)
|
||||
for (ParseStateId state = 0; state < parse_table.states.size(); state++) {
|
||||
add_shift_extra_actions(state);
|
||||
add_reduce_extra_actions(state);
|
||||
}
|
||||
|
||||
parse_table.symbols.insert(rules::ERROR());
|
||||
parse_table.symbols.insert({ rules::ERROR(), {} });
|
||||
|
||||
return { parse_table, nullptr };
|
||||
}
|
||||
|
|
@ -127,16 +129,14 @@ class ParseTableBuilder {
|
|||
}
|
||||
}
|
||||
|
||||
void add_shift_extra_actions(const ParseItemSet &item_set,
|
||||
ParseStateId state_id) {
|
||||
void add_shift_extra_actions(ParseStateId state_id) {
|
||||
for (const Symbol &ubiquitous_symbol : grammar.ubiquitous_tokens)
|
||||
add_action(state_id, ubiquitous_symbol, ParseAction::ShiftExtra(),
|
||||
item_set);
|
||||
null_item_set);
|
||||
}
|
||||
|
||||
void add_reduce_extra_actions(ParseStateId state_id) {
|
||||
const ParseState &state = parse_table.states[state_id];
|
||||
const ParseItemSet item_set;
|
||||
|
||||
for (const Symbol &ubiquitous_symbol : grammar.ubiquitous_tokens) {
|
||||
const auto &actions_for_symbol = state.actions.find(ubiquitous_symbol);
|
||||
|
|
@ -148,7 +148,7 @@ class ParseTableBuilder {
|
|||
size_t dest_state_id = action.state_index;
|
||||
ParseAction reduce_extra = ParseAction::ReduceExtra(ubiquitous_symbol);
|
||||
for (const auto &pair : state.actions)
|
||||
add_action(dest_state_id, pair.first, reduce_extra, item_set);
|
||||
add_action(dest_state_id, pair.first, reduce_extra, null_item_set);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -117,7 +117,8 @@ class CCodeGenerator {
|
|||
line("enum {");
|
||||
indent([&]() {
|
||||
bool at_start = true;
|
||||
for (const auto &symbol : parse_table.symbols)
|
||||
for (const auto &entry : parse_table.symbols) {
|
||||
const rules::Symbol &symbol = entry.first;
|
||||
if (!symbol.is_built_in()) {
|
||||
if (at_start)
|
||||
line(symbol_id(symbol) + " = ts_builtin_sym_start,");
|
||||
|
|
@ -125,6 +126,7 @@ class CCodeGenerator {
|
|||
line(symbol_id(symbol) + ",");
|
||||
at_start = false;
|
||||
}
|
||||
}
|
||||
});
|
||||
line("};");
|
||||
line();
|
||||
|
|
@ -133,9 +135,9 @@ class CCodeGenerator {
|
|||
void add_symbol_names_list() {
|
||||
line("static const char *ts_symbol_names[] = {");
|
||||
indent([&]() {
|
||||
for (const auto &symbol : parse_table.symbols)
|
||||
line("[" + symbol_id(symbol) + "] = \"" +
|
||||
sanitize_name_for_string(symbol_name(symbol)) + "\",");
|
||||
for (const auto &entry : parse_table.symbols)
|
||||
line("[" + symbol_id(entry.first) + "] = \"" +
|
||||
sanitize_name_for_string(symbol_name(entry.first)) + "\",");
|
||||
});
|
||||
line("};");
|
||||
line();
|
||||
|
|
@ -144,7 +146,8 @@ class CCodeGenerator {
|
|||
void add_symbol_node_types_list() {
|
||||
line("static const TSSymbolMetadata ts_symbol_metadata[SYMBOL_COUNT] = {");
|
||||
indent([&]() {
|
||||
for (const auto &symbol : parse_table.symbols) {
|
||||
for (const auto &entry : parse_table.symbols) {
|
||||
const rules::Symbol &symbol = entry.first;
|
||||
line("[" + symbol_id(symbol) + "] = {");
|
||||
|
||||
switch (symbol_type(symbol)) {
|
||||
|
|
@ -160,6 +163,13 @@ class CCodeGenerator {
|
|||
break;
|
||||
}
|
||||
|
||||
add(", ");
|
||||
|
||||
if (entry.second.structural)
|
||||
add(".extra = false");
|
||||
else
|
||||
add(".extra = true");
|
||||
|
||||
add("},");
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -104,6 +104,13 @@ set<Symbol> ParseState::expected_inputs() const {
|
|||
return result;
|
||||
}
|
||||
|
||||
set<Symbol> ParseTable::all_symbols() const {
|
||||
set<Symbol> result;
|
||||
for (auto &pair : symbols)
|
||||
result.insert(pair.first);
|
||||
return result;
|
||||
}
|
||||
|
||||
ParseStateId ParseTable::add_state() {
|
||||
states.push_back(ParseState());
|
||||
return states.size() - 1;
|
||||
|
|
@ -111,14 +118,16 @@ ParseStateId ParseTable::add_state() {
|
|||
|
||||
ParseAction &ParseTable::set_action(ParseStateId id, Symbol symbol,
|
||||
ParseAction action) {
|
||||
symbols.insert(symbol);
|
||||
bool structural = action.type != ParseActionTypeShiftExtra;
|
||||
symbols[symbol].structural += structural;
|
||||
states[id].actions[symbol] = vector<ParseAction>({ action });
|
||||
return *states[id].actions[symbol].begin();
|
||||
}
|
||||
|
||||
ParseAction &ParseTable::add_action(ParseStateId id, Symbol symbol,
|
||||
ParseAction action) {
|
||||
symbols.insert(symbol);
|
||||
bool structural = action.type != ParseActionTypeShiftExtra;
|
||||
symbols[symbol].structural += structural;
|
||||
states[id].actions[symbol].push_back(action);
|
||||
return *states[id].actions[symbol].rbegin();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -82,8 +82,13 @@ class ParseState {
|
|||
LexStateId lex_state_id;
|
||||
};
|
||||
|
||||
struct ParseTableSymbolMetadata {
|
||||
bool structural;
|
||||
};
|
||||
|
||||
class ParseTable {
|
||||
public:
|
||||
std::set<rules::Symbol> all_symbols() const;
|
||||
ParseStateId add_state();
|
||||
ParseAction &set_action(ParseStateId state_id, rules::Symbol symbol,
|
||||
ParseAction action);
|
||||
|
|
@ -91,7 +96,7 @@ class ParseTable {
|
|||
ParseAction action);
|
||||
|
||||
std::vector<ParseState> states;
|
||||
std::set<rules::Symbol> symbols;
|
||||
std::map<rules::Symbol, ParseTableSymbolMetadata> symbols;
|
||||
std::set<const Production *> fragile_productions;
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue