context-free grammar

Nick Sabalausky a at a.a
Fri Mar 4 21:07:46 PST 2011


"uri" <fan at languages.org> wrote in message 
news:iks9jb$127g$1 at digitalmars.com...
> Jonathan M Davis Wrote:
>
>> On Friday 04 March 2011 17:05:57 Simon Buerger wrote:
>> > It is often said that D's grammar is easier to parse than C++, i.e. it
>> > should be possible to seperate syntactic and semantic analysis, which
>> > is not possible in C++ with the template-"< >" and so on. But I found
>> > following example:
>> >
>> > The Line "a * b = c;" can be interpreted in two ways:
>> > -> Declaration of variable b of type a*
>> > -> (a*b) is itself a lvalue which is assigned to.
>> >
>> > Current D (gdc 2.051) interprets it always in the first way and yields
>> > an error if the second is meant. The Workaround is simply to use
>> > parens like "(a*b)=c", so it's not a real issue. But at the same time,
>> > C++ (gcc 4.5) has no problem to distinguish it even without parens.
>> >
>> > So, is the advertising as "context-free grammar" wrong?
>>
>> Umm. How could a * b be assigned to? It's definitely not an lvalue. Do 
>> you mean
>> that an overloaded opBinary!"*" is used which returns a ref? It certainly 
>> can't
>> be done normally.
>
> Explain why (a*b) is lvalue in bearophile's second example. This is one of 
> the weird things in D. The language is too complex. It takes years to find 
> out about the corner cases. I wouldn't use it for anything reliable

Corner cases are certainly a PITA in certain corner cases. But simplistic 
languages are a PITA in most everyday cases. If I felt that simpler 
languages were better I'd use Brainfuck as my primary language.




More information about the Digitalmars-d mailing list