5

私の目標は、論理式(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

これは私のアルゴリズムです

  1. 与えられた式S
  2. 上記の文法を使用して式を再帰的に解析し、対応する解析ツリーを構築します
  3. ツリー上のNOT演算子を再帰的に「単純化」して、式をDNFに変換します。
  4. 最終的な解析ツリーを再帰的に調べて、DNF論理式を出力します。

解析ツリーを使用すると、現在のノードの親をチェックし、それをツリーにプッシュするか、ツリーを再配置することで、NOT演算子を簡略化できます(NOT NOTの場合)。次に、木を平らにするのは簡単です。

これは紙の上で機能しますが、今は実際のパーサーで立ち往生しています。これらのルールをパーサークラスに変換するにはどうすればよいですか?外部ライブラリを使用したくないので、パーサーを最初から作成したいと思います。

4

1 に答える 1

1

Treetopを見てください。これはあなたが望むことをするかもしれません。http://treetop.rubyforge.org/

于 2012-10-27T17:04:18.883 に答える