私は複数のスレッドから呼び出したいC++プロジェクトにフレックス・モジュールを持っています。 私の.lexファイルのオプションにはスタックとリエントラントが含まれています。 異なるスキャナオブジェクト上のyylexを同時に別のスレッドから呼び出すことができ、1つのレキシングシーケンスがもう1つブロックされていないと仮定すると(と思うが、私は完全にはわかっていないが、だと思います)これらのそれぞれについて?私が見るのは、yyset_out(FILE * handle、yyscan_t scanner)だけですが、ファイルを使わなくてもレキシングの結果が必要なので、ファイルを使用する必要はありません。ファイルI/Oなしのリエントラント・レキシングの結果を取得する
私は入力を設定します。また、私は、一時ファイルにyyset_out呼び出し、ファイルバッファにアクセスできることを実現しますがきれい(以下があるべきかのように、それは私には思える
void scanProcedure(...threadInfo...) {
yyscan_t tscanner;
yylex_init(tscanner);
yy_scan_string(threadInfo->lexMe, tscanner);
yylex(tscanner);
/* how to retrieve results of lexing in a
reentrant manner (no global state info)
without having to do any file i/o */
/* threadInfo-> ?? */
yylex_destroy(tscanner);
}
...
pthread_create(... scanProcedure ... threadInfoA ...);
pthread_create(... scanProcedure ... threadInfoB ...);
pthread_create(... scanProcedure ... threadInfoC ...);
pthread_join(...);
ハックシ)の解決策です。