对于应用程序,我想用算术表达式和变量来解析字符串。想象一下这个字符串:
((A + B) * C) / (D - (E * F))所以这里有占位符,没有实际的整型/双精度值。我正在寻找一个库,它允许我获取第一个占位符,将一个值放入占位符(例如,通过数据库查询),然后继续下一个占位符。
因此,我实际上想要做的是允许用户在不知道变量的实际值的情况下,用他们的领域语言编写字符串。因此,应用程序将根据某些“上下文逻辑”提供数值,并输出计算结果。
我用谷歌搜索了一下,没有找到合适的库。我找到了ANTLR,但我认为它对我的用例来说是非常“重量级”的。有什么建议吗?
发布于 2011-10-20 05:18:56
你说的对,ANTLR有点过头了。但是,解析中缀表示法中的算术表达式并不难,请参见:
此外,您还应该考虑使用一些脚本语言,如Groovy或JRuby。另外,JDK6及更高版本提供了内置的JavaScript支持。请看我的答案:Creating meta language with Java。
发布于 2011-10-20 15:58:40
如果您想要做的只是简单的表达式,并且事先知道这些表达式的语法,那么您甚至不需要一个库;您可以用纯Java对其进行简单的编码。
有关如何使用Is there an alternative for flex/bison that is usable on 8-bit embedded systems?的详细信息,请参阅此答案
如果用户定义自己的表达式语言,如果它总是以几个一元或二元运算符的形式出现,并且他们可以指定优先级,那么您可以通过在多个优先级的运算符列表中对解析器进行参数化来降低上面的答案。
如果语言可以更复杂,您可能想研究一下metacompilers。
https://stackoverflow.com/questions/7828232
复制相似问题