|
|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Igor Plekhov 2:5020/400 05 Nov 2002 11:15:55 To : Pertzel Family Subject : Re: FLEX в многопоточном окружении -------------------------------------------------------------------------------- On Fri, 1 Nov 2002 09:43:22 +0000 (UTC), Pertzel Family <voldemar@relhum.org> wrote: > > > Интересует следующий вопрос : насколько возможно использование flex в > > многопоточном окружении. Hеобходимо поместить парсер в DLL, из которой его > > могут вызвать множество клиентов. > > flex, собака, использует глобальные переменные, > причем, принципиально важные, вроде YYTEXT. > При необходимости создания нескольких > независимых парсеров, используется опция -P, > которая переименовывает глобальные переменные > в сгенерированном Ц-шном коде. это в данном случае не поможет. такое переименование полезно, когда нужно иметь много разных анализаторов. а тут нужен один анализатор для многих клиентов. > Если клиенты при обращении к парсеру всегда > начинают и заканчивают работу по точной границе > лексемы и не оставляют в буффере ввода flex > (речть о flex -- у lex отдельного буфера нет), > то проблем никаких просто не будет. Если же > ситуация не такова, да еще при асинхронной > работе, flex в чистом виде непригоден. *По* > *слухам* для этого есть в самом пакете добавка > -- flex++, которой я сам не пользовался. flex может делать C++ scanner class: You can also use flex to generate a C++ scanner class, using the -+ option (or, equivalently, %option c++), which is automatically specified if the name of the flex exe- cutable ends in a '+', such as flex++. When using this option, flex defaults to generating the scanner to the file lex.yy.cc instead of lex.yy.c. The generated scanner includes the header file FlexLexer.h, which defines the interface to two C++ classes. ... Note that a yyFlexLexer object contains its entire scan- ning state. Thus you can use such objects to create reen- trant scanners. You can instantiate multiple instances of the same yyFlexLexer class, and you can also combine mul- tiple C++ scanner classes together in the same program using the -P option discussed above. не знаю, что есть из доков под виндой, а в юниксовом мане всё описано. я сам этой штукой не пользовался. Игорь -- Registered Linux User #124759 Hi! I'm a .signature virus! Copy me into your ~/.signature to help me spread! --- ifmail v.2.15dev5 * Origin: Demos online service (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/149009305d282.html, оценка из 5, голосов 10
|