2010-05-06 80 views
0

說我發現了一個很好的開源軟件/庫,用python編寫。我想將我創建的一些函數或方法包裝成易於理解的語言。如何在另一種語言之上開發特定於領域的語言?

do porter_stemm(DOC)(在DSL)將等同於功能或一系列寫在Python方法。

我想創建一個DSL是簡單易學,但需要這種DSL翻譯成原始的開源軟件的軟件。

IM不知道如果我在這裏清楚,但我的本意是:

  1. 創建一個簡單易學,用戶可以使用在一定的利基解決問題的代碼語言。
  2. 這種簡單的語言需要通過一些中間件翻譯或編譯或解釋爲原始開源軟件的語言(python)。

回答

0

通常情況下,DSL仍然具有與其主機語言相同的基本語法,並且只是擴展了語言的功能。所以對於你的一切仍然是用Python編寫的,它只是Python的一些特定領域的函數,變量等

我與DSL的經驗大多是與語言Lisp的家庭。在那裏,一個典型的DSL可能會用宏來實現,這些宏會生成特定於DSL的代碼模式。 (另外,與DSL有關的功能)。關鍵是,儘管宏和函數可能會擴展語言的功能,但仍然以該語言實現。

我想你可以走的更遠了一步,寫了一個Python解釋器 - 但你仍然可以得到Python的運行性能爲免費的,你的翻譯翻譯自定義語言回了Python。

1

使用pyparsing(比傳統的lexx-yacc類似的方法更簡單)編寫您的DSL的語法和解析器(例如Python),解析器可以生成一個語義上有意義的節點樹,然後您可以更簡單)走這棵樹並解釋它,或者(稍微簡單一些)遍歷該樹並生成等效的Python代碼。這是我爲大多數主機語言建議的方法。某些主機語言(Lisp和Scheme是主要語言)具有強大的宏,因此在這些語言中使用宏構建DSL更爲常見。

將你的DSL嵌入到主機語言中基本上意味着你並不是真正在做一個DSL,而是一個更傳統的框架,所以這是一種非常不同的方法(可能更強大,但可能不那麼容易學習,程序員;-)。

相關問題