0

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

4

2 回答 2

2

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

有没有可以处理这种通用查询语言的库?

问题是没有通用查询语言之类的东西。每一个都是不同的,你的也不例外……从外观上看。

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

于 2013-05-09T10:25:53.737 回答
0

您可以即时生成 java 类,也可以使用一种可用的脚本语言,例如JavaScript,它是 JDK 的一部分。只需创建有效JavaScript的陈述并评估它。

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

于 2013-05-09T10:03:27.673 回答