我们需要创建复杂的固定长度和可变长度字符串。这些字符串可能代表客户配置文件,订单等。你们建议哪种基于JVM的编程语言?

想法是让最终用户使用此DSL创建字符串。因此,我正在寻找验证,代码完成等。

有帮助吗?

解决方案

XTEXT (http://www.eclipse.org/xtext/)指定DSL时免费获得一个不错的编辑器。

其他提示

使用LISP 在JVM上运行。您有一些选择:

  1. 克洛杰尔
  2. jscheme
  3. sisc
  4. ABCL
  5. Bigloo (不在JVM上运行,但具有良好的Java互操作性)。

一本好书 这说明了如何使用LISP设计软件 自下而上, ,即如何 生长 LISP是一种理想解决问题的语言。

语言中的语言 向前 家庭也非常适合定义DSL。 JVM上有一些运行:

  1. 雾气海滩

DSL有两种类型;外部和嵌入式。

外部DSL与您的主机语言完全分开,即您在语言之外编写它,但通常用于以主机语言生成代码。对于这种方法,带有XPAND的XTEXT可能是最佳工具,因为简单的语法文件会为新DSL生成完整的基于Eclipse的编辑器,并且您可以使用XPAND中的代码模板来生成实际的Java代码。 Xtend和Xpand用Java编写,但这是偶然的,因为只要您在过程结束时最终使用Java代码,它们就可以写成任何内容。这种方法的不利之处是,对于任何相当复杂的问题,语言都会变得很复杂,并且语法中需要大量工作,甚至在代码生成模板中需要更多工作。您不能使用任何主机语言功能,例如表达评估,因此所有这些都需要在DSL中重建,如果需要的话。 Xtext将很快包括XBase,这是一种部分语言,其中包括在此处提供帮助的表达式。

另一种方法是一种嵌入式DSL,其中高级域特征以宿主语言表示,既有具有功能性语言或通过元编程设施(例如宏(例如LISP)))的高阶构造(例如HOF和Monads)。 Java都不拥有DSL工作(或大多数其他形式的抽象编程)的不好选择。 Spring Roo使用Generation为Java提供了元编程类型的设施,因此可能是一种选择。失败的情况下,Scala可能是最喜欢JVM语言的Java,并且具有所需的设施。

嵌入式DSL通常比外部DSL容易得多,因为您得到了主机语言的全部支持,因此我的建议是尝试Scala。

Scala一直! Scala特别适合内部DSL(请参阅 这个).

我会推荐的 groovy 为了那个原因。

我建议jruby。我已经做了一些,而且很容易就我想要的东西。

http://www.artima.com/rubycs/articles/ruby_as_dsl3.html

听起来像是Apache速度模板引擎的问题。如果可以的话,它是带有模板语法或DSL的Java库。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top