コード例 #1
0
        /// <summary>
        /// <inheritDoc/>
        /// <p>The default implementation returns immediately if the handler is already
        /// in error recovery mode. Otherwise, it calls
        /// <see cref="BeginErrorCondition(Parser)"/>
        /// and dispatches the reporting task based on the runtime type of
        /// <paramref name="e"/>
        /// according to the following table.</p>
        /// <ul>
        /// <li>
        /// <see cref="NoViableAltException"/>
        /// : Dispatches the call to
        /// <see cref="ReportNoViableAlternative(Parser, NoViableAltException)"/>
        /// </li>
        /// <li>
        /// <see cref="InputMismatchException"/>
        /// : Dispatches the call to
        /// <see cref="ReportInputMismatch(Parser, InputMismatchException)"/>
        /// </li>
        /// <li>
        /// <see cref="FailedPredicateException"/>
        /// : Dispatches the call to
        /// <see cref="ReportFailedPredicate(Parser, FailedPredicateException)"/>
        /// </li>
        /// <li>All other types: calls
        /// <see cref="Parser.NotifyErrorListeners(string)"/>
        /// to report
        /// the exception</li>
        /// </ul>
        /// </summary>
        public virtual void ReportError(Parser recognizer, RecognitionException e)
        {
            // if we've already reported an error and have not matched a token
            // yet successfully, don't report any errors.
            if (InErrorRecoveryMode(recognizer))
            {
                //			System.err.print("[SPURIOUS] ");
                return;
            }
            // don't report spurious errors
            BeginErrorCondition(recognizer);
            if (e is NoViableAltException)
            {
                ReportNoViableAlternative(recognizer, (NoViableAltException)e);
            }
            else
            {
                if (e is InputMismatchException)
                {
                    ReportInputMismatch(recognizer, (InputMismatchException)e);
                }
                else
                {
                    if (e is FailedPredicateException)
                    {
                        ReportFailedPredicate(recognizer, (FailedPredicateException)e);
                    }
                    else
                    {
#if !PORTABLE
                        System.Console.Error.WriteLine("unknown recognition error type: " + e.GetType().FullName);
#endif
                        NotifyErrorListeners(recognizer, e.Message, e);
                    }
                }
            }
        }
コード例 #2
0
        /// <summary>
        /// <inheritDoc/>
        /// <p>The default implementation returns immediately if the handler is already
        /// in error recovery mode. Otherwise, it calls
        /// <see cref="BeginErrorCondition(Parser)"/>
        /// and dispatches the reporting task based on the runtime type of
        /// <paramref name="e"/>
        /// according to the following table.</p>
        /// <ul>
        /// <li>
        /// <see cref="NoViableAltException"/>
        /// : Dispatches the call to
        /// <see cref="ReportNoViableAlternative(Parser, NoViableAltException)"/>
        /// </li>
        /// <li>
        /// <see cref="InputMismatchException"/>
        /// : Dispatches the call to
        /// <see cref="ReportInputMismatch(Parser, InputMismatchException)"/>
        /// </li>
        /// <li>
        /// <see cref="FailedPredicateException"/>
        /// : Dispatches the call to
        /// <see cref="ReportFailedPredicate(Parser, FailedPredicateException)"/>
        /// </li>
        /// <li>All other types: calls
        /// <see cref="Parser.NotifyErrorListeners(string)"/>
        /// to report
        /// the exception</li>
        /// </ul>
        /// </summary>
        public virtual void ReportError(Parser recognizer, RecognitionException e)
        {
            // if we've already reported an error and have not matched a token
            // yet successfully, don't report any errors.
            if (InErrorRecoveryMode(recognizer))
            {
                //			System.err.print("[SPURIOUS] ");
                return;
            }
            // don't report spurious errors
            BeginErrorCondition(recognizer);
            if (e is NoViableAltException)
            {
                ReportNoViableAlternative(recognizer, (NoViableAltException)e);
            }
            else
            {
                if (e is InputMismatchException)
                {
                    ReportInputMismatch(recognizer, (InputMismatchException)e);
                }
                else
                {
                    if (e is FailedPredicateException)
                    {
                        ReportFailedPredicate(recognizer, (FailedPredicateException)e);
                    }
                    else
                    {
#if !PORTABLE
                        System.Console.Error.WriteLine("unknown recognition error type: " + e.GetType().FullName);
#endif
                        NotifyErrorListeners(recognizer, e.Message, e);
                    }
                }
            }
        }