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()
私が間違っているかもしれないことについての指針はありますか?