Skip to content

Commit fba4abc

Browse files
authored
[spec] Simplify VarDeclarations grammar (#3712)
* [spec] Simplify VarDeclarations grammar C multiple identifier variable declarations with separate type suffixes are no longer supported, so *VarDeclarations* no longer needs to use *Declarators* and the grammar can be simplified. *Declarator* is kept for uses in other files, but could be inlined. I've changed the old alias grammar to be more precise using *Identifiers*, as using a different *TypeSuffix* for a second identifier is an error anyway. (AIUI each identifier is the same type). * See also AutoDeclaration
1 parent faea290 commit fba4abc

File tree

1 file changed

+16
-18
lines changed

1 file changed

+16
-18
lines changed

spec/declaration.dd

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -41,32 +41,26 @@ $(H3 $(LNAME2 variable-declarations, Variable Declarations))
4141

4242
$(GRAMMAR
4343
$(GNAME VarDeclarations):
44-
$(GLINK StorageClasses)$(OPT) $(GLINK2 type, BasicType) $(GLINK Declarators) $(D ;)
44+
$(GLINK StorageClasses)$(OPT) $(GLINK2 type, BasicType) $(GLINK2 type, TypeSuffixes)$(OPT) $(GLINK IdentifierInitializers) $(D ;)
4545
$(GLINK AutoDeclaration)
4646

47-
$(GNAME Declarators):
48-
$(GLINK DeclaratorInitializer)
49-
$(GLINK DeclaratorInitializer) $(D ,) $(GLINK DeclaratorIdentifierList)
47+
$(GNAME IdentifierInitializers): $(LEGACY_LNAME2 Declarators, DeclaratorIdentifierList)
48+
$(GLINK IdentifierInitializer)
49+
$(GLINK IdentifierInitializer) $(D ,) $(GSELF IdentifierInitializers)
5050

51-
$(GNAME DeclaratorInitializer):
52-
$(GLINK VarDeclarator)
53-
$(GLINK VarDeclarator) $(GLINK2 template, TemplateParameters)$(OPT) $(D =) $(GLINK Initializer)
54-
55-
$(GNAME DeclaratorIdentifierList):
56-
$(GLINK DeclaratorIdentifier)
57-
$(GLINK DeclaratorIdentifier) $(D ,) $(GSELF DeclaratorIdentifierList)
58-
59-
$(GNAME DeclaratorIdentifier):$(LEGACY_LNAME2 VarDeclaratorIdentifier)
51+
$(GNAME IdentifierInitializer): $(LEGACY_LNAME2 DeclaratorInitializer, DeclaratorIdentifier)
6052
$(GLINK_LEX Identifier)
6153
$(GLINK_LEX Identifier) $(GLINK2 template, TemplateParameters)$(OPT) $(D =) $(GLINK Initializer)
6254

63-
$(GNAME Declarator):
64-
$(GLINK VarDeclarator)
65-
66-
$(GNAME VarDeclarator):
55+
$(GNAME Declarator): $(LEGACY_LNAME2 VarDeclarator)
6756
$(GLINK2 type, TypeSuffixes)$(OPT) $(GLINK_LEX Identifier)
6857
)
6958

59+
$(P See also:)
60+
* $(RELATIVE_LINK2 declaration_syntax, Declaration Syntax)
61+
* $(GLINK AutoDeclaration)
62+
* $(DDSUBLINK spec/template, variable-template, Variable Templates)
63+
7064
$(H3 $(LNAME2 storage-classes, Storage Classes))
7165

7266
$(P See $(RELATIVE_LINK2 typequal_vs_storageclass, Type Classes vs. Storage Classes).)
@@ -233,10 +227,14 @@ $(H2 $(LNAME2 alias, Alias Declarations))
233227

234228
$(GRAMMAR
235229
$(GNAME AliasDeclaration):
236-
$(D alias) $(GLINK StorageClasses)$(OPT) $(GLINK2 type, BasicType) $(GLINK Declarators) $(D ;)
230+
$(D alias) $(GLINK StorageClasses)$(OPT) $(GLINK2 type, BasicType) $(GLINK2 type, TypeSuffixes)$(OPT) $(GLINK Identifiers) $(D ;)
237231
$(D alias) $(GLINK StorageClasses)$(OPT) $(GLINK2 type, BasicType) $(GLINK2 function, FuncDeclarator) $(D ;)
238232
$(D alias) $(GLINK AliasAssignments) $(D ;)
239233

234+
$(GNAME Identifiers):
235+
$(GLINK_LEX Identifier)
236+
$(GLINK_LEX Identifier) `,` $(GSELF Identifiers)
237+
240238
$(GNAME AliasAssignments):
241239
$(GLINK AliasAssignment)
242240
$(GSELF AliasAssignments) $(D ,) $(GLINK AliasAssignment)

0 commit comments

Comments
 (0)