2013-03-14 65 views
0

我正在通過自定義語法處理我的輸入文件並提取令牌並將它們返回到HashMap中。在ANTLR 3中,我能夠通過在解析器上調用rule()方法並獲得HashMap類似於parser.record的東西來解析文件。在ANTLR4中從解析器訪問解析的數據

這似乎並不適用於ANTLR 4.我提到這本書,看起來我必須撥打parser.init()才能開始解析,但在解析器中看不到任何方法。

我使用ANTLRWorks 2來生成我的詞法分析器和分析器文件。我沒有生成監聽器類。

回答

5

在ANTLR 4中,您通過調用匹配條目規則名稱的方法開始分析。如果語法中的規則被稱爲rule,則可以通過調用rule()開始解析。如果語法中的規則被稱爲init,那麼您將通過調用init()開始解析。

請注意,ANTLR 4中的Java目標不允許你有一個叫做rule的規則,所以如果你的語法中有這樣一條規則,你需要在語法編譯之前重新命名它。

+0

感謝幫助。我正在處理另一個問題。從我的語法中找到一個片段。正如你所看到的,我將這些值保存在一個HashMap中。我的文件正在被正確解析,但我無法訪問該HashMap後解析。在ANTLR 3中,它就像parser.metadata一樣簡單。記錄: {Map metadata = new HashMap (); } 頭1 WORD * COLD_JOB WORD + DOCTYPE {metadata.put( 「DOCTYPE」,$ doctype.text);} HEADER2 '交易提交:' 日期時間 'CSR名稱:' 字+ 數字 '客戶ID:' CUSTOMER_NUMBER {metadata.put( 「thriventId」,$ customer_number.text);} – javadmirer 2013-03-15 16:05:09