2011-10-12 5 views
1

私は複数のスレッドから呼び出したい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(...); 

ハックシ)の解決策です。

答えて

1

を見てみましょう、しかし--youはちょうどに出力を送信するためにあなたの行動を記述できることを実行する必要はありませんどこでも好きです。独自のYY_EXTRA_TYPEデータ構造を定義して、yyget_extra/yyset_extraを使ってそれを操作することができます。出力がどこに行くかを追跡するためにスキャナごとの状態を追加する必要がある場合は、

関連する問題