转换为CNF

时间:2013-04-12 03:03:45

标签: java algorithm cnf

这是作业。我必须将语句集转换为CNF并实现它们。我知道我需要先将前缀表示法中的输入转换为中缀,然后重复应用De Morgans的法则。但是,在将其转换为中缀表示法之后,我不知道如何继续执行。

  1. 我是否必须将其转换为中缀或者是否有更好的流程来执行此操作?
  2. 我一直在阅读Python here中的实现中的BDD。我是用Java编码的,我喜欢自己做,而不使用任何外部库。关于实现算法的任何指针?我是否朝着正确的方向转变为中缀?
  3. 谢谢!

1 个答案:

答案 0 :(得分:2)

无需将其转换为中缀 - 您希望尽快离开字符串域,例如

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

等等。要将输入解析为Expressions,您可能会发现使用Recursive Descent Parser很有用,尽管这肯定不是解析输入的唯一方法。将输入转换为符号Expression格式后,应用布尔定律将其转换为CNF会更容易。