Как построить синтаксический анализатор синтаксиса lucene для AST - PullRequest
2 голосов
/ 11 марта 2011

У меня есть требование, но я не знаю много о деталях реализации.У меня есть строка запроса вроде ->

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

, в основном строка запроса составлена ​​с синтаксисом lucene.Что мне действительно нужно сделать, это проанализировать строку запроса в AST и преобразовать AST в запрос lucene.

Я не знаком с технологией компилятора или анализатора, и я столкнулся с проектом Irony.Может кто-нибудь указать мне, как и с чего начать?Будет хорошо использовать иронию или ручную работу.

Большое спасибо.

Ответы [ 3 ]

3 голосов
/ 23 февраля 2014

Извините за поздний ответ:

Вообще говоря, для создания синтаксического анализатора лучше всего описать грамматику в аннотации, а затем сгенерировать анализатор с помощью генератора синтаксического анализатора.

Я создал библиотеку lucene-query-parser.js , используя грамматику PEG , которая находится в репозитории Github здесь .Эта грамматика относится только к PEG.js и использует JavaScript для реализации результата стиля AST для проанализированного запроса.

Нет необходимости возвращать структуру стиля AST, но я обнаружил, что этосамый полезный для проекта, для которого я написал синтаксис.Вы можете заново реализовать грамматику, чтобы получить любой результат синтаксического анализа, который вы хотели.

2 голосов
/ 11 марта 2011

Если ваша строка запроса имеет синтаксис Lucene, просто передайте ее методу разбора (String) из QueryParser Lucene.

Это будет возвращать объект Query, представляющий строку запроса.

Если вам нужно расширить или изменить стандартный синтаксис Lucene, тогда вы могли бы начать с просмотра грамматики JavaCC для QueryParser.

Другие модифицировали его в прошлом, чтобы добавить поддержку RegExps

0 голосов
/ 03 июля 2017

Вы также можете взглянуть на синтаксический анализатор Myna , который представляет собой библиотеку JavaScript для разбора, имеющую образец грамматики Lucene . Парсер Myna автоматически генерирует AST, который вы можете легко преобразовать в любую форму, какую захотите.

...