0
在ANTLR 4中,通過實現ANTLRErrorListener可以擴展錯誤/異常處理。只有當我遍歷使用詞法分析器和解析器創建的樹時,纔會觸發事件。 例如ANTLR 4在觸發監聽事件之前預先進行錯誤和異常處理
parser.removeErrorListeners();
parser.addErrorListener(new MyTryDSLErrorListener());
ParseTreeWalker walker = new ParseTreeWalker();
MyTryDSLListener listener = new MyTryDSLListener(); // Can be replaced by default Base listener(empty implementation)
walker.walk(listener, parser.test()); // At this line tree will be traversed and if any error then MyTryDSLErrorListener's callback will be called.
我想知道有沒有乾淨的方式來獲得輸入 字符串錯誤,而無需調用監聽器/訪問者。
注:雖然沒有用的默認實現替換監聽器來處理此問題的方法。然後再次遍歷樹自己實現的聽衆,就像如下:
walker.walk(new TryDSLBaseListener(), parser.test()); // Find if has any errors.
walker.walk(new MyTryDSLListener(), parser.test()); // Actual use case.
您可以請詳細解釋_解析器中的解析器_或如果可能請您提供給我的教程。如果我理解它,那麼我應該將它改爲:'parser.test();'?然後添加聽衆並穿過樹? –