Кодирование синтаксического анализатора для предметно-ориентированного языка в Java

Мы хотим разработать простой предметно-ориентированный язык для записи сценариев тестирования для автоматического тестирования основанного на XML интерфейса одного из наших приложений. Демонстрационный тест был бы:

  • Получите входной XML-файл от сетевой совместно используемой папки или репозитория подрывной деятельности
  • Импортируйте XML-файл с помощью интерфейса
  • Проверьте, было ли сообщение результата импорта успешно
  • Экспортируйте соответствие XML объекту, который был просто импортирован с помощью интерфейса, и проверьте, исправляет ли это.

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

newObject = GET FILE "http://svn/repos/template1.xml"
reponseMessage = IMPORT newObject
newObjectID = GET PROPERTY '/object/id/' FROM responseMessage
(..)

Но тогда я не уверен, как реализовать простой синтаксический анализатор для этого languange в Java. Назад в школе, 10 лет назад, я кодировал синтаксический анализатор языка с помощью Lex и Yacc для языка C. Возможно, подход должен был бы использовать некоторый эквивалент для Java?

Или, я мог бросить идею наличия декларативного языка и выбрать XML-based language вместо этого, для которого возможно будет легче создать синтаксический анализатор? Какой подход Вы рекомендовали бы?

11
задан b.roth 8 March 2010 в 11:28
поделиться

6 ответов

Вы можете попробовать JavaCC или Antlr для создания синтаксического анализатора для вашего языка, специфичного для вашей области.Если редакторы этого файла не являются программистами, я бы предпочел этот подход XML.

6
ответ дан 3 December 2019 в 05:57
поделиться

ANTLR должно быть достаточно

ANTLR, ANother Tool for Language Recognition, - это языковой инструмент, который обеспечивает основу для построения распознавателей, интерпретаторов, компиляторов и переводчиков на основе грамматических описаний, содержащих действия на различных целевых языках. ANTLR обеспечивает отличную поддержку построения деревьев, хождения по деревьям, перевода, восстановления ошибок и сообщения об ошибках.

4
ответ дан 3 December 2019 в 05:57
поделиться

Посмотрите, как Cucumber определяет свои тестовые случаи:

alt text
(источник: cukes.info)

http://cukes.info/ - может работать в JRuby.

2
ответ дан 3 December 2019 в 05:57
поделиться

Или, я могу отказаться от идеи иметь декларативный язык и выбрать вместо него язык на основе XML, который, возможно, будет проще создать парсер для него? Какой подход вы бы порекомендовали?

  1. Это можно легко сделать, используя XML для описания сценариев тестирования.

    < GETFILE object="newObject" file="http://svn/repos/template1.xml"/ >

  2. Поскольку ваш пример синтаксиса довольно прост, также должно быть возможно просто использовать StringTokenizer для токенизации и разбора такого рода сценариев.

Если вы хотите ввести более сложные выражения или управляющие структуры, вам, вероятно, лучше выбрать ANTLR

1
ответ дан 3 December 2019 в 05:57
поделиться

Посмотрите библиотеку Antlr. Вам нужно будет использовать грамматику EBNF для описания вашего языка, а затем использовать Antlr для создания классов java из вашей грамматики.

2
ответ дан 3 December 2019 в 05:57
поделиться

Посмотрите на Xtext - он принимает определение грамматики и генерирует парсер, а также полнофункциональный редактор eclipse с подсветкой синтаксиса и проверкой.

5
ответ дан 3 December 2019 в 05:57
поделиться
Другие вопросы по тегам:

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