我正在开发一个api,它将采用类似“(A< 5)&(B = xyz *)”的搜索字符串,并以正确的结果作出响应。此自定义查询语言是预定义的,我无法更改它。我知道我可以为此表达式指定CFG,然后使用ANTRL构造解析树并实现此功能。在Java中有一种更简单有效的方法吗?是否有任何库可以处理这种通用查询语言?
答案 0 :(得分:2)
Antlr生成的解析器非常有效。它们写起来并不容易,但我想不出任何明显更容易的替代方案。
是否有任何库可以处理这种通用查询语言?
问题在于没有通用查询语言这样的东西。每一个都是不同的,你的面貌也不例外......
如果这只是一种表达式语言,并且您只想“解析并评估”它们,我建议您使用Antlr,但不要构造一个解析树。相反,将评估代码嵌入语法本身,并让每个生产都提供评估它匹配的子表达式的结果。 (我打赌有一个例子可以在教程中做到这一点......)
答案 1 :(得分:0)
您可以动态生成java类,也可以使用一种可用的脚本语言,例如: JavaScript
是JDK的一部分。只需创建有效的JavaScript
语句并对其进行评估即可。
其他可用语言为Groovy
,Jython
等。但它们的使用需要外部依赖性。我认为您的选择应该由其他要求驱动。如果您与社区分享,您可能会获得更具体的建议。