Руководство для начинающих по написанию грамматики - PullRequest
3 голосов
/ 31 января 2012

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

Одним из полей в нашем приложении является Название продукта. Таким образом, одно из правил, которые мы должны реализовать, - преобразовать имя продукта из нижнего регистра в верхний регистр, если входное значение из файла в нижнем регистре. Точно так же есть много текстовых / математических преобразований, которые необходимо сделать. По этим причинам нам нужно создать механизм пользовательских правил, в котором мы определяем правила для каждого атрибута, анализируем их и затем применяем правила.

Я знаю, что ANTLR является одним из генераторов синтаксического анализатора для Java. Я ищу совет по следующим вопросам:
1> Общая информация о работе генератора синтаксического анализатора и лучшие практики для реализации грамматики.

2> Поскольку мне нужно полностью спроектировать этот механизм правил, может ли кто-нибудь указать мне на пример механизма правил, на который я могу сослаться? прямо из интерфейса для проектирования баз данных. Я использую GWT для пользовательского интерфейса, Java для основной логики и Oracle для базы данных

3> Существуют ли другие генераторы синтаксического анализатора для Java

4> Хотя я хочу пойти по пути определения своей собственной грамматики и использования генератора синтаксических анализаторов для создания этого механизма правил, есть ли другой подход, который я должен рассмотреть?

Ответы [ 2 ]

1 голос
/ 01 февраля 2012

Существует JavaCC, который является генератором Parser, и есть отличные возможности для оценки правил. Если вы собираетесь использовать скрипт-движок или нет, зависит от грамматики. Если правила не могут быть выражены в javascript, java, python и т. Д., И вы хотите написать их на новом языке, тогда вам нужно использовать генератор синтаксического анализатора. Но вы всегда можете делать что угодно внутри методов, которые вы создаете, а затем вызывать их из правил. Правила будут оцениваться скриптовым движком.

1 голос
/ 31 января 2012

Возможно, вы захотите использовать JbossRules (ранее Drools), который является движком правил на основе Java.В качестве альтернативы, механизм сценариев может быть другим способом реализации ваших правил (например, Apache Rhino (Javascript in Java)).

Написание собственного в этой ситуации кажется излишним, но оно может позволить вам обеспечить более высокие гарантии безопасностиесли конечные пользователи будут создавать правила / сценарии.

РЕДАКТИРОВАТЬ, чтобы отвечать на вопросы в комментариях:

Я предлагаю использовать существующий механизм правил (аля JbossRules / Drools) вместо написания своего собственногопарсер и грамматика (для компонента правила).Взгляните, например, здесь: Drools .

Для специализированной логики, которую могут понадобиться правилам (доступ к базе данных или библиотеки вычислений), вы должны написать один Java API, используемый вашими правилами (поэтомуэти правила не имеют глубокого доступа к вашему другому коду, поскольку это может привести к ошибкам, если / когда вы выполните рефакторинг).Этот совет применим независимо от того, какой механизм правил вы используете (свой или существующий).

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

...