Хобрук: Ваш путь к мастерству в программировании

Тестирование грамматики Antlr4

Я работаю с плагином Intellij IDEA / w Antlr.

Допустим, я пишу файл с именем mylang.abc. Это пример того, как будет выглядеть окончательный язык. Затем я должен написать файл .g4 с грамматикой для этого языка.

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

Идеальный тест, вероятно, должен иметь логику: это исходный код (это правило, с которым эта строка должна быть проанализирована - необязательно), это должно быть идеально проанализированное дерево -> соответствует тесту? печать Ok / Oops.

Правильно ли я подхожу к тестированию по грамматике? Если да, то какой пример к вышесказанному?

17.07.2014

Ответы:


1

Для ANTLR v3 мы создали gUnit, аналог jUnit. В конце концов, я решил, что иметь ряд таких методов так же просто:

assertTreeEquals("a=b;", "expr", "(expr a = b)");

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

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

17.07.2014
Новые материалы

Создание кнопочного меню с использованием HTML, CSS и JavaScript
Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

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

Классы в JavaScript
class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

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

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

Обзор: Машинное обучение: классификация
Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

Разработка расширений Qlik Sense с qExt
Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..