簡體   English   中英

如何診斷ANTLR4語法中的歧義?

[英]How do I diagnose ambiguities in my ANTLR4 grammar?

簡潔版本:

我在用

parser.addErrorListener(new DiagnosticErrorListener());
parser.getInterpreter().setPredictionMode(PredictionMode.LL_EXACT_AMBIG_DETECTION);

但是當我運行我的解析器時,我沒有看到任何輸出到'reportAmbiguity ...'的影響,正如ANTLR4書中所示。 我怎么能在語法中看到歧義?

長版:

在8核2.67ghz Xeon E5640機器上,我目前使用ANTLR4獲得的解析速度約為90kb / s。 lexing速度約為5mb / s,所以很好。 在嘗試優化我的解析器時,我發現了兩個階段解析,其中第一個階段使用PredictionMode.SLL進行解析,如果失敗則第二個階段使用PredictionMode.LL。 使用這兩種模式是有效的,我看到一些輸入使用SLL成功的時間比LL使用的時間短。

問題是我希望所有(或大多數)成功使用SLL。 我假設我需要從語法中消除歧義來實現這一目標。 我想ANTLR4告訴我任何含糊之處,以便我可以解決它們。

當我使用parser.removeErrorListener();刪除ConsoleErrorListener時,我parser.removeErrorListener();同樣的問題parser.removeErrorListener(); 你可以用下面的代碼檢查你的聽眾

for (ANTLRErrorListener listener : parser.getErrorListeners()) {
        System.out.println(listener);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM