Antlr4.Runtime.DefaultErrorStrategy.Recover C# (CSharp) Method

Recover() public method

The default implementation resynchronizes the parser by consuming tokens until we find one in the resynchronization set--loosely the set of tokens that can follow the current rule.

public Recover ( Parser recognizer, RecognitionException e ) : void
recognizer Parser
e RecognitionException
return void
        public virtual void Recover(Parser recognizer, RecognitionException e)
        {
            //		System.out.println("recover in "+recognizer.getRuleInvocationStack()+
            //						   " index="+recognizer.getInputStream().index()+
            //						   ", lastErrorIndex="+
            //						   lastErrorIndex+
            //						   ", states="+lastErrorStates);
            if (lastErrorIndex == ((ITokenStream)recognizer.InputStream).Index && lastErrorStates != null && lastErrorStates.Contains(recognizer.State))
            {
                // uh oh, another error at same token index and previously-visited
                // state in ATN; must be a case where LT(1) is in the recovery
                // token set so nothing got consumed. Consume a single token
                // at least to prevent an infinite loop; this is a failsafe.
                //			System.err.println("seen error condition before index="+
                //							   lastErrorIndex+", states="+lastErrorStates);
                //			System.err.println("FAILSAFE consumes "+recognizer.getTokenNames()[recognizer.getInputStream().LA(1)]);
                recognizer.Consume();
            }
            lastErrorIndex = ((ITokenStream)recognizer.InputStream).Index;
            if (lastErrorStates == null)
            {
                lastErrorStates = new IntervalSet();
            }
            lastErrorStates.Add(recognizer.State);
            IntervalSet followSet = GetErrorRecoverySet(recognizer);
            ConsumeUntil(recognizer, followSet);
        }