BNF questions and comments

Kirk McDonald kirklin.mcdonald at gmail.com
Fri Sep 7 00:39:56 PDT 2007


BCS wrote:
> under LinkageType what (from a lexical standpoint) are C, C++, D, etc?
> 

An identifier, an identifier and the ++ operator, and an identifier, 
respectively. This implies that "extern(C ++)" is legal. As with many 
things, the spec simply does not say anything about this.

> ===
> under  Conditional Compilation:
> 
> ConditionalDeclaration:
>    Condition : Declarations
> 
> Condition:
>    StaticIfCondition
> 
> StaticIfCondition:
>    static if ( AssignExpression )
> 
> allowing this:
> 
> static if(0==0) : int i;
> 
> Is this supposed to work? If so what for?
> 

Condition also has the VersionCondition and the DebugCondition in it. It 
is analogous to saying "private:". The block created in this way holds 
until the end of the enclosing block.

> ===
> The format of the bnf section is not consistent. Off hand:
> -many productions are missing the :
> -in most cases operators are unquote but in a few they are
> -opt is used in a few cases but general omitted in favor of other choices
> -grouping is used in 1 or 2 cases but again is generally not used.
> -in two(?) places the "empty" production is used.
> 
> this all comes from extracting the grammar from the docs. I would like 
> to be able to automate this but having these discrepancies requires that 
> I do it by hand.
> 

I once wrote a D parser in Python, by hand, using the pyparsing library, 
so I'm fairly familiar with the spec's grammar's shortcomings. Nevermind 
about the resulting parser, it was basically useless. But the /process/ 
of creating the parser was quite informative. Suffice to say that, yes, 
the spec has quite a lot of holes.

The ultimate guide to the grammar is the DMD front-end source code, 
parse.h and parse.c. (Not to mention lexer.h and lexer.c.) If you 
compare the source to the grammar, it is obvious that the grammar was 
created after the fact. In the cases you've listed -- many of which I 
also listed on the newsgroup, back when I made my parser -- it is 
obvious that it was not created with an overly sharp eye to detail. (If 
you look around for that old thread of mine, I even had lists of what 
the grammar should look like for the missing cases, and where the unused 
cases should appear.)

I mentioned this to Walter at one point at the conference. He knew the 
grammar had issues, but it's simply not a high priority for him. 
However, I suspect that if someone sent him a diff with the various 
documentation fixes, that he might use it.

-- 
Kirk McDonald
http://kirkmcdonald.blogspot.com
Pyd: Connecting D and Python
http://pyd.dsource.org


More information about the Digitalmars-d-learn mailing list