[英]Efficient ways to reuse a Java compiler's backend for a new JVM language
我正在寫針對JVM的語言,目前正在將編譯器放在一起。 對我來說,很明顯,從邏輯上講,我的新語言在創建字節碼時與Java具有許多相同的需求。 僅舉幾個例子:
List<X<? super Y>> l = new List<X<Z>>();
List<X<? super Y>> l = new List<X<Z>>();
兼容 可能還有更多,我不知何故不想重新發明這些輪子(制作一種新語言,當然我已經在重新發明一些輪子了……),所以我想知道什么是最好的重用方法(部分內容)現有的Java編譯器,並將上面需要的AST片段傳遞給它。
我已經有了lexer和parser(ANTLR),所以我真的在尋找有關哪些編譯器的建議,這將使我相對容易地使用它們(例如,我對ECJ進行了一些研究,但是如果有人告訴我它不具備我想要的功能,或者使用另一個編譯器會更容易使用,那就太好了。
概括地說,這是一個肯定的問題:那里有哪個Java編譯器具有易於訪問的后端,適合與非Java JVM語言的前端一起使用?
這是我在閱讀學術論文時聽說的兩個可擴展的編譯器后端:
對於特定領域的語言工程,我建議
這些項目似乎已經成熟。 我從沒近距離看過他們,但我真的很想;)
冒着有點鈍的危險,我的答案是斯卡拉。
Scala是一種基於JVM的語言,自最新版本起,它具有宏系統 。 宏(當它們比與C關聯的函數更強大時)是一種在現有語言之上構建特定於域的語言的技術,而無需從頭開始。 宏系統使您可以用現有語言編寫代碼,並通過新的構造進行增強,並將新的構造編譯為基礎語言。
如果您想直接構建Java,可能值得考慮使用Java Syntax Extender ,但是JSE並未得到廣泛使用,並且可能相當粗糙。 (實際上,我可能還沒有聽說過更成熟的Java宏系統。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.