3

对于一个应用程序,我想用算术表达式和变量解析一个字符串。想象一下这个字符串:

((A + B) * C) / (D - (E * F))

所以我在这里有占位符,没有实际的整数/双精度值。我正在寻找一个库,它允许我获取第一个占位符,将(例如通过数据库查询)一个值放入占位符并继续下一个占位符。

所以我本质上想要做的是允许用户在不知道变量的实际值的情况下用他们的域语言编写一个字符串。因此,应用程序将根据某些“上下文逻辑”提供数值,并输出计算结果。

我用谷歌搜索并没有找到任何合适的图书馆。我找到了 ANTLR,但我认为它对我的用例来说将是非常“重量级”的。有什么建议么?

4

2 回答 2

2

你说得对,ANTLR 有点矫枉过正。然而,用中缀表示法解析算术表达式并不难,请参阅:

您还应该考虑使用一些脚本语言,例如 Groovy 或 JRuby。此外,JDK 6 及更高版本提供了内置的 JavaScript 支持。在这里查看我的答案:使用 Java 创建元语言

于 2011-10-19T21:18:56.117 回答
0

如果您只想做简单的表达式,并且事先知道这些表达式的语法,那么您甚至不需要库;您可以在纯 Java 中轻松编写代码。

有关如何使用的详细版本,请参阅此答案: 是否有可用于 8 位嵌入式系统的 flex/bison 替代方案?

如果用户正在定义他们自己的表达式语言,如果它总是采用一些单子或二元运算符的形式,并且他们可以指定优先级,您可以通过使用多个级别的运算符列表参数化解析器来改变上述答案的优先级。

如果语言可以更复杂,您可能需要研究metacompilers

于 2011-10-20T07:58:40.163 回答