0

Ragel を使用して、C++ で文字列を解析しています。解析を無期限に一時停止し、中断したところから解析を再開できるようにする必要があります。

fbreak現在、仕上げアクションの最後に を付けることで、これを実行しようとしています。これは正常に機能しているようで、制御を親プログラムに戻します。ただし、解析を再開する方法がわかりません。で生成されたコードを呼び出すだけで十分だと思っていました%write execが、そうではないようです。解析に戻ると、元の文字列への参照が間違っているか失われているようです。

ここで C++ で何か間違ったことをしているのか (それは私の母国語ではありません)、それとも Ragel で間違ったアプローチをとっているのかはわかりません。

これが私の開始コードと再開コードです。

const char *p;
const char *pe;

void start()
{
    int len = theString.length();
    char chars[len+1];
    theString.toCharArray(chars, len+1);
    p = chars;
    pe = chars + len;
    resume();
}

void resume() {
    %% write exec;
}

初めて を呼び出すstart()と、ステートマシンは最終的に終了し、 (できれば) 解析を続行するためにfbreak呼び出します。resume()

私が間違っているかもしれないことについての指針はありますか?

4

1 に答える 1

0

ある種のダングリングポインタの問題だったようです。他の場所の初期化を移動するtheStringと、問題が解決したようです。基本的に、私はまだCが苦手です。

于 2012-12-13T00:51:30.827 に答える