2011-03-11 69 views
2

我有一个需求,但我对实现细节知之甚少。 我有一个查询字符串喜欢 - >如何构建解析器来将lucene语法解析为AST

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

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

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

非常感谢。

回答

2

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

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

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

其他人在过去修改它add support for RegExps

+0

我知道lucene的QueryParser。我实际上想设计自己的语法,但语法与lucene的查询语法非常相似。与lucene的语法不完全相同。所以我需要知道如何开始或借鉴任何现有的开源项目的想法(实现)来实现它。 – ffmm 2011-03-11 16:00:11

3

对不起,我迟到的回应:

一般而言,创建一个解析器,这是最好的描述语法抽象,然后使用生成的解析器一个解析器生成器。

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

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

0

您还可以查看Myna parser这是一个JavaScript解析库,其中包含样本Lucene grammar。 Myna解析器自动生成一个AST,你可以很容易地转换成你想要的任何形式。