2011-01-24 94 views
8

我们有创建复杂的固定长度和可变长度字符串的要求。这些字符串可能代表客户配置文件,订单等。您建议使用哪种基于JVM的编程语言?哪种语言(在JVM上运行)最适合创建DSL?

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

+0

它有多快?你需要多久才能制作它? – EnabrenTane 2011-01-24 04:15:27

+0

@EnabrenTane - 它不需要超快速 – 2011-01-24 04:27:23

+0

非常快速呢?会非常快吗?或只有超级快? j/k:p – hhafez 2011-01-24 09:32:13

回答

-2

听起来像是Apache Velocity模板引擎的问题。如果您愿意的话,它是一个带有模板语法或DSL的Java库。

+2

我需要一个DSL。模板引擎不是一个选项。想法是让用户使用这个DSL创建字符串。我已经看过Velocity,StringTemplate等。 – 2011-01-24 04:26:19

+0

那么数字是DSL呢? Velocity有一种语言,特别适合生成文本内容。它是一种域特定语言。如果您具有模板引擎及其语言无法满足的特定要求,则可能需要更好地描述这些要求。 – 2011-01-24 04:39:02

7

Use a Lisp是在JVM上运行。一些选择,你有:

  1. Clojure
  2. JScheme
  3. SISC
  4. ABCL
  5. Bigloo(不运行在JVM上,但具有良好的Java的互操作性)。

a good free book解释如何使用Lisp的设计软件自下而上,即如何成长 Lisp的进入,是理想的手来解决问题的语言。

Forth系列中的语言对于定义DSL也非常有用。有几个是在JVM上运行:

  1. Niue
  2. Misty Beach Forth
4

斯卡拉一路走好! Scala特别适合内部DSL(请参阅this)。

6

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

外部DSL与您的主机语言完全分离,即您将其写入语言之外,但通常用于以主机语言生成代码。对于这种方法,使用XPand的XText可能是最好的工具,因为简单的语法文件为新的DSL生成完整的基于Eclipse的编辑器,并且可以使用XP和XP中的代码模板生成实际的Java代码。 XTend和XPand是用Java编写的,但这是偶然的,因为只要在流程结束时最终得到Java代码,它们就可以写入任何东西。这种方法的缺点是,对于任何相当复杂的问题,语言将变得非常复杂,语法中需要大量工作,甚至在代码生成模板中需要更多工作。您不能使用任何主机语言功能(如表达式评估),因此如果需要它,所有这些都需要在DSL中重新构建。 XText将很快包含XBase,这是一种部分语言,将包含表达式来帮助您。

另一种方法是嵌入式DSL,其中高级域特征用主语言表达,或者使用通常在函数式语言中发现的高阶结构(如HOF和单子)或通过宏编程等元编程工具(例如宏Lisp的)。 Java不具备这些特性,因此对DSL工作(或大多数其他形式的抽象编程)来说是不好的选择。 Spring Roo为使用代码的java提供了一个元编程类型的工具,所以可能是一个选项。否则,Scala可能是最受Java欢迎的JVM语言之一,并且具有您需要的功能。

嵌入式DSL通常比外部DSL更容易,因为您拥有主机语言的全面支持,所以我的建议是尝试Scala。

相关问题