2012-02-14 39 views
2

我正在編寫Java到Java Bytecode編譯器,編譯爲Jasmin代碼,並將其組裝到一起。我創建它的目的是源代碼文件將能夠引用和使用Java庫類(你幾乎必須爲字符串,打印等)。我的問題是如何去做這件事。Java到Java Bytecode編譯器:如何獲取Java類庫信息?

到目前爲止,我剛剛使用了對Java安裝文件夾中的文本文件中保存的所有庫類列表的引用(它只是列出了它們的包和名稱)。我已經用它來編碼解析器/類型檢查器,儘管這樣做並不理想,因爲類型檢查器在使用庫類時不能進行任何類型檢查。

現在真的是一個問題,我正在研究代碼生成,因爲如果你想調用一個庫類的方法,你必須給它提供完整的方法簽名 - 這是我無法訪問的。

我在徘徊什麼人的建議將如何進步。一種方法是通過創建所有參數和返回類型的數據庫/列表的所有類。這顯然非常耗時,並且可能太不切實際。還有其他更優雅的方法嗎?

感謝, 威爾

附:我使用Python來編碼。我想如果解決方案必須使用Java代碼,我可以將它作爲一個子進程運行。

回答

0

通過進一步觀察,似乎可能通過使用Java反射。我會回覆這個帖子,讓你知道我有多成功。

+0

是的,我最終選擇了這個選項。我寫了一個Java程序,它使用方法/字段等名稱並返回它們所屬的類(如果它們存在的話)。 Java Refletion API都是可能的。 – 2012-03-28 14:16:35

0

你知道,已經有一個Java到字節碼編譯器了。和一個JVM Python。你的實際目標是什麼?

是什麼讓你覺得創建一個方法/返回類型的集合會「非常耗時」?時間消耗是多麼「極端」?這是它在現實生活中的作用,即使使用javap將這些信息從類文件中提取出來也不是特別耗時。除此之外,還有ASM,BCEL和其他一些庫,可以直接從.class文件中提取信息,但javap提供簡單的文本輸出,可能足以滿足您的需求。

爲了使用符號,您需要一個符號表。獲得可用的唯一方法是存儲可用的內容。它比你想象的更快,更小,特別是如果你使用速記符號。

+0

我的主要目標是爲Java語言的子集添加一些額外的功能。 我想我可以創建所有方法列表然後。那麼我現在可能只包含基本庫包中的類。 – 2012-02-16 13:21:56