Hi Andre.

What I find "funny" is that in Ubuntu, I dont even get a warning about
multiple declared symbols in windows I get the warnings but it works (with
/force:multiple), so I will just overwrite the linker options in the
makefile, that should do it.

Thanks for your help.
Jan.

Ps. The flex people just returned to me, and gave me another possibility, I
can use the -S option (manual says this is an option you will never use)
and pass a skeleton file, that will overwrite the standard skeleton and in
that I can change yytext.


On 12 November 2012 15:49, Andre Fischer <[email protected]> wrote:

> On 12.11.2012 14:02, jan iversen wrote:
>
>> hi
>>
>> see below please
>>
>> On 12 November 2012 09:30, Andre Fischer <[email protected]> wrote:
>>
>>  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.
>>>>
>>>>  That is a good way, especially since I can make my own targets (yy.c ->
>>>
>> .o) in the makefile. I will do that.
>>
>> But it does not solve the name issue (yytext), I will make a bug report on
>> flex, and mail one I know that was involved in flex.
>>
>
> Sorry, I did skipped the second problem when I read your mail the first
> time.
>
> I just made an experiment with l10ntools/source/srclex.l.  When I add the
> line
>
> %option prefix="bla"
>
> before the first %% then yytext is replaced but yytext_ptr is not. Besides
> yytext is not really replaced but flex adds a
>
> #define yytext blatext
>
> so that yytext, while not used in the rest of src_yy.c, it will be a
> symbol in the object file.
> That will likely cause problems when linking two lexers into the same
> library/executable, which usually the reason for the renaming in the first
> place.
> Telling flex to produce C++ output might help (replace option -l with
> --c++) but that would require additional work (at least you have to change
> the compilation rules in makefile.mk to compile C++ instead of plain C).
>
> I am sorry to be of no help.
> -Andre
>
>
>> Jan
>>
>>
>>  - 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:****<http://markmail.org/message/**hgphhaciu6nxwtk7#query:+page:**>
>>> 1+mid:hgphhaciu6nxwtk7+state:****results<http://markmail.org/**
>>> message/hgphhaciu6nxwtk7#**query:+page:1+mid:**
>>> hgphhaciu6nxwtk7+state:results<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