2011-01-24 307 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。

相關問題