用Java实现自由形式查询语言

用Java实现自由形式查询语言,java,antlr,Java,Antlr,我正在开发一个api,它将采用类似“(a

我正在开发一个api,它将采用类似“(a<5)和(B=xyz*)”的搜索字符串,并以正确的结果进行响应。此自定义查询语言是预定义的,我无法更改。我知道我可以为这个表达式指定CFG,然后使用ANTRL构建解析树并实现这个特性。在Java中有没有一种更简单、更有效的方法?是否有任何库可以处理这种通用查询语言?

您可以动态生成java类,或者使用一种可用的脚本语言,例如作为JDK一部分的
JavaScript
。只需创建有效的
JavaScript
语句并对其求值


其他可用的语言有
Groovy
Jython
等,但它们的使用需要外部依赖。我认为你的选择应该受到其他要求的驱动。如果你与社区分享,你可能会得到更具体的建议

Antlr生成的解析器非常高效。它们写起来并不简单,但我想不出任何比这更容易的替代方案

有没有任何库可以处理这种通用查询语言

问题是没有通用查询语言。每一个都是不同的,你的也不例外。。。看样子


如果这只是一种表达式语言,而您只想“解析和评估”它们,我建议您使用Antlr,但不要构建解析树。相反,将求值代码嵌入语法本身,并让每个产品交付求值它匹配的子表达式的结果。(我打赌教程中有这样一个例子……

我看不出这有什么帮助。表达式语言是预定义的。。。而且不太可能与任何现有语言兼容。将一个表达式翻译成另一种语言的源代码,编译并运行它是没有效率的。