我有一个需求,但我不太了解实现细节。我有一个查询字符串,如--〉
(title:java or author:john) and date:[20110303 TO 20110308]
基本上,查询字符串是用lucene语法组成的。2我真正需要做的是把查询字符串解析成AST,然后把AST转换成lucene查询。我不熟悉编译器或解析器技术,我遇到了Irony项目。有人能告诉我如何和从哪里开始吗?使用Irony或手工制作都可以。谢谢你,谢谢你
6jjcrrmo1#
很抱歉回复晚了:一般来说,要创建解析器,最好抽象地描述语法,然后使用解析器生成器生成解析器。我使用PEG语法创建了lucene-query-parser.js库,该语法位于Github存储库here中,该语法特定于PEG.js,并使用JavaScript为解析后的查询实现AST样式的结果。没有必要返回AST风格的结构,但是我发现这对于我编写语法的项目来说是最有用的。您可以重新实现语法以返回任何类型的解析器结果。
w1e3prcc2#
您还可以查看Myna parser,它是一个JavaScript解析库,其中包含一个Lucene grammar示例。Myna解析器自动生成一个AST,您可以轻松地将其转换为所需的任何形式。
3条答案
按热度按时间6jjcrrmo1#
很抱歉回复晚了:
一般来说,要创建解析器,最好抽象地描述语法,然后使用解析器生成器生成解析器。
我使用PEG语法创建了lucene-query-parser.js库,该语法位于Github存储库here中,该语法特定于PEG.js,并使用JavaScript为解析后的查询实现AST样式的结果。
没有必要返回AST风格的结构,但是我发现这对于我编写语法的项目来说是最有用的。您可以重新实现语法以返回任何类型的解析器结果。
w1e3prcc2#
您还可以查看Myna parser,它是一个JavaScript解析库,其中包含一个Lucene grammar示例。Myna解析器自动生成一个AST,您可以轻松地将其转换为所需的任何形式。