Reading the text, I think the intent was to have the following ConditionalDeclaration: Condition CCDeclarationBlock Condition CCDeclarationBlock else CCDeclarationBlock Condition : Declarations ConditionalStatement
Looking into this further, dmd doesn't seem to distinguish between using CCDeclarationBlock or NoScopeNonEmptyStatement. The compiler's approach seems reasonable to me. In that case, the grammar here should just be: ConditionalDeclaration: Condition NoScopeNonEmptyStatement Condition NoScopeNonEmptyStatement else NoScopeNonEmptyStatement Condition : Declarations
If a conditional is used in module scope, it cannot contain statements. Hence, the existing grammar is correct.