Skip to content

Commit

Permalink
Merge pull request #162 from amaanq/state-count
Browse files Browse the repository at this point in the history
fix: rework rules to reduce state count
  • Loading branch information
amaanq authored Aug 13, 2023
2 parents 93ef178 + 4d99123 commit b62e08e
Show file tree
Hide file tree
Showing 7 changed files with 78,295 additions and 106,420 deletions.
65 changes: 46 additions & 19 deletions grammar.js
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,8 @@ module.exports = grammar({
[$.attributed_statement],
[$._declaration_modifiers, $.attributed_statement],
[$.enum_specifier],
[$._type_specifier, $._old_style_parameter_list],
[$.parameter_list, $._old_style_parameter_list],
],

word: $ => $.identifier,
Expand All @@ -74,6 +76,7 @@ module.exports = grammar({
// Top level items are block items with the exception of the expression statement
_top_level_item: $ => choice(
$.function_definition,
alias($._old_style_function_definition, $.function_definition),
$.linkage_specification,
$.declaration,
$._top_level_statement,
Expand Down Expand Up @@ -227,25 +230,34 @@ module.exports = grammar({
field('body', $.compound_statement),
),

_old_style_function_definition: $ => seq(
optional($.ms_call_modifier),
$._declaration_specifiers,
field('declarator', alias($._old_style_function_declarator, $.function_declarator)),
repeat($.declaration),
field('body', $.compound_statement),
),

declaration: $ => seq(
$._declaration_specifiers,
commaSep1(field('declarator', choice(
seq($._declarator, optional($.gnu_asm_expression)),
$.init_declarator,
))),
$._declaration_declarator,
';',
),
_declaration_declarator: $ => commaSep1(field('declarator', choice(
seq($._declarator, optional($.gnu_asm_expression)),
$.init_declarator,
))),

type_definition: $ => seq(
optional('__extension__'),
'typedef',
repeat($.type_qualifier),
field('type', $._type_specifier),
repeat($.type_qualifier),
commaSep1(field('declarator', $._type_declarator)),
$._type_definition_type,
$._type_definition_declarators,
repeat($.attribute_specifier),
';',
),
_type_definition_type: $ => seq(repeat($.type_qualifier), field('type', $._type_specifier), repeat($.type_qualifier)),
_type_definition_declarators: $ => commaSep1(field('declarator', $._type_declarator)),

_declaration_modifiers: $ => choice(
$.storage_class_specifier,
Expand Down Expand Up @@ -449,6 +461,11 @@ module.exports = grammar({
field('parameters', $.parameter_list),
)),

_old_style_function_declarator: $ => seq(
field('declarator', $._declarator),
field('parameters', alias($._old_style_parameter_list, $.parameter_list)),
),

array_declarator: $ => prec(1, seq(
field('declarator', $._declarator),
'[',
Expand Down Expand Up @@ -622,13 +639,14 @@ module.exports = grammar({

field_declaration: $ => seq(
$._declaration_specifiers,
commaSep(seq(
field('declarator', $._field_declarator),
optional($.bitfield_clause),
)),
optional($._field_declaration_declarator),
optional($.attribute_specifier),
';',
),
_field_declaration_declarator: $ => commaSep1(seq(
field('declarator', $._field_declarator),
optional($.bitfield_clause),
)),

bitfield_clause: $ => seq(':', $._expression),

Expand All @@ -646,6 +664,11 @@ module.exports = grammar({
commaSep(choice($.parameter_declaration, $.variadic_parameter)),
')',
),
_old_style_parameter_list: $ => seq(
'(',
commaSep(choice($.identifier, $.variadic_parameter)),
')',
),

parameter_declaration: $ => seq(
$._declaration_specifiers,
Expand Down Expand Up @@ -765,14 +788,18 @@ module.exports = grammar({
for_statement: $ => seq(
'for',
'(',
$._for_statement_body,
')',
field('body', $._statement),
),
_for_statement_body: $ => seq(
choice(
field('initializer', $.declaration),
seq(field('initializer', optional(choice($._expression, $.comma_expression))), ';'),
),
field('condition', optional(choice($._expression, $.comma_expression))), ';',
field('condition', optional(choice($._expression, $.comma_expression))),
';',
field('update', optional(choice($._expression, $.comma_expression))),
')',
field('body', $._statement),
),

return_statement: $ => seq(
Expand Down Expand Up @@ -1095,13 +1122,13 @@ module.exports = grammar({
const decimalDigits = seq(repeat1(decimal), repeat(seq(separator, repeat1(decimal))));
return token(seq(
optional(/[-\+]/),
optional(choice('0x', '0b')),
optional(choice(/0[xX]/, /0[bB]/)),
choice(
seq(
choice(
decimalDigits,
seq('0b', decimalDigits),
seq('0x', hexDigits),
seq(/0[bB]/, decimalDigits),
seq(/0[xX]/, hexDigits),
),
optional(seq('.', optional(hexDigits))),
),
Expand All @@ -1114,7 +1141,7 @@ module.exports = grammar({
hexDigits,
)),
)),
repeat(choice('u', 'l', 'U', 'L', 'f', 'F')),
/[uUlLwWfFbBdD]*/,
));
},

Expand Down
Loading

0 comments on commit b62e08e

Please sign in to comment.