Мы хотим разработать простой предметно-ориентированный язык для записи сценариев тестирования для автоматического тестирования основанного на 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 вместо этого, для которого возможно будет легче создать синтаксический анализатор? Какой подход Вы рекомендовали бы?
Вы можете попробовать JavaCC или Antlr для создания синтаксического анализатора для вашего языка, специфичного для вашей области.Если редакторы этого файла не являются программистами, я бы предпочел этот подход XML.
ANTLR должно быть достаточно
ANTLR, ANother Tool for Language Recognition, - это языковой инструмент, который обеспечивает основу для построения распознавателей, интерпретаторов, компиляторов и переводчиков на основе грамматических описаний, содержащих действия на различных целевых языках. ANTLR обеспечивает отличную поддержку построения деревьев, хождения по деревьям, перевода, восстановления ошибок и сообщения об ошибках.
Посмотрите, как Cucumber определяет свои тестовые случаи:
(источник: cukes.info)
http://cukes.info/ - может работать в JRuby.
Или, я могу отказаться от идеи иметь декларативный язык и выбрать вместо него язык на основе XML, который, возможно, будет проще создать парсер для него? Какой подход вы бы порекомендовали?
Это можно легко сделать, используя XML для описания сценариев тестирования.
< GETFILE object="newObject" file="http://svn/repos/template1.xml"/ >
Поскольку ваш пример синтаксиса довольно прост, также должно быть возможно просто использовать StringTokenizer для токенизации и разбора такого рода сценариев.
Если вы хотите ввести более сложные выражения или управляющие структуры, вам, вероятно, лучше выбрать ANTLR
Посмотрите библиотеку Antlr. Вам нужно будет использовать грамматику EBNF для описания вашего языка, а затем использовать Antlr для создания классов java из вашей грамматики.
Посмотрите на Xtext - он принимает определение грамматики и генерирует парсер, а также полнофункциональный редактор eclipse с подсветкой синтаксиса и проверкой.