On Friday 11 February 2011 01:03:21 %u wrote:
> Hi,
> 
> I think I'm having a little trouble understanding what's meant by
> context-free grammar. I've read that D is context-free, but is it really?
> What about an expression like:
> 
> int[U] s;
> 
> ? You can't tell -- without looking at the context -- whether U is a data
> type or a number, and so because associative arrays and regular arrays are
> syntactically different elements of the language, the syntax of D is tied
> in with its semantics, just like in C++.
> 
> So is D really context-free? Or am I misunderstanding the meaning of the
> term?

Yes. You're misunderstanding. It's actually quite difficult to parse a language 
if 
its grammar isn't context-free. You really should read up in context-free 
grammars if you want to understand it properly.

Context-free means that it's unambiguous as to which grammar rule is to be 
applied at any point during the parsing process. In this case, U is a symbol. 
The parser probably doesn't care about much more than that. That symbol could 
end up being a number or a type. And actually, it probably isn't even that 
hard. 
U is a class, struct, alias, or template argument. The template argument and 
alias would be substituted with a real type or value before the compiler had to 
determine what type int[U] was.

Not to mention, the context-free grammar is entirely for parsing tokens into an 
abstract syntax tree. The compiler then has to do whatever it does with the AST 
to actually generate assembly from it. So, as long as the parser can parse it 
into the AST, it could be the next stage's problem to determine what that 
really 
means.

Regardless, I suggest that you read a compiler book if you really want to 
understand context-free grammars. I have "Compiler Construction: Principles and 
Practices" by Kenneth C. Louden, which is quite good, but the most popular one 
is the so-called "dragon" book. I'm not sure what it's actual title is though.

- Jonathan M Davis

Reply via email to