Robert Fraser wrote:
Stewart Gordon wrote:
Have you written a compiler for a superset of C in which arbitrary forward references are allowed? How did you do with overcoming the difficulty that is C's context-sensitive grammar?

C (minus preprocessor, of course) is only context-sensitive with regards to casts AFAIK. Since casts are always expressions, you can rewrite parenthesized expressions to casts (or vice versa) in a second pass but still allow forward references.
<snip>

Not quite.  For example, is

    qwert * yuiop;

a declaration of yuiop as a pointer to a qwert, or an instruction to multiply qwert by yuiop but do nothing with the result?

OK, so since it's ambiguous only within a function, it won't have to worry about running yet another pass to resolve the forward references to yuiop. But FAIK there may be other cases that are more complicated to deal with.

(That said, a D compiler probably needs more passes than this to resolve all possible cases of conditional compilation that may rely on forward referenced symbols. But then again, D is designed from the ground up for multi-pass compilation.)

Stewart.

Reply via email to