私はここのようなFSM/プッシュダウンオートマトンアプローチを使用してパーサーを構築しました(そしてそれはうまくいきます!):C ++ FSMの設計と所有権 パーサーで問題が発生したときに正常に終了し、有用なエラーメッセージをユーザーに出力できますステージ。
プログラムの残りの部分でそれを実行するための良い方法について考えていましたが、当然、パーサーのアプローチが頭に浮かびました...
私はすべてのオブジェクトを状態にします。これには、実行の段階に応じてオブジェクト固有の関数を呼び出すswitchステートメントを持つ単一のevent()関数があります。オブジェクト固有の列挙型を使用してそれを追跡し、コードをより読みやすくすることができます(case parser
より読みやすくなりcase 5
ます)。m_parent*
これにより、(他の質問のアプローチを使用して)作成した状態のプッシュダウンツリーを閉じることができます。
これは良い設計ですか(FSMモードですべてを強制します)?より良い方法はありますか、そしてそれはどれほど複雑になりますか(FSMの実装とテストは非常に簡単だと思います)?
提案をありがとう!
PS:ブーストには必要なものがすべて揃っていることは知っていますが、特にブーストについては、外部の依存関係を制限したいと思います。c ++ 0xは問題ありません(ただし、ここではあまり関係ないと思います)