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

Итак, я делал грамматику в Eclipse с ANTLR v3.4, и я сделал такую, которая работает, и я хочу убедиться, что при редактировании все по-прежнему работает. Я могу идти к переводчику каждый раз, но это кажется огромной тратой времени.

Questions: I've read about gunit but the link it gives to download gUnit: ( http://antlr.org/hudson/job/gUnit/org.antlr$ gunit / lastSuccessfulBuild /) не работает. Как я могу получить GUnit. Какой лучший способ проверить грамматику? Это на самом деле gUnit или я должен просто делать тесты Java, как тесты jUnit?

 jQwierdy01 июн. 2012 г., 00:51
Как получить доступ к gUnit после того, как я скачал ANTLR-complete-3.4.jar?
 Dave Newton31 мая 2012 г., 19:22
gUnit был включен в инструменты antlr для нескольких версий, не так ли?

Ответы на вопрос(4)

Решение Вопроса

Недавно я выполнил два задания ANTLR3 (я работаю над магистром в области компьютерных наук) с использованием Eclipse. Я не нашел ни одного документа, в котором бы содержался процесс установки, настройки, написания и отладки грамматики в Eclipse. Итак, после проработки различных проблем я обнаружил, что проще всего остаться в Eclipse для тестирования.

Чтобы использовать процесс, который я начал использовать (обрисован в общих чертах ниже), вы должны сначала установить ANTLR IDE v2.1.2. Добавьте его прямо из Eclipse Indigo:http://antlrv3ide.sourceforge.net/updates, На этом сайте также есть несколько полезных документов по использованию ANTLR IDE. После установки IDE должен быть настроен. Видео уроки немного устарели, но полезны. Смотрите подробное руководство понастройка ANTLR IDE в Eclipse, Основным элементом конфигурации является папка вывода Java. Сделайте это в Eclipse, перейдя в Windows, «Настройки», «ANTLR», «Генератор кода», выберите «Относительная папка проекта» и в поле «Имя выходной папки» введите имя папки (мое называется «antlr-java», другие используют «сгенерированный»).

Test/Debug Process for ANTLR in Eclipse Indigo with ANTLR IDE

After a new project is created, right-click it, select Configure, Convert to ANTLR Project... Create the grammar in a .g file and save it. Note: filename has to match grammar name. If there are significant errors, debug the grammar. Eclipse shows the ANTLR error(s) and what line(s) are affected. At first, these errors seem hard to understand but they can be worked through by using various resources: - The Definitive ANTLR Reference by Terence Parr the guy who wrote ANTLR - the ANTLR Reference Manual - google the error; many times you will end up here at stackoverflow; in particular, Bart Kiers is both knowledgeable and helpful (Bart: thx for the help you didn't know you gave me) On the first save after the serious ANTLR errors are resolved, the java output folder you configured in Eclipse will be created and a java file in that folder will also be created. Right-click on the java output folder, select Build Path, Use As a Source Folder. This tells Eclipse where to look for the project's java source. There are likely to be errors in the new java file. Select it, then search through looking for java errors. Go back to your grammar or java file(s), correct the errors, and re-save the grammar until both grammar and java files are error free, then run it. From this point on, it's the usual modify-run-debug cycle. The only other Eclipse change I needed was to create a few Run Configurations for testing command line parameters.
 19 июл. 2012 г., 17:43
Отредактированный ответ со встроенной ссылкой.

Вы можете скачать gUnitтам но я думаю, что нет последней версии ...

ПытатьсяJarvana... последняя версия есть 3.4:http://repo1.maven.org/maven2/org/antlr/gunit/3.4/gunit-3.4.jar

@ Дэйв Ньютон прав. Начиная с ANTLR v3.1, gUnit включен в основную утилиту ANTLR, как указанотам.

Я до сих пор не знал об этом. Это отлично подходит для тестирования грамматики, но я думаю, что тесты JUnit сделают свою работу, чтобы ...

Вопрос старый, но я оставляю ссылку на полноту:

Для меня эта штука была бесполезна. Поэтому мне удалось найти, как тестировать только Lexer, а затем, только парсер.

I answered it here: https://stackoverflow.com/a/53884851/976948

В основном, есть ссылки на 2 статьи о том, как это проверить:

Unit test for Lexer Unit test for Parser

Я впервые слышу о gUinit и читаю о нем. (Я не использую ANTLR.) Звучит интересно, но наполовину бесполезно.

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

 07 июн. 2012 г., 11:36
Информация о gUnit была в основном краткой. Другой - профессиональный опыт 10 лет создания языковых разборов и компиляторов. Дело в том, что грамматика будет жить в приложении; если вы только делаете академические примеры. Приложение, вероятно, уже имеет модульные тесты, почему бы просто не использовать это. Тем более, что польза в том, что грамматика верна, но оставшийся код делает глупости.
 12 июн. 2012 г., 08:51
Вы работаете над академическим проектом? Это мне или звучит бесполезно для разработки грамматики без какого-либо минимального применения? Даже валидатор кода - это какая-то форма приложения. Вы создаете модульный тест, который содержит небольшой фрагмент кода для анализа и проверки, соответствует ли результат ожидаемому; промыть и повторить.
 jQwierdy01 июн. 2012 г., 18:53
Не могли бы вы рассказать мне больше об этом или месте, куда вы пошли, чтобы найти вашу информацию?
 12 июн. 2012 г., 08:56
Приложение с самым большим отношением грамматики к приложениям, которое я когда-либо писал, было конвертером EDDL в XML. (Не надо, он выводит AST в формате XML.) Но эта вещь затем включается в инструмент сертификации PNO и токенизатор PNO. Но даже есть EDDL в XML. Вы можете выполнить только синтаксический анализатор всей цепочки преобразования.
 jQwierdy07 июн. 2012 г., 19:26
Основная причина в том, что очень неудобно определять, работает ли он (пока строит грамматику с нуля), и вам нужно идти в унылую грамматику, чтобы убедиться, что все, что вы сделали, работает. Какой-то автоматический тестовый код автоматически расскажет вам, что сломало каждую компиляцию. У нас нет приложения, так как мы сами все его проектируем, поэтому мы должны убедиться, что оно работает, не существует всеобъемлющего проекта, который бы сообщал нам, работает ли он или нет. Я не знаю, много ли это объясняет, просто дайте мне знать :)

Ваш ответ на вопрос