Что было бы лучший инструмент для создания естественного DSL в Java?

Мой голос, простой немой - но тогда я играю только с Java ...

Но любой класс наследует от класса Object, насколько мне известно ...

14
задан Fabian Steeg 28 January 2009 в 00:05
поделиться

6 ответов

Рассматривая сложность lexing и парсинга, я не знаю, хотел ли я кодировать все это вручную. ANTLR не то, что трудно к погрузке и я думаю, что это - изучение Уэртинга на основе Вашей проблемы. , Если Вы используете грамматику синтаксического анализа для создания и абстрактное синтаксическое дерево из входа, ее довольно легкое, чтобы затем обработать тот AST с древовидной грамматикой. Древовидная грамматика могла легко обработать выполнение процесса, который Вы описали.

Вы найдете ANTLR во многих местах включая Eclipse, Groovy и Grails для запуска. Категорическая Ссылка ANTLR даже делает это довольно простым для набирания скорость на основном справедливо быстро.

у меня был проект, который должен был обработать сгенерированный текст запроса некоторого пользователя ранее в этом году. Я запустил вниз путь для ручной обработки его, но это быстро стало подавляющим. Я взял пару дней для подъема скорости на ANTLR и имел начальную версию моей грамматики и процессора, работающего через несколько дней. Последующие изменения и корректировки требований уничтожили бы любую пользовательскую версию, но потребовали бы относительно небольшого усилия корректироваться, после того как у меня были грамматики ANTLR и выполнение.

Удачи!

25
ответ дан 1 December 2019 в 06:21
поделиться

Первый раз, когда я слышал о DSL, был от Jetbrains, создателя Идеи IntellJ.

у Них есть этот инструмент: MPS (Система Метапрограммирования)

4
ответ дан 1 December 2019 в 06:21
поделиться

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

Преимущество DSL (или должен быть, во всяком случае) то, что это просто и ясно, все же мощно в отношении проблемной области. Имитация естественного языка является вопросом второстепенной важности и может на самом деле быть контрпродуктивной к тем основным целям.

Если кто-то будет слишком глуп или испытает недостаток в способности к официально строгим взглядам, что это требуется для программирования, то язык программирования, который имитирует естественный, волшебно не превратит их в программиста.

То, когда КОБОЛ был изобретен, некоторые люди серьезно полагали, что в течение 10 лет будет нулевой спрос на профессиональных программистов, так как КОБОЛ "был похож на английский" и любого, кому было нужно программное обеспечение, могло записать это самого. И все мы знаем, как это удавалось.

10
ответ дан 1 December 2019 в 06:21
поделиться

Вы могли бы хотеть рассмотреть Xtext, который внутренне использует ANTLR и делает некоторые хорошие вещи как автоматическая генерация редактора для Вашего DSL.

9
ответ дан 1 December 2019 в 06:21
поделиться

Вы могли бы найти этот многослойный ряд блога, который я сделал при использовании Antlr, чтобы быть полезным как начальная точка. Это использует Antlr 2, таким образом, некоторый материал будет отличаться для Antlr 3:

http://tech.puredanger.com/2007/01/13/implementing-a-scripting-language-with-antlr-part-1-lexer/

презентации/статьи Mark Volkman Antlr довольно полезны также:

http://www.ociweb.com/mark/programming/ANTLR3.html

я буду второй предложение о Категорической книге ANTLR, которая также превосходна.

1
ответ дан 1 December 2019 в 06:21
поделиться

"Одно довольно четкое приложение этого, по крайней мере, для меня, должно было бы позволить тестерам приложения, создают "сценарии тестирования" на естественном языке и затем разбирают предложения в классы, который использует JUnit для проверки на поведения приложения"

О чем Вы говорите, здесь точно походит на инструмент, FitNesse. Точно как Вы описываете, клиенты пишут приемочным испытаниям "сценарии" на некотором языке, который makese обнаруживают им и системам сборки программистов, которые делают тестовую передачу. Даже реализация, о которой Вы говорите, состоит в значительной степени точно в том, как FitNesse работает - словарь, используемый в сценариях, связывается для формирования имен функций и т.д., так, чтобы платформа FitNesse знала что функцию звонить.

Так или иначе проверьте его :)

0
ответ дан 1 December 2019 в 06:21
поделиться
Другие вопросы по тегам:

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