如何构建解析器以将lucene语法解析为AST

时间:2011-03-11 06:07:15

标签: parsing lucene abstract-syntax-tree

我有一个要求但我对实现细节知之甚少。 我有一个查询字符串,如 - >

(title:java or author:john) and date:[20110303 TO 20110308]

基本上查询字符串由lucene语法组成。 我真正需要做的是将查询字符串解析为AST并将AST转换为lucene查询。

我不熟悉编译器或解析器技术,我遇到了Irony项目。 有人能指出我如何以及从哪里开始?使用反讽或手工制作就可以了。

非常感谢。

3 个答案:

答案 0 :(得分:3)

对于迟到的回复感到抱歉:

一般来说,要创建解析器,最好在摘要中描述语法,然后使用解析器生成器生成解析器。

我使用lucene-query-parser.js语法创建了PEG库,该语法位于Github repo here中。该语法特定于PEG.js,并使用JavaScript为解析的查询实现AST样式结果。

没有必要返回AST样式结构,但我发现这对我编写语法的项目最有用。您可以重新实现语法以返回您想要的任何类型的解析器结果。

答案 1 :(得分:2)

如果您的查询字符串是Lucene语法,那么只需将其传递给Lucene的QueryParser的parse(String)方法。

这将返回一个表示查询字符串的Query对象。

如果您需要扩展或修改标准的lucene语法,那么您可以先查看JavaCC Grammar for QueryParser

其他人已将其修改为add support for RegExps

答案 2 :(得分:0)

您还可以查看Myna parser,它是一个包含示例Lucene grammar的JavaScript解析库。 Myna解析器自动生成一个AST,您可以轻松地将其转换为您想要的任何形式。