Antlr4

2013-08-28 7 views
6

में एक पार्सर द्वारा दिए गए रन टाइम के दौरान त्रुटियों को कैसे एकत्र करें I Antlr 3 से Antlr 4 में अपग्रेड किया गया है। मैं इस कोड का उपयोग करके अपवादों को पकड़ने के लिए इस कोड का उपयोग कर रहा था। लेकिन इस antlr 4.Antlr4

partial class XParser 
{ 
    public override void ReportError(RecognitionException e) 
    { 
     base.ReportError(e); 
     Console.WriteLine("Error in Parser at line " + ":" + e.OffendingToken.Column + e.OffendingToken.Line + e.Message); 
    } 
} 

के लिए काम नहीं कर रहा यह त्रुटि दिखाई देने वाले

'Parser.ReportError(Antlr4.Runtime.RecognitionException)': no suitable method found to override 

antlr 4 में त्रुटियों है कि इनपुट धारा में होता है एकत्रित कर पाने में उम्मीद तरीका है क्या है। मैं नेट पर इसे हासिल करने का कोई तरीका नहीं ढूंढ पाया। कृपया मुझे कुछ दिशानिर्देश प्रदान करें।

संपादित करें:

मैं

partial class XParser : IAntlrErrorListener<IToken> 
{ 
    public void SyntaxError(IRecognizer recognizer, IToken offendingSymbol, int line, int charPositionInLine, string msg, RecognitionException e) 
    { 
     Console.WriteLine("Error in parser at line " + ":" + e.OffendingToken.Column + e.OffendingToken.Line + e.Message); 
    } 
} 

नीचे के रूप में XParser को लागू किया है जैसा कि आपने कहा है कि मैं इस पार्सर उल्लेख वर्गों में से किसी का उपयोग कर वर्ग का विस्तार कर सकते हैं। लेकिन मैं इस श्रोता को पंजीकृत करने में असमर्थ था, मुख्य कार्यक्रम में मैं listener के रूप में उत्तीर्ण तर्क के साथ उलझन में हूं। कृपया पंजीकरण के साथ मेरी मदद करें।

जैसा कि मैं देख सकता हूं कि इन वर्गों में अधिक सार्थक त्रुटि संदेश बनाने की क्षमता है, है ना?

उत्तर

9

आपको IAntlrErrorListener<IToken> लागू करने की आवश्यकता है। यदि आप उपरोक्त की तरह त्रुटियों की रिपोर्ट करना चाहते हैं, तो आपको SyntaxError विधि पर ध्यान देना चाहिए। यदि आप एक विस्तार करना चाहते हैं तो कई आधार कक्षाएं उपलब्ध हैं।

त्रुटि श्रोता parser.AddErrorListener(listener) फोन करके पार्सर उदाहरण से जुड़ा हुआ है।

संपादित करें: आपको एक नई कक्षा बनाने की आवश्यकता है जो त्रुटि श्रोता इंटरफ़ेस लागू करता है। फिर आप श्रोता को पार्सर से संलग्न करते हैं। पार्सर स्वयं त्रुटि श्रोता इंटरफ़ेस को लागू नहीं करेगा।

+0

कृपया मेरे संपादन पर एक नज़र डालें। मुझे कुछ भ्रम और स्पष्टीकरण है। काम के माध्यम से बड़ी मदद के लिए धन्यवाद। इसे बहुत सराहना करो। –

+0

@Diode मैंने अपनी पोस्ट अपडेट की। :) –

+1

@ 2 9 0Z28 धन्यवाद कि काम करता है। मैं लेक्सर के लिए एक ही चीज़ क्यों नहीं कर सकता। मैंने एक और वर्ग बनाकर और 'IAntlrErrorListener ' से कार्यान्वित करके पार्सर के लिए जो किया, उसका अनुकरण करने की कोशिश की। लेक्सर इंस्टेंस में 'AddErrorListener' एक विधि है। –

संबंधित मुद्दे