将逻辑表达式表示为对象?

问题描述 投票:0回答:1

如何将可能包含或不包含括号的逻辑表达式表示为 Java 中的对象? 我希望能够计算从 AA AND B 或更复杂的表达式,如 A AND (B OR (C AND D AND E)) 我尝试表示为以下对象:

public class Condition {
    private boolean checked;
    private String operator; // AND, OR, or NESTED
    private List<Condition> nestedExpressions; // For nested expressions
}

并尝试使用 Condition 对象列表,递归地迭代此列表,但如果我设置一个运算符 NESTED,我无法在其后添加任何内容,因为它不起作用。

有没有更好的方法在java中表示逻辑表达式?或者有什么图书馆可以帮助我吗?

public class Condition {
    private boolean checked;
    private String operator; // AND, OR
}

/\ 此代码适用于简单的、无括号的表达式,例如:A AND B OR C,但我想处理更复杂的结构。

java algorithm data-structures logic logical-operators
1个回答
0
投票

通常,条件将由

Condition
接口定义,其中包含您希望能够使用条件执行的操作的方法,例如
evaluate
它。 然后你就有了实现不同运算符的子类。

将条件建模为data在 Java 中有点尴尬,但条件足够简单,您可以使其工作。 如果我必须这样做,我可能会尝试这样的事情:

enum ConditionOperator { AND, OR };

public class Condition {
    public ConditionOperator operator;
    public List<Condition> conditions;
    public List<String> trueLiterals;
    public List<String> falseLiterals;
}

关于此表示的一些注释:

  • 没有孩子永远是正确的
  • “或者”没有孩子总是错误的
  • 没有 NOT 运算符,因为没有必要。 否定 文字,您可以在
    trueLiterals
    falseLiterals
    之间移动它们。列表。 要否定整个条件,请应用德摩根定理
© www.soinside.com 2019 - 2024. All rights reserved.