Существует два типа DSL; внешний и встроенный.
Внешняя DSL полностью отделена от вашего основного языка, то есть вы пишете ее вне языка, но обычно используется для генерации кода на языке хоста. Для этого подхода XText с XPand, вероятно, является лучшим инструментом, поскольку простой файл грамматики генерирует полный редактор Eclipse для нового DSL, и вы можете использовать шаблоны кода в XPand для генерации фактического кода Java. XTend и XPand написаны на Java, но это случайно, поскольку они могут быть написаны во всем, пока вы заканчиваете Java-код в конце процесса.Недостатком такого подхода является то, что для любой достаточно сложной проблемы язык станет довольно сложным, и потребуется много работы в грамматике и даже больше в шаблонах генерации кода. Вы не можете использовать любые функции языка хоста, такие как оценка выражения, поэтому все это требует восстановления в DSL, если вам это нужно. XText скоро включит XBase, который является частичным языком, который будет включать выражения, которые помогут здесь.
Другой подход - это встроенная DSL, где высокоуровневые функции домена выражаются на языке хоста либо с помощью конструкций более высокого порядка (например, HOF и monads), обычно встречающихся на функциональных языках, либо через объекты метапрограммирования, такие как макросы (например, Lisp). Java ни один из них не является плохим выбором для работы DSL (или большинства других форм абстрактного программирования). Spring Roo предлагает средство метапрограммного типа для Java с использованием поколения, поэтому может быть вариант. В противном случае Scala, вероятно, является наиболее популярным на Java, как JVM-язык, и обладает теми возможностями, которые вам нужны.
Встраиваемые DSL обычно намного проще, чем внешние DSL, потому что у вас есть полная поддержка основного языка, поэтому моя рекомендация - попробовать Scala.
Как быстро это должно быть? Как скоро вам нужно это сделать? – EnabrenTane
@EnabrenTane - Не может быть супер быстро –
как насчет очень быстрого? будет очень быстро делать? или только супер быстро? j/k: p – hhafez