0

这是为了一个任务。我必须将一组语句转换为 CNF 并实现它们。我知道我需要先将前缀符号中的输入转换为中缀,然后重复应用德摩根定律。但是,在将其转换为中缀符号后,我不知道如何继续执行。

  1. 我必须将其转换为中缀还是有更好的过程来做到这一点?
  2. 我一直在这里从 Python 的实现中阅读 BDD 。我正在用 Java 编码,我想自己做,而不使用任何外部库。关于实现算法的任何指针?我是否朝着正确的方向将其转换为中缀?

谢谢!

4

1 回答 1

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

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

于 2013-04-12T03:35:48.560 回答