Martin Mares <mj@ucw.cz> wrote on 2010/04/29 23:21:48:
Hello!
Haven't you heard a word ? ECHO, REJECT and BEGIN are pre defined actions in flex that you can use in your C code. Go read flex again.
I know that. But what does that really means from the point of view of C syntax (as used in the C snippets contained in the C source)? Go read the C standard ;-)
Does that mean that every occurrence of REJECT as a substring in the C code is interpreted by flex?
Not likely, but I have never tested that.
Or does that mean an occurrence of REJECT as an identifier?
My money is on this one.
Or as a C statement?
Do you see any place in the flex doc which makes this clear?
No, but not so strange as flex/lex is way old.
Historically, all dialects of lex I have ever seen define these constructs as C macros, so that they do not trigger in strings or in non-expanding macro parameters and it is possible to un-/redefine them. If flex suddenly started to scan the source for calls of these actions in a way which does not really respect C syntax, it is at least a breach of long tradition. Whether it is a breach of the specs, nobody can tell as the specs are utterly vague.
Well, it must respect C syntax, how else can one use them in the code? Theoretically one could image that REJECT and friends are changed into some inline function but it would be very unpopular I think.