Permitted locations of a version condition
Phil Deets
pjdeets2 at gmail.com
Thu Oct 29 23:04:10 PDT 2009
On Thu, 29 Oct 2009 23:26:39 -0500, Ellery Newcomer
<ellery-newcomer at utulsa.edu> wrote:
> Phil Deets wrote:
>>
>> I put the comma inside the version block because then there wouldn't be
>> duplicate commas if the version was removed. If the version number was 6
>> in the above example, it would evaluate to "A, B, C, D, E," with my way,
>> but
>>
>> enum Tag
>> {
>> A, B, C,
>> version (5) {
>> D, E
>> },
>> version (7) {
>> F, G
>> },
>> // ...
>> }
>>
>> would evaluate to "A, B, C, D, E, ," which has two commas in a row.
>> However, you could keep version blocks separated with commas if you
>> specialized the enum grammar specifically for version blocks, which
>> might be the right way to go.
>
> It really doesn't matter. By the time you get around to evaluating the
> version condition, you'll have thrown away all those commas anyways. All
> that matters is that you can clearly distinguish the members. However,
> it will be simpler to implement (and express in ebnf) if you separate
> versions/members with commas. Like
>
> enumBody -> { enumMembers }
> enumMembers -> enumMember , enumMembers
> enumMembers -> enumMember ,
> enumMembers -> enumMember
>
> enumMember -> Identifier
> enumMember -> Identifier = AsgExp
> enumMember -> ccCondition enumBody
>
>
Good point. That makes sense when I think of it that way. I was thinking
in a preprocessor mindset where the text had to make sense if the version
just disappeared like the text does with the C preprocessor.
More information about the Digitalmars-d
mailing list