1

私はフレックススキャナーを使用して大量のファイルをスキャンしています。現在、ファイルをループして呼び出していますyylex()が、flex内の状態がリセットされていないようです。<EOF>変数をリセットするために呼び出す関数を設定するために、そしてBEGIN INITIAL次の呼び出しの前に行うべき適切なことはありyylex()ますか?

これをテストすると、ファイルに一致するものがなくなるとINITIALに戻ってしまうため、無限ループに陥ったように見えます。そのため、ファイルが終了することはありません。

4

1 に答える 1

2

flex manual<EOF>には、マッチを使用してバッファを切り替える例があります。次のコードを使用します。

<<EOF>> {
             if ( --include_stack_ptr  0 )
                 {
                 yyterminate();
                 }

             else
                 {
                 yy_delete_buffer( YY_CURRENT_BUFFER );
                 yy_switch_to_buffer(
                      include_stack[include_stack_ptr] );
                 }
         }

は開始条件をリセットしないのでBEGIN(INITIAL)elseブランチに追加する必要があります。yy_switch_to_buffer

于 2013-03-13T20:09:29.540 に答える