寻找表达式评估器

Str*_*kop 16 java

我正在寻找一个简单条件表达式的求值器.表达式应包括变量(只读),字符串,数字和一些基本运算符.

例如这样的表达式:

${a} == "Peter" && ( ${b} == null || ${c} > 10 )
Run Code Online (Sandbox Code Playgroud)

到目前为止,我实现了一个相当"神奇"的解析器,它返回一个我可以评估的AST,但我无法相信我是第一个解决这个问题的人.

我可以使用哪些现有代码?

and*_*soj 14

你看过MVEL吗?它们提供入门指南性能分析.

这是他们的一个简单例子:

// The compiled expression is serializable and can be cached for re-use.
CompiledExpression compiled = MVEL.compileExpression("x * y"); 

Map vars = new HashMap();
vars.put("x", new Integer(5));
vars.put("y", new Integer(10));

// Executes the compiled expression
Integer result = (Integer) MVEL.executeExpression(compiled, vars); 
assert result.intValue() == 50; 
Run Code Online (Sandbox Code Playgroud)

另外(回答我自己的问题)MVEL似乎为字节码生成提供了一些支持.

其他选择,从上述答案和我自己的答案中剔除:

  • MVEL 项目文档已从 codehaus 移出。链接位置是http://mvel.documentnode.com/。github 位置是 - https://github.com/mvel/mvel。 (2认同)

Mik*_*els 8

听起来像JEXL可能适合你.查看其语法参考.


Jac*_*ack 5

为什么不使用Rhino?它是JDK中已经存在的JavaScript引擎。

它可以评估任何你喜欢的JS写..看看这里