2012-02-06 64 views
2

我正在手動構建AST樹以與我的應用程序一起使用。我目前在我的程序內存中使用標準OO方法獲得大量數據,這些數據將用於形成AST。AST的Java構建器?

我想知道是否偶然有任何框架/代碼生成器可以幫助我完成此任務。

我不是在尋找一個編譯器編譯器。我不想定義語法,並讓代碼生成器爲我生成解析器。我打算自己實例化樹的節點,我只想尋找一種更快,更便宜的方式來自己構建.java文件(另外還可以選擇節點的屬性,可選的方法等等)。

+0

那麼你知道你想創建什麼AST節點?你聽起來像你想要一個代碼生成器,但一個生成器必須運行一些輸入。你有什麼輸入,描述你想要的AST節點?如果你沒有這樣的輸入,你如何期待一個生成器或框架來幫助「構建.java」文件。 (你的意思是* Java文件?) – 2012-02-06 06:59:15

回答

1

這似乎是問題的答案:

http://www.jetbrains.com/mps/

MPS的主要目標是允許擴展語言。這是因爲 每個現有語言都已經定義了嚴格的語言語法,這限制了它的靈活性。

擴展語言語法的問題主要是代碼的文本 演示文稿。如果我們想要使用 不同的語言擴展,那麼每個擴展都可能有自己的語法。

這自然導致了非文本呈現 程序代碼的想法。這種方法的一個主要好處是它消除了代碼解析的需要。我們的解決方案是讓代碼始終保持在抽象語法樹(AST)中,其中包含節點 ,其中包含屬性,子節點和引用,並完整描述了程序代碼 。

與此同時,MPS提供了一種有效的方式來保持 以類似於文本的方式編寫代碼。

在創建語言時,您需要定義代碼編輯和 渲染的規則。您還可以指定語言類型系統和約束條件。這使得MPS能夠即時驗證程序代碼,並且因此使用新語言的編程容易且易於出錯。

MPS使用生成方法。您還可以爲其語言定義生成器,以將自定義語言中的代碼轉換爲某種常規語言中的可編譯 代碼。目前,MPS尤其適用於但不限於生成Java代碼。您還可以 生成XML,HTML,JavaScript等。

+0

你很清楚你不想要一個爲你生成解析器的編譯器編譯器,但這正是MPS所做的(至少它的一個角落,如果你想使用它,你是無法避免的)。所以我不明白你爲什麼認爲這是你原來問題的答案。 – 2012-02-07 01:06:21

+1

MPS不會生成解析器。它會自動生成我可以在我的程序中使用的輸出文件。 – 2012-02-08 14:22:24

4

我強烈建議你看看Eclipse的Java Development Tools。它包含一個非常強大的AST框架。

我的理解是,使用這個API,您將可以訪問各種類型的AST節點的所有屬性,並且您還可以使用beginVisit()endVisit()方法創建訪問者。

+0

你提到的是JDT的哪個具體插件? – 2012-02-06 05:28:46

+0

@devouredelysium我猜這是[JDT核心](http://www.eclipse.org/jdt/core/index.php)([javadoc](http://help.eclipse.org/indigo/index。 jsp?topic =%2Forg.eclipse.jdt.doc.isv%2Freference%2Fapi%2Foverview-summary.html)) – prunge 2012-02-07 00:49:28

+0

是的,@prunge是正確的,JDT Core就是您要找的。 – jbranchaud 2012-02-07 04:30:31