On 11.11.2012 22:06, jan iversen wrote:
Hi.

I would like to hear your opinion on the following problem:

The l10n tools uses flex, which is quite nice, however I have found two
problems with flex:

- the .l sources defines YYLMAX, but the generated .c source declares
yytext[YYLMAX] BEFORE the definition code it sucked in. I have verified
this with the flex sources, nothing to do about it. the flex generated c
sources start with flex things (including yytext[YYLMAX]) and then the
first part of the .l file is included. The manual states to use YYLMAX to
change the yytext buffer size, but with the current flex sources it does
not work.

- the .l sources defines a '%option prefix="genXrm_"`which according to the
manual should replace all yy in the generated code, however it does not
work for yytext and yytext_ptr, because the are instanciated before the
code is included.

The leads to two problems:
- YYLMAX not being used, it a performance degradation on all platforms (but
no real problem).
- yytext not being changed, is in Ubuntu (linux) not a problem, but in
windows I had to use a new swich (/forcemultiple), and I have no clue about
mac.

I see different solutions:
1) I edit the generated .c file, and make a thick note, that if the .l file
is translated, that has to be changed.
2) I create a sed that takes the output of flex and does the trix, this
requires changing the details of the make files.
3) I report the bug to the flex people with a patch, and we wait until a
new version is ready.

I am for version 1), but I would like to hear opinions ?

I found an answer via Google on another Apache mailing list (Apache Thrift):
http://markmail.org/message/hgphhaciu6nxwtk7#query:+page:1+mid:hgphhaciu6nxwtk7+state:results

In short:
Add "CPPFLAGS='-DYYLMAX=whatever'" to the compiler invocation (not the call to flex that converts %lex.l to %_yy.c) However, if I look at l10ntools/source/makefile.mk, then I don't see an explicit compile rule for the %_yy.c files. You may have to add one.


Oh, and I think option 3) would be good to do also, without the waiting part.

-Andre

Reply via email to