2013-06-11 29 views
2

我已經編寫了Java中的ANTLR解析器,它可以從一種特定於域的語言轉換爲另一種語言,並使用嵌入式操作生成中間結構信息。在解析這些嵌入式操作期間,使用從外部文件運行時加載的數據來驗證被解析的輸入。因此,根據語法正確的輸入文件可能會因運行時加載的外部需求而失敗。ANTLR 4:如何從嵌入式操作中生成解析錯誤?

這種情況的一個簡單例子是解析器,其中有效關鍵字列表來自用戶提供的文本文件。根據語法正確解析的關鍵字可能會失敗,因爲它不在用戶在運行時提供的關鍵字列表中。

我已經可以捕捉到這些問題並解析出來,但是我的錯誤消息會丟失上下文,因此用戶很難知道輸入中發生錯誤的位置。

是否有辦法讓ANTLR嵌入式操作導致解析器拋出包含當前解析上下文的假解析異常?例如:

line 125:11 <my custom error message generated from embedded action goes here> 

我已閱讀ANTLR 4參考書,但找不到任何相關示例。

+0

注:我意識到,使用AST-遍歷方法會比使用嵌入的動作更靈活,但我將不勝感激具體答案在非AST方面解決這個問題。 –

回答

2

找到了解決辦法:

Token startPos = getContext().getStart(); 
String inputLocation = "line " + startPos.getLine() + ":" + startPos.getCharPositionInLine();