Re: FLEX в многопоточном окружении
- From
- Igor Plekhov ()
- To
- Pertzel Family
- Date
- 2002-11-05T10:15:55Z
- Area
- RU.ALGORITHMS
From: penguin@tcp.gnezdo.vlad.ru (Igor Plekhov)
On Fri, 1 Nov 2002 09:43:22 +0000 (UTC), Pertzel Family <voldemar@relhum.org> wrote:
>
> > Интересует следующий вопрос : насколько возможно использование flex в
> > многопоточном окружении. Необходимо поместить парсер в 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)