私の目標は、論理式(A OR NOT(B AND C)など)を取り、それを選言標準形に変換する関数を作成することです。(AまたはNOT BまたはNOTC)
論理式を生成する文法を書きました
S => !S
S => (S)
S => S op S
S => W
op => AND | OR
W => A | B | C | ... | Z
これは私のアルゴリズムです
- 与えられた式S
- 上記の文法を使用して式を再帰的に解析し、対応する解析ツリーを構築します
- ツリー上のNOT演算子を再帰的に「単純化」して、式をDNFに変換します。
- 最終的な解析ツリーを再帰的に調べて、DNF論理式を出力します。
解析ツリーを使用すると、現在のノードの親をチェックし、それをツリーにプッシュするか、ツリーを再配置することで、NOT演算子を簡略化できます(NOT NOTの場合)。次に、木を平らにするのは簡単です。
これは紙の上で機能しますが、今は実際のパーサーで立ち往生しています。これらのルールをパーサークラスに変換するにはどうすればよいですか?外部ライブラリを使用したくないので、パーサーを最初から作成したいと思います。