对于一个应用程序,我想用算术表达式和变量解析一个String。想象一下这个字符串:
((A + B) * C) / (D - (E * F))
所以我这里有占位符,没有实际的整数/双精度值。我正在搜索一个库,它允许我获得第一个占位符,将(通过数据库查询)一个值放入占位符并继续下一个占位符。
所以我基本上想要做的是允许用户用他们的域语言编写一个字符串,而不知道变量的实际值。因此,应用程序将根据某些“上下文逻辑”提供数值,并输出计算结果。
我用谷歌搜索,没有找到合适的图书馆。我找到了ANTLR,但我认为这对我的用例来说非常“重量级”。有什么建议吗?
答案 0 :(得分:2)
你是对的,ANTLR有点矫枉过正。但是,使用中缀表示法解析算术表达式并不难,请参阅:
此外,您应该考虑使用一些脚本语言,如Groovy或JRuby。此外,JDK 6还提供内置的JavaScript支持。请在此处查看我的回答:Creating meta language with Java。
答案 1 :(得分:0)
如果您只想做简单的表达式,并且事先知道这些表达式的语法,那么您甚至不需要库;你可以用纯Java编写这个简单的代码。
有关如何的详细版本,请参阅此答案: Is there an alternative for flex/bison that is usable on 8-bit embedded systems?
如果用户正在定义自己的表达式语言,如果它总是以几个monadic或二元运算符的形式,并且它们可以指定优先级,则可以通过参数化来弯曲上述答案具有多个优先级的运算符列表的解析器。
如果语言更复杂,您可能需要调查metacompilers。