bugs/errors in the D BNF
Kirk McDonald
kirklin.mcdonald at gmail.com
Fri Jan 12 19:55:00 PST 2007
Kirk McDonald wrote:
> I've been working on a D parser written in Python. It has become
> abundantly clear during this process that the grammar as defined in the
> spec is to be found wanting in quite a number of ways. I've been
> compiling a list of errors in the grammar. It is not in front of me at
> the moment, but I do plan on posting it at some point.
>
Here it is:
TemplateDeclaration and a few other things are defined but never used
anywhere. Therefore:
DeclDef is missing:
TemplateDeclaration
ClassTemplateDeclaration
FunctionTemplateDeclaration
TemplateMixin
ConditionalDeclaration
StaticAssert
TemplateValueParameter is wrong. It should be something like:
BasicType Declarator
BasicType Declarator TemplateValueParameterSpecialization
BasicType Declarator TemplateValueParameterDefault
BasicType Declarator TemplateValueParameterSpecialization
TemplateValueParameterDefault
Declarator is missing:
BasicType2
Declarator2 is missing:
BasicType2
The current definition of Parameter is just plain broken.
Parameter should be something like:
BasicType
BasicType Declarator = AssignExpression
InOut BasicType
InOut BasicType Declarator = AssignExpression
D's syntax allows template instances to be used as expressions. Therefore:
PrimaryExpression is missing:
TemplateInstance
ImportBind should be:
Identifier
Identifier = Identifier
ConditionalDeclaration should be:
Condition DeclarationBlock
Condition DeclarationBlock else DeclarationBlock
Condition : DeclDefs
DeclarationBlock should be:
DeclDef
{ DeclDefs }
{ }
Therefore, version.html's definition of Declarations is no longer needed.
The definition of DeclarationStatement in the spec does not allow for
nested classes, structs, and so forth. Therefore it should be:
DeclarationStatement:
Declaration
AggregateStatement
MixinStatement
MixinStatement:
TemplateMixin
AggregateStatement:
AggregateDeclaration
ClassDeclaration
InterfaceDeclaration
EnumDeclaration
--
Kirk McDonald
Pyd: Wrapping Python with D
http://pyd.dsource.org
More information about the Digitalmars-d-bugs
mailing list