On 19:54 Tue 30 Mar , Stephen Tetley wrote: > On 30 March 2010 18:55, Serguey Zefirov <[email protected]> wrote: > > Other than that, C preprocessor looks simple. > > Ah no - apparently anything but simple.
I would describe it as "simple but somewhat annoying". This means that guessing at its specification will not result in anything resembling a correct implementation, but reading the specification and implementing accordingly is straightforward. Probably the hardest part is expression evaluation. > You might want to see Jean-Marie Favre's (very readable, amusing) > papers on subject. Much of the behaviour of CPP is not defined and > often inaccurately described, certainly it wouldn't appear to make an > ideal one summer, student project. The only specification of the C preprocessor that matters is the one contained in the specification of the C programming language. The accuracy of any other description of it is not relevant. C is quite possibly the language with the greatest quantity of inaccurate descriptions in existence (scratch that, C++ is likely worse). As with most of the C programming language, a lot of the behaviour is implementation-defined or even undefined, as you suggest. For example: /* implementation-defined */ #pragma launch_missiles /* undefined */ #define explosion defined #if explosion # pragma launch_missiles #endif This makes a preprocessor /easier/ to implement, because in these cases the implementer can do /whatever she wants/, including doing nothing or starting the missile launch procedure. In the implementation-defined case, the implementor must additionally write the decision down somewhere, i.e. "Upon execution of a #pragma launch_missiles directive, all missiles are launched". > http://megaplanet.org/jean-marie-favre/papers/CPPDenotationalSemantics.pdf If this paper had criticised the actual C standard as opposed to a working draft, it would have been easier to take it seriously. I find the published standard quite clear about the requirements of a C preprocessor. Nevertheless, assuming that the complaints of the paper remain valid, it appears to boil down to "The C is preprocessor is weird, and one must read its whole specification to understand all of it". It also seems to contain a bit of "The C standard does not precisely describe the GNU C preprocessor". This work is certainly within the scope of a summer project. -- Nick Bowler, Elliptic Technologies (http://www.elliptictech.com/) _______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
