0

これは課題用です。一連のステートメントを CNF に変換して実装する必要があります。最初に接頭辞表記の入力を中置表記に変換してから、ド・モルガンスの法則を繰り返し適用する必要があることはわかっています。しかし、中置記法に変換した後の実装の進め方がわかりません。

  1. それを中置に変換する必要がありますか、それともこれを行うためのより良いプロセスはありますか?
  2. 私は Python での実装から BDD を読んでいます。私はJavaでコーディングしていますが、外部ライブラリを使用せずに自分でやりたいと思っています。実装アルゴリズムに関する指針はありますか? それを中置に変換する正しい方向に進んでいますか?

ありがとう!

4

1 に答える 1

2

これを infix に変換する必要はありません。たとえば、文字列のドメインからできるだけ早く抜け出したい場合などです。

public abstract class Expression
public abstract class BinaryExpression extends Expression {
    private Expression expr1;
    private Expression expr2;
    public Expression getExpr1() { return expr1; }
    public void setExpr1(Expression expr) { expr1 = expr; }
}
public abstract class UnaryExpression extends Expression
public class Or extends BinaryExpression
public class Not extends UnaryExpression

等々。入力を解析するには、 Recursive Descent ParserExpressionsを使用すると便利な場合がありますが、入力を解析する方法はこれだけではありません。入力をシンボリック形式に変換すると、ブール法則を適用して CNF に変換するのがはるかに簡単になります。Expression

于 2013-04-12T03:35:48.560 に答える