Original discussion forked in the D grammar thread, so I'm opening a new one 
for this specific issue.
The D grammar is in dire need of an overhaul.

I suggest we discuss changes here and then put everything into github to issue 
a pull request once everything's done.
I already forked the d-programming-language.org repo to get started by fixing 
some mistakes. Hereafter I list some issues that come to my mind.

Alongside missing things (like @attributes I think) and smaller mistakes parts 
of it like the whole declarations subgrammar are overly complex
and allow strange constructs, partly cause C style arrays and function pointers 
are still in there even though considered harmful and thus deprecated.
(see http://www.digitalmars.com/d/2.0/declaration.html)

Furthermore function declarations are obscurely woven into all those 
productions.
So, correct me if I'm wrong but the current grammar even allows monsters like
auto ubyte[] ([] bar []) (T)(int i) const if(someCodition)  = 2 , foo = 5 ;


Also, like Rainer proposed, BasicType2 should be somehow pulled out of 
Declarator to get rid of the 
DeclaratorInitializer-DeclaratorIdentifierList-DeclaratorIdentifier construct 
which CMIIW only exists to disallow multiple types: int a, *b;


>> isn't AutoDeclaration already covered by Decl -> StorageClasses Decl and so 
>> on?
Ok it's just an misleading name. It covers not only declarations with 'auto' 
but all Declarations where no type but only a StorageClass is given: shared a = 
5;


>> Also there are 3 different instances of mixin: MixinExpression, 
>> MixinStatement and MixinDeclaration. Even though they all come down to the 
>> same thing.
> I think, the different mixin variants are ok, because you might want to 
> generate different AST for these.
Well I can imagine that MixinStatement is necessary because if you have an 
ExpStatement with a MixinExpression the result is probably discarded (just like 
'a' is discarded in a = 5;).
But why do you need another MixinDeclaration?


>> Modifiers like shared are repeated, e.g. in BasicType, Attribute, 
>> TypeSpecialization. 
> Yes the confusion of const/shared/immutable etc in 
> Attribute,StorageClass,Types,etc causes a lot of headaches.

Reply via email to