Skip to content

Commit

Permalink
Merge pull request #664 from 9rnsr/fix_declaration
Browse files Browse the repository at this point in the history
Issue 13538 & 13539 - Improve variable declaration grammar for old C style syntax
  • Loading branch information
MartinNowak committed Oct 12, 2014
2 parents ed1cfd0 + 06f8d0b commit 3b11015
Show file tree
Hide file tree
Showing 2 changed files with 73 additions and 27 deletions.
49 changes: 36 additions & 13 deletions declaration.dd
Expand Up @@ -22,41 +22,64 @@ $(GNAME Declarators):
$(I DeclaratorInitializer) $(D ,) $(GLINK DeclaratorIdentifierList)

$(GNAME DeclaratorInitializer):
$(GLINK Declarator)
$(GLINK Declarator) $(GLINK2 template, TemplateParameters)$(OPT) $(D =) $(GLINK Initializer)
$(GLINK VarDeclarator)
$(GLINK VarDeclarator) $(GLINK2 template, TemplateParameters)$(OPT) $(D =) $(GLINK Initializer)
$(GLINK AltDeclarator)
$(GLINK AltDeclarator) $(D =) $(GLINK Initializer)

$(GNAME DeclaratorIdentifierList):
$(GLINK DeclaratorIdentifier)
$(GLINK DeclaratorIdentifier) $(D ,) $(I DeclaratorIdentifierList)

$(GNAME DeclaratorIdentifier):
$(GLINK VarDeclaratorIdentifier)
$(GLINK AltDeclaratorIdentifier)

$(GNAME VarDeclaratorIdentifier):
$(I Identifier)
$(I Identifier) $(GLINK2 template, TemplateParameters)$(OPT) $(D =) $(GLINK Initializer)

$(GNAME AltDeclaratorIdentifier):
$(GLINK BasicType2) $(I Identifier) $(GLINK AltDeclaratorSuffixes)$(OPT)
$(GLINK BasicType2) $(I Identifier) $(GLINK AltDeclaratorSuffixes)$(OPT) $(D =) $(GLINK Initializer)
$(GLINK BasicType2)$(OPT) $(I Identifier) $(GLINK AltDeclaratorSuffixes)
$(GLINK BasicType2)$(OPT) $(I Identifier) $(GLINK AltDeclaratorSuffixes) $(D =) $(GLINK Initializer)

$(GNAME Declarator):
$(GLINK BasicType2)$(OPT) $(D $(LPAREN)) $(I Declarator) $(D $(RPAREN)) $(GLINK DeclaratorSuffixes)$(OPT)
$(GLINK BasicType2)$(OPT) $(I Identifier) $(GLINK DeclaratorSuffixes)$(OPT)
$(GLINK VarDeclarator)
$(GLINK AltDeclarator)

$(GNAME VarDeclarator):
$(GLINK BasicType2)$(OPT) $(I Identifier)

$(GNAME Declarator2):
$(GLINK BasicType2)$(OPT) $(GLINK DeclaratorSuffixes)$(OPT)
$(GLINK BasicType2)$(OPT) $(D $(LPAREN)) $(I Declarator2) $(D $(RPAREN)) $(GLINK DeclaratorSuffixes)$(OPT)
$(GNAME AltDeclarator):
$(GLINK BasicType2)$(OPT) $(I Identifier) $(GLINK AltDeclaratorSuffixes)
$(GLINK BasicType2)$(OPT) $(D $(LPAREN)) $(I AltDeclaratorX) $(D $(RPAREN))
$(GLINK BasicType2)$(OPT) $(D $(LPAREN)) $(I AltDeclaratorX) $(D $(RPAREN)) $(GLINK AltFuncDeclaratorSuffix)
$(GLINK BasicType2)$(OPT) $(D $(LPAREN)) $(I AltDeclaratorX) $(D $(RPAREN)) $(GLINK AltDeclaratorSuffixes)

$(GNAME DeclaratorSuffixes):
$(GLINK DeclaratorSuffix)
$(GLINK DeclaratorSuffix) $(I DeclaratorSuffixes)
$(GNAME AltDeclaratorX):
$(GLINK BasicType2)$(OPT) $(I Identifier)
$(GLINK BasicType2)$(OPT) $(I Identifier) $(GLINK AltFuncDeclaratorSuffix)
$(GLINK AltDeclarator)

$(GNAME DeclaratorSuffix):
$(GNAME AltDeclaratorSuffixes):
$(GLINK AltDeclaratorSuffix)
$(GLINK AltDeclaratorSuffix) $(I AltDeclaratorSuffixes)

$(GNAME AltDeclaratorSuffix):
$(D [ ])
$(D [) $(VEXPRESSION) $(D ])
$(D [) $(GLINK Type) $(D ])

$(GNAME AltFuncDeclaratorSuffix):
$(GLINK2 function, Parameters) $(GLINK2 function, MemberFunctionAttributes)$(OPT)
$(GLINK2 template, TemplateParameters) $(GLINK2 function, Parameters) $(GLINK2 function, MemberFunctionAttributes)$(OPT) $(GLINK2 template, Constraint)$(OPT)
)

$(GRAMMAR
$(GNAME Type):
$(GLINK TypeCtors)$(OPT) $(GLINK BasicType)
$(GLINK TypeCtors)$(OPT) $(GLINK BasicType) $(GLINK Declarator2)
$(GLINK TypeCtors)$(OPT) $(GLINK BasicType) $(GLINK AltDeclarator)

$(GNAME TypeCtors):
$(GLINK TypeCtor)
Expand Down
51 changes: 37 additions & 14 deletions grammar.dd
Expand Up @@ -11,7 +11,7 @@ $(H3 $(LNAME2 type, Type))
$(GRAMMAR
$(GNAME Type):
$(GLINK TypeCtors)$(OPT) $(GLINK BasicType)
$(GLINK TypeCtors)$(OPT) $(GLINK BasicType) $(GLINK Declarator2)
$(GLINK TypeCtors)$(OPT) $(GLINK BasicType) $(GLINK AltDeclarator)

$(GNAME TypeCtors):
$(GLINK TypeCtor)
Expand Down Expand Up @@ -1014,35 +1014,58 @@ $(GNAME Declarators):
$(I DeclaratorInitializer) $(D ,) $(GLINK DeclaratorIdentifierList)

$(GNAME DeclaratorInitializer):
$(GLINK Declarator)
$(GLINK Declarator) $(D =) $(GLINK Initializer)
$(GLINK VarDeclarator)
$(GLINK VarDeclarator) $(GLINK TemplateParameters)$(OPT) $(D =) $(GLINK Initializer)
$(GLINK AltDeclarator)
$(GLINK AltDeclarator) $(D =) $(GLINK Initializer)

$(GNAME DeclaratorIdentifierList):
$(GLINK DeclaratorIdentifier)
$(GLINK DeclaratorIdentifier) $(D ,) $(I DeclaratorIdentifierList)

$(GNAME DeclaratorIdentifier):
$(GLINK VarDeclaratorIdentifier)
$(GLINK AltDeclaratorIdentifier)

$(GNAME VarDeclaratorIdentifier):
$(I Identifier)
$(I Identifier) $(D =) $(GLINK Initializer)
$(I Identifier) $(GLINK TemplateParameters)$(OPT) $(D =) $(GLINK Initializer)

$(GNAME AltDeclaratorIdentifier):
$(GLINK BasicType2) $(I Identifier) $(GLINK AltDeclaratorSuffixes)$(OPT)
$(GLINK BasicType2) $(I Identifier) $(GLINK AltDeclaratorSuffixes)$(OPT) $(D =) $(GLINK Initializer)
$(GLINK BasicType2)$(OPT) $(I Identifier) $(GLINK AltDeclaratorSuffixes)
$(GLINK BasicType2)$(OPT) $(I Identifier) $(GLINK AltDeclaratorSuffixes) $(D =) $(GLINK Initializer)

$(GNAME Declarator):
$(GLINK BasicType2)$(OPT) $(D $(LPAREN)) $(I Declarator) $(D $(RPAREN)) $(GLINK DeclaratorSuffixes)$(OPT)
$(GLINK BasicType2)$(OPT) $(I Identifier) $(GLINK DeclaratorSuffixes)$(OPT)
$(GLINK VarDeclarator)
$(GLINK AltDeclarator)

$(GNAME VarDeclarator):
$(GLINK BasicType2)$(OPT) $(I Identifier)

$(GNAME Declarator2):
$(GLINK BasicType2)$(OPT) $(GLINK DeclaratorSuffixes)$(OPT)
$(GLINK BasicType2)$(OPT) $(D $(LPAREN)) $(I Declarator2) $(D $(RPAREN)) $(GLINK DeclaratorSuffixes)$(OPT)
$(GNAME AltDeclarator):
$(GLINK BasicType2)$(OPT) $(I Identifier) $(GLINK AltDeclaratorSuffixes)
$(GLINK BasicType2)$(OPT) $(D $(LPAREN)) $(I AltDeclaratorX) $(D $(RPAREN))
$(GLINK BasicType2)$(OPT) $(D $(LPAREN)) $(I AltDeclaratorX) $(D $(RPAREN)) $(GLINK AltFuncDeclaratorSuffix)
$(GLINK BasicType2)$(OPT) $(D $(LPAREN)) $(I AltDeclaratorX) $(D $(RPAREN)) $(GLINK AltDeclaratorSuffixes)

$(GNAME DeclaratorSuffixes):
$(GLINK DeclaratorSuffix)
$(GLINK DeclaratorSuffix) $(I DeclaratorSuffixes)
$(GNAME AltDeclaratorX):
$(GLINK BasicType2)$(OPT) $(I Identifier)
$(GLINK BasicType2)$(OPT) $(I Identifier) $(GLINK AltFuncDeclaratorSuffix)
$(GLINK AltDeclarator)

$(GNAME DeclaratorSuffix):
$(GNAME AltDeclaratorSuffixes):
$(GLINK AltDeclaratorSuffix)
$(GLINK AltDeclaratorSuffix) $(I AltDeclaratorSuffixes)

$(GNAME AltDeclaratorSuffix):
$(D [ ])
$(D [) $(ASSIGNEXPRESSION) $(D ])
$(D [) $(GLINK Type) $(D ])

$(GNAME AltFuncDeclaratorSuffix):
$(GLINK Parameters) $(GLINK MemberFunctionAttributes)$(OPT)
$(GLINK TemplateParameters) $(GLINK Parameters) $(GLINK MemberFunctionAttributes)$(OPT) $(GLINK Constraint)$(OPT)
)

$(GRAMMAR
Expand Down

0 comments on commit 3b11015

Please sign in to comment.