首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带占位符的简单java递归下降解析库

带占位符的简单java递归下降解析库
EN

Stack Overflow用户
提问于 2011-10-20 05:13:20
回答 2查看 1.6K关注 0票数 3

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

代码语言:javascript
运行
复制
((A + B) * C) / (D - (E * F))

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

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

我用谷歌搜索了一下,没有找到合适的库。我找到了ANTLR,但我认为它对我的用例来说是非常“重量级”的。有什么建议吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-20 05:18:56

你说的对,ANTLR有点过头了。但是,解析中缀表示法中的算术表达式并不难,请参见:

  • Operator-precedence parser
  • Shunting-yard algorithm
  • Algorithms for Parsing Arithmetic Expressions

此外,您还应该考虑使用一些脚本语言,如Groovy或JRuby。另外,JDK6及更高版本提供了内置的JavaScript支持。请看我的答案:Creating meta language with Java

票数 2
EN

Stack Overflow用户

发布于 2011-10-20 15:58:40

如果您想要做的只是简单的表达式,并且事先知道这些表达式的语法,那么您甚至不需要一个库;您可以用纯Java对其进行简单的编码。

有关如何使用Is there an alternative for flex/bison that is usable on 8-bit embedded systems?的详细信息,请参阅此答案

如果用户定义自己的表达式语言,如果它总是以几个一元或二元运算符的形式出现,并且他们可以指定优先级,那么您可以通过在多个优先级的运算符列表中对解析器进行参数化来降低上面的答案。

如果语言可以更复杂,您可能想研究一下metacompilers

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7828232

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档