有限状態マシンを使用すると、一般的なテキスト解析のための優れたデザインですか?
-
03-10-2019 - |
質問
私は16進数で満たされたファイルを読んでいます。特定のパターンを特定する必要があります。「AAAD」(引用符なし)と言っています。パターンを見るたびに、他のファイルにデータを生成します。
これは、プログラムの設計において非常に一般的なケースです - 特定のパターンを解析して探しています.
私はそれをaとして設計しました 有限状態マシン 構造化された構造は、Cでそれを使用して構造化しました switch-case
状態を変更する。これは私に起こった最初の実装でした。
- 設計: 可能なより良いデザインはありますか?
- 実装: 私が述べたように、スイッチケースを使用することにいくつかの問題がありますか?
解決
手巻きのFSMは、単純な状況ではうまく機能しますが、状態と入力の数が増えるにつれて扱いにくい傾向があります。
おそらく、既に設計/実装したものを変更する理由はないでしょうが、汎用テキスト解析技術に興味がある場合は、おそらく正規表現、フレックス、バイソン、ANTLRなどを見る必要があります。
他のヒント
恥ずかしいほどシンプルなケースのために if
'sまたは switch
'esで十分です。 POSIXシステムで文字列を解析するために、 男の正規表現(3). 。ファイル全体の完全な機能の解析(複雑な構成など)を使用する レックス/フレックス と YACC/バイソン.
C ++で書くときは、見てください 復gexをブーストします より単純なケースの場合 スピリットを後押しします より複雑なもののために。 Flex&BisonもC ++を使用します。
所属していません StackOverflow