是否存在用于存储布尔表达式的数据结构?

Che*_*rry 5 java

我需要存储这样的布尔表达式:

x1 AND x2 AND x3 OR (x4 AND x5) AND (NOT x6)
Run Code Online (Sandbox Code Playgroud)

每个x变量都是一个布尔表达式,例如==!=带有值。问题是存储嵌套ANDOR子句(在它们内部和/或彼此内部)并用包裹它们NOT。包装深度可能非常深。

Java SDK是否具有这些表达式的数据结构?

Ser*_*lov 0

您可以尝试使用jexl(http://commons.apache.org/jexl/

JexlEngine jexl = new JexlEngine();
    jexl.setSilent(true);
    jexl.setLenient(true);

    Expression expression = jexl.createExpression("(a || b && (c && d))");
    JexlContext jexlContext = new MapContext();

    //b and c and d should pass
    jexlContext.set("b",true);
    jexlContext.set("c",true);
    jexlContext.set("d",true);

    assertTrue((Boolean)expression.evaluate(jexlContext));

    jexlContext = new MapContext();

    //b and c and NOT d should be false
    jexlContext.set("b",true);
    jexlContext.set("c",true);

    //note this works without setting d to false on the context
    //because null evaluates to false

    assertFalse((Boolean)expression.evaluate(jexlContext));
Run Code Online (Sandbox Code Playgroud)

这个问题的例子

ps:它不包含在标准sdk中,但很容易使用。