2011-02-09 38 views
1

我已經下載Antlr 3.3和antlr工程,以及來自Antlr網站的Java.g。我能夠成功地生成JavaParser,JavaLexer.java和使用Antlr的令牌用於Java.g.然後我裝在我的IDE中ANTLR罐子,並按照以下說明來使用它在我的代碼: http://www.antlr.org/wiki/pages/viewpage.action?pageId=789使用antlr從Java獲得有關Java類的元數據

的第一個問題出現了,當上面的文件說,到下面的一行代碼:

RuleReturnScope result = parser.compilationUnit(); 

問題是parser.compilationUnit()不返回結果。

然後我試着繼續下面的例子,在「解析一棵樹」下面,但這是不完整的。

我找不到任何有關如何使用此庫的好文檔。

這是我想要做的: -in Java提交一個文件名,文件對象或文件內容作爲一個字符串Antlr,並讓它返回某種對象,我可以在代碼中導航,這將給我的東西如進口,方法,類變量,表達式等。

基本上NetBeans IDE 6.9.1對重構有什麼作用,如修復導入,轉到源,重命名變量等。我需要的是關於類,我不知道如何獲得它。

謝謝。

+0

有各種`Java.g`語法:你可以發佈你的(整個!)修改過的`.g`語法文件嗎?你究竟想從`.java`源文件中提取什麼? – 2011-02-09 11:13:25

+0

我的語法是antlr的語法,可以在這裏找到:http://openjdk.java.net/projects/compiler-grammar/antlrworks/Java.g我想提取我在上面的消息中描述的內容(導入,方法名稱,變量名稱和方法內容,它們自己被解析爲具有變量的表達式等)現在最重要的是進口,但我也希望其餘的。 – Coder 2011-02-09 11:19:57

回答

1

要回答你的問題,爲什麼compilationUnit不返回任何結果,因爲如果你不指定的規則自己返回類型,解析器規則剛剛被翻譯成

public void nameOfTheParserRule() { 
    ... 
} 

如果設置輸出到AST 選項{...}部分的語法,默認情況下解析器規則返回一個RuleReturnScope類型的對象,我懷疑在你的情況下出錯了,但是我不能確定,因爲你沒有發佈你的語法和你給語法Java.g的鏈接不會產生任何東西:在能夠生成解析器之前,你需要用它來做某些事情和它的詞法分析器。你很可能做了錯誤的事情:)。

祝你好運!