![](/img/trans.png)
[英]Error java.lang.NoSuchMethodError: No such DSL method '***' found among steps
[英]First Steps with DSL on Java?
伙計們......女孩們,我正在研究一個項目,我認為可以通過實施領域特定語言來為某些類型的工作流程定義一套規則和/或條件來加強這個項目。
我希望能夠牢牢掌握主題,基礎知識,最佳實踐等,特別是如何使用Java以某種方式實現它們。
你有什么建議?
首先,我建議閱讀Kernighan和Pike 的“編程實踐”第9章(符號)。
完成后,請回到此處,了解如何將該章中的概念映射到您想要解決的問題的特定設計。
基本模式是編寫一個傳遞“命令”參數的解釋器,可能還有一個“環境”參數並執行命令(在環境中)。 然后你可以選擇編寫一個解析器,它接受一個'script'字符串並將其轉換為一個有效的'command'對象(即一個外部DSL); 或者您提供了一個庫來幫助用戶使用您使用的相同語言(internal-DSL)顯式構建“命令”對象。
Kernighan和Pike很好地展示了解釋器的復雜程度和復雜程度。 如果你想要更深入,那么我建議閱讀丹尼爾弗里德曼等人的“編程語言要點” 。 每章至少構建一個不同的解釋器,並演示如何實現變量,函數,作用域,對象,類,靜態類型和延續等功能。
但是我建議你首先嘗試一下這個簡單的DSL,否則它只是理論 - 一本書在你以前的經驗變得相關和實用時會更有趣。
正如其他人所評論的那樣,Java確實不是創建DSL的絕佳選擇。 Scala,Clojure,Groovy,Ruby / JRuby都是不錯的選擇。 但是,考慮到您正在考慮使用Java,我認為Groovy或Scala似乎是最自然的選擇。 對於這兩種語言,Java開發人員的學習曲線非常漸進。 以下是一些可以幫助您入門的鏈接:
一旦我使用openArchitectureware定義和使用DSL。 oAW是eclipse的插件,現在是eclipse建模框架的一部分,但當然它也可以在EMF之外使用。
我喜歡它,因為定義DSL非常容易,oAW會自動生成一個帶有syntacx突出顯示和DSL錯誤檢查的編輯器。
如果您計划使用在DSL中編寫的文檔來自動生成Java,XML或其他文件,它提供了一個非常舒適的模板引擎。
(我已經鏈接了舊的oAW URL,因為頁面仍然提供了一些細節以及到eclipse項目頁面的所有鏈接)
只是@Recurse的補充。 我實際上正在他所指的第9章中執行正則表達式示例,直到我在main函數中更改了一行后它才起作用:
if (grep(argv[1], f, argc>3 ? argv[i] : NULL) > 0)
應該是:
if (grep(argv[1], f, argc>2 ? argv[i] : NULL) > 0)
注意argc> 2。 之后它對我有用。 不在書上勘誤表(考慮到它的年齡,這並不奇怪)。
是的,這是一本書的密集但寶庫,所以我不得不說我同意@Recurse。 老實說,這對學生來說是一本對時間敏感的書(幾年前我可能會感到困惑)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.