Hi,

I have been working on trying to make reenterant and/or thread-safe. There
are couple of things that have come up which might make it difficult to make
the existing implemention thread-safe/re-entrant.

The current implementation is implemented using Flex and YACC.  Flex
implementation has limitations in C mode.  The C lexer generated by flex
cannot be reentrant/threadsafe. Flex generates thread-safe parsers only in
C++ mode. This limation of flex will defeat the whole effort of removing
global variables from IMCC. In my opinion if we cannot get global variable
free code from flex there is no sense in proceeding with cleaning up the
other global variables.

Audrey Tang reccomended using re2c as an alternative to flex (Lemon Parser
replacemet for Yacc). re2c generates reenterant/thread-safe parsers. I also
spend some time reading up on the paper published with re2c. Initial
indicators are that it produces scanners that run faster than flex.

So here are some options that I have come up with that we have. I would like
you guys and especially Allison and Chip to provide some feedback on how to
proceed further.

1st Option: Hack it and patch it to death !!!
-------------------------------------------------------
Since flex is not generating re-eentrant code, this option will get rid of
flex altogether and replace it with re2c. This would require significant
reworking on the code. So the plan of action would be as follows:
    a. Remove flex and implement re2c



2nd: Inaction is the best action !!!
-------------------------------------------

3rd Option: Back to drawing board !!!
------------------------------------------------




--
Thanks,
Vishal

Reply via email to