哪种语言(在JVM上运行)最适合创建DSL?

我们需要创建复杂的固定长度和可变长度的字符串。这些字符串可能代表客户档案,订单等。您建议使用哪种基于JVM的编程语言? 想法是让最终用户使用此DSL创建字符串。所以我正在寻找验证,代码完成等。     
已邀请:
使用Xtext(http://www.eclipse.org/Xtext/),您可以在指定DSL时免费获得一个漂亮的编辑器。     
Groovy的 http://docs.codehaus.org/display/GROOVY/Writing+Domain-Specific+Languages     
使用在JVM上运行的Lisp。你有一些选择: Clojure的 JScheme SISC ABCL Bigloo(不在JVM上运行,但具有良好的Java互操作性)。 有一本很好的免费书籍解释了如何使用Lisp从头到尾设计软件,即如何将Lisp发展成一种理想的语言来解决手头的问题。 Forth系列中的语言也非常适合定义DSL。有一些在JVM上运行: 纽埃 Misty Beach Forth     
有两种类型的DSL;外部和嵌入式。 外部DSL与您的宿主语言完全分开,即您在语言之外编写它,但通常用于生成宿主语言的代码。对于这种方法,带有XPand的XText可能是最好的工具,因为简单的语法文件为新的DSL生成一个完整的基于Eclipse的编辑器,您可以在XP中使用代码模板来生成实际的Java代码。 XTend和XPand是用Java编写的,但这是偶然的,因为它们可以用任何东西编写,只要你在流程结束时最终得到Java代码。这种方法的缺点是,对于任何相当复杂的问题,语言将变得非常复杂,语法中将需要大量工作,甚至代码生成模板中也需要更多工作。您不能使用任何主机语言功能,如表达式评估,因此如果您需要,所有这些都需要在DSL中重建。 XText将很快包含XBase,它是一种部分语言,将包含表达式以帮助解决此问题。 另一种方法是嵌入式DSL,其中高级域特征以主语言表示,或者通过功能语言中常见的高阶构造(如HOF和monad)或通过诸如宏的元编程工具(例如Lisp)。 Java既没有这些,也不适合DSL工作(或大多数其他形式的抽象编程)。 Spring Roo为使用生成的java提供了元编程类型工具,因此可能是一个选项。如果做不到这一点,Scala可能是最受Java欢迎的Java语言,并且拥有您需要的设施。 嵌入式DSL通常比外部DSL容易得多,因为您完全支持宿主语言,因此我的建议是尝试使用Scala。     
Scala一路走来! Scala特别适用于内部DSL(请参阅此内容)。     
我会推荐Groovy。     
我会建议jruby。我做了一些,总是很容易得到我想要的东西。 http://www.artima.com/rubycs/articles/ruby_as_dsl3.html     
听起来像Apache Velocity模板引擎的问题。它是一个带有模板语法或DSL的Java库,如果你愿意的话。     

要回复问题请先登录注册