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
