Есть ли утилита, которая с учетом грамматики ANTLR будет производить соответствующие строки? - PullRequest
9 голосов
/ 07 августа 2010

У меня есть грамматика ANTLR, и я хотел бы запихнуть мой анализатор.

Ответы [ 3 ]

1 голос
/ 08 августа 2010

Вы ищете поколение из грамматики CFG? То есть. генерация строк, которые принимаются грамматикой? Это может быть хорошей идеей для проверки правильности грамматики, но имейте в виду, что набор принятых строк, скорее всего, бесконечен. Любые действительно плохие ошибки уже должны быть очевидны в спецификации грамматики, и, надеюсь, проверкой LL-ness.

Я не знаю ни одного инструмента в мире ANTLR, и быстрый поиск в Google по (E) BNF-поколению не выявил ничего полезного.

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

0 голосов
/ 09 ноября 2016

Искал что-то похожее и нашел GramTest , который кажется подходящим, но вместо грамматики ANTLR в качестве ввода используется грамматика BNF.

Этот инструмент позволяет создавать тестовые случаи на основе произвольного пользователя определенные грамматики. Входная грамматика дана в нотации BNF. Потенциальные приложения включают фаззинг и автоматическое тестирование.

Для получения дополнительной справочной информации они ссылаются на следующие посты:

0 голосов
/ 10 августа 2010

Предположим, вы генерировали предложения (строки токенов) из вашей грамматики ANTLR. Как вы думаете, почему ваш синтаксический анализатор на основе ANTLR будет возражать против них?

Что вам действительно нужно сделать, так это создать не совсем легальные строки. Итак, вам нужен генератор, который может выдавать ошибочные строки.

Учитывая, что ANTLR генерирует набор процедур из вашей грамматики ANTLR, я думаю, было бы трудно создать генератор предложений, используя сгенерированный синтаксический анализатор. Что вам нужно, так это явная модель грамматики. И это уже доступно вам: ANTLR input грамматика.

Дополнительное усложнение, которое я вижу, это генерация легальных токенов из регулярных выражений, которые составляют определения токенов. Опять же, вам нужно обработать вход ANTLR, чтобы сделать это.

Обработка обоих из них кажется технически простой. Лучшим механизмом для использования в качестве основы, вероятно, является интерфейс ANTLR, который, очевидно, анализирует спецификации ANTLR и поэтому должен содержать некоторое представление ввода ANTLR.

...