problem with declaration grammar?
jerry quinn
jlquinn at optonline.net
Wed Feb 18 22:30:36 PST 2009
Christopher Wright Wrote:
> jerry quinn wrote:
> > Hi there,
> >
> > I'm not sure if I'm missing something, but I'm having trouble seeing that a simple declaration will parse correctly with the D grammar.
> >
> > If we take a declaration statment like:
> >
> > int x = 3;
> >
> > we have (my best guess):
> >
> > DeclarationStatement -> Declaration
> > Declaration -> Decl
> > Decl -> BasicType Declarators ;
> > BasicType -> int
> > Declarators -> DeclaratorInitializer
> > DeclaratorInitializer -> Declarator = Initializer
> > Declarator -> BasicType2 Identifier
> > BasicType2 -> ????
> >
> > I'm thinking that BasicType2 is optional here, rather than required as the grammar shows. Is that correct?
> >
> > Thanks
> > Jerry
>
> . Declaration -> Decl
> . Decl -> BasicType Declarators
> . BasicType -> "int"
> . Declarators -> DeclaratorInitializer
> . DeclaratorInitializer -> Declarator "=" Initializer
> We agree up to here.
>
> . Declarator -> Identifier
> Here, you don't need BasicType2, and if you use it, you recurse, so
> using the rule Declarator -> BasicType2 Declarator here is useless.
What you describe sounds like what I'd expect.
Maybe I'm missing something. The grammar shown in http://www.digitalmars.com/d/2.0/declaration.html has the following rules:
BasicType2:
*
[ ]
[ Expression ]
[ Expression .. Expression ]
[ Type ]
delegate Parameters FunctionAttributesopt
function Parameters FunctionAttributesopt
Declarator:
BasicType2 Declarator DeclaratorSuffixesopt
BasicType2 Identifier DeclaratorSuffixesopt
With this definition, I don't see how you can get Declarator->Identifier.
Jerry
More information about the Digitalmars-d
mailing list