#antlr #antlr4 #bnf #ebnf #project-fluent
#antlr #antlr4 #bnf #ebnf #проект-свободно
Вопрос:
Я хочу сгенерировать анализатор Swift на основе грамматики, которая описывает синтаксис FTL.
Существует ли какой-либо инструмент для автоматического EBNF -> ANTLR
преобразования? Или эти два грамматических синтаксиса, по крайней мере, конвертируемы?
Сама грамматика автоматически генерируется из набора правил, написанных на JavaScript. Другим возможным решением является обновление rules -> EBNF
сериализатора для вывода синтаксиса ANTLR. Но я новичок в языках и не уверен, что смогу с этим справиться.
Комментарии:
1. Эта грамматика не определяет разделение труда между лексером и синтаксическим анализатором и не следует согласованному соглашению об именовании для обозначения разделения. Следовательно, чтобы преобразовать это в Antlr, вам нужно будет определить раздел символов. Antlrvsix может исправить косвенную рекурсию влево, но здесь ее нет. Оператор «-» должен быть преобразован в семантический предикат.
2. Смотрите здесь . Полностью непроверенный.
3. Хотя по сути ничто не препятствует преобразованию синтаксиса EBNF в синтаксис Antlr4, в этой грамматике нет четкой границы между лексером и синтаксическим анализатором. Чтобы заставить его «работать», я изменил лексер на символьный лексер и преобразовал все правила EBNF в правила анализатора Antlr. Было несколько других неприятных проблем, с которыми Antlr не может справиться должным образом, например, EOF в правилах нижнего уровня. Хотя это было хорошее упражнение, оно явно не подходит для Antlr.
4. Спасибо вам за такую отличную работу и объяснения! Чтобы понять все проблемы, мне, вероятно, нужно прочитать книгу ANTRL. Но пока я решил попробовать перенести анализатор ссылок вручную. Похоже, что существующие библиотеки используют тот же подход: пользовательский анализатор на целевом языке комплексный тестовый набор для проверки.
Ответ №1:
Есть ли какой-либо инструмент для автоматического преобразования EBNF -> ANTLR?
AFAIK, такого инструмента не существует.
Или эти два грамматических синтаксиса, по крайней мере, конвертируемы?
Нет. EBNF допускает косвенные леворекурсивные правила, которые ANTLR не поддерживает (хотя он поддерживает прямые леворекурсивные правила).