Существует ли утилита, которая, учитывая грамматику ANTLR произведет соответствующие строки?

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

8
задан bcat 7 August 2010 в 06:16
поделиться

2 ответа

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

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

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

1
ответ дан 6 December 2019 в 02:23
поделиться

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

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

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

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

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

0
ответ дан 6 December 2019 в 02:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: