在Java中实现自由格式查询语言

时间:2013-05-09 09:59:38

标签: java antlr

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

2 个答案:

答案 0 :(得分:2)

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

  

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

问题在于没有通用查询语言这样的东西。每一个都是不同的,你的面貌也不例外......

如果这只是一种表达式语言,并且您只想“解析并评估”它们,我建议您使用Antlr,但不要构造一个解析树。相反,将评估代码嵌入语法本身,并让每个生产都提供评估它匹配的子表达式的结果。 (我打赌有一个例子可以在教程中做到这一点......)

答案 1 :(得分:0)

您可以动态生成java类,也可以使用一种可用的脚本语言,例如: JavaScript是JDK的一部分。只需创建有效的JavaScript语句并对其进行评估即可。

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