2013-01-12 189 views
4

我使用Xtext編寫了一個DSL。我想要的是執行該DSL來執行某些功能。解釋器與代碼生成器Xtext

我寫了myDslGenerator類在xtend中實現接口IGenerator來生成java代碼,它工作正常。

我有兩個問題;

  1. Interpreter和Code Generator之間的區別是什麼? 是不是都執行DSL?
  2. 如何撰寫口譯員?任何一步一步的教程鏈接?我發現很多教程使用xtend生成代碼,但找不到任何用於編寫解釋器的代碼。

謝謝

薩爾曼

回答

4

基本上,口譯和代碼生成器的工作真的很不同。代碼生成器就像一個編譯器:它們以另一種語言創建DSL的可執行代碼;另一方面,解釋器用於遍歷你的DSL並在你自己的環境中執行它們。這意味着,生成的代碼不必(但當然可以)依賴於您的DSL,可以更快/更優化;而解釋器需要理解語言的結構,但可以在開發IDE中執行,而不需要運行其他應用程序。 (不完全 - 對於Xbase表達式,有一個XbaseInterpreter實例,如果您正確設置了它的類路徑,可以重用它),因爲它們非常符合語言,因此它不支持寫解釋器,具體。

我也不知道任何有關解釋Xtext DSL(甚至不是XbaseInterpreter)的分步教程,但它基本上歸結爲遍歷AST,並且當遍歷一個節點時,相應的語句是動態執行的。爲了這種遍歷的工作,如預期的那樣,解釋者必須維護一個(可能是分層次的)變量和其他引用的上下文。