Sfoglia il codice sorgente

Use repeat in initializer lists

pull/8/head
Max Brunsfeld 8 anni fa
parent
commit
e8b6879820
2 ha cambiato i file con 34 aggiunte e 37 eliminazioni
  1. +23
    -20
      corpus/expressions.txt
  2. +11
    -17
      grammar.js

+ 23
- 20
corpus/expressions.txt Vedi File

@ -332,8 +332,14 @@ Compound literals
============================================
int main() {
x = (SomeType) { .f1 = 5, .f2 = 6, .f3 = {} };
y = (struct SomeStruct) { 7, 8 };
x = (SomeType) {
.f1.f2[f3] = 5,
.f4 = {}
};
y = (struct SomeStruct) {
7,
8
};
}
---
@ -348,9 +354,14 @@ int main() {
(compound_literal_expression
(type_descriptor (type_identifier))
(initializer_list
(designator (field_identifier)) (number_literal)
(designator (field_identifier)) (number_literal)
(designator (field_identifier)) (initializer_list)))))
(initializer_pair
(field_designator (field_identifier))
(field_designator (field_identifier))
(subscript_designator (identifier))
(number_literal))
(initializer_pair
(field_designator (field_identifier))
(initializer_list))))))
(expression_statement (assignment_expression
(identifier)
(compound_literal_expression
@ -364,7 +375,6 @@ Compound literals with trailing commas
============================================
int main() {
x = (SomeType) { .f1 = 5, .f2 = 6, };
y = (struct SomeStruct) { 7, 8, };
}
@ -375,17 +385,10 @@ int main() {
(primitive_type)
(function_declarator (identifier) (parameter_list))
(compound_statement
(expression_statement (assignment_expression
(identifier)
(compound_literal_expression
(type_descriptor (type_identifier))
(initializer_list
(designator (field_identifier)) (number_literal)
(designator (field_identifier)) (number_literal)))))
(expression_statement (assignment_expression
(identifier)
(compound_literal_expression
(type_descriptor (struct_specifier (type_identifier)))
(initializer_list
(number_literal)
(number_literal))))))))
(expression_statement (assignment_expression
(identifier)
(compound_literal_expression
(type_descriptor (struct_specifier (type_identifier)))
(initializer_list
(number_literal)
(number_literal))))))))

+ 11
- 17
grammar.js Vedi File

@ -695,30 +695,24 @@ module.exports = grammar({
initializer_list: $ => seq(
'{',
optional(seq(
$._initializer_list_contents,
optional(',')
commaSep(choice(
$.initializer_pair,
$._expression,
$.initializer_list
)),
optional(','),
'}'
),
_initializer_list_contents: $ => commaSepTrailing(
$._initializer_list_contents,
seq(
optional(seq(repeat1($.designator), '=')),
choice($._expression, $.initializer_list)
)
initializer_pair: $ => seq(
repeat1(choice($.subscript_designator, $.field_designator)),
'=',
choice($._expression, $.initializer_list)
),
designator: $ => choice(
seq('[', $._expression, ']'),
seq('.', $._field_identifier)
),
subscript_designator: $ => seq('[', $._expression, ']'),
initializer: $ => choice(
$._expression,
$.initializer_list
),
field_designator: $ => seq('.', $._field_identifier),
number_literal: $ => token(seq(
choice(

Caricamento…
Annulla
Salva