この構文の FSM/「プッシュダウンオートマトン」パーサーを実装したいと思います:
私は次のものを持っています:
class State
{
public:
virtual State* event( const string &token );
State* deleteDaughter();
private:
A* m_parent;
A* m_daughter;
}
class SomeState : public State
{
public:
State* event( const std::string &token );
}
WithB
のevent()
実行 (多くの if-elseif の後) return m_parent->deleteDaughter()
. これが怪しい (そしてクラッシュする) ことはわかっていますがState
、娘から親を返し、娘が漏洩していないState
ことを確認する方法が必要です。State
私のイベントループは次のようになります。
while( somestringstream >> token )
state = state->event();
設計とコードの最後の部分を叱る前に、私はここから単純すぎる例を拡張しようとしましたが、これはかなり問題ないようです。わかりやすく簡潔にするために、決定部分を状態自体に移動します。
このテーマに関する本がたくさんあることは理解していますが、私はコンピューター科学者でもプログラマーでもないので、自分でこれを行う方法を学びたいと思っています (もちろん、SO のフレンドリーな人々の助けを借りて)。コンセプトが不明な場合は、お問い合わせください。ありがとう!