Repository URL to install this package:
|
Version:
2023.12.1 ▾
|
/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.
* Use of this file is governed by the BSD 3-clause license that
* can be found in the LICENSE.txt file in the project root.
*/
using Antlr4.Runtime;
using Antlr4.Runtime.Misc;
using Antlr4.Runtime.Sharpen;
using System.IO;
namespace Antlr4.Runtime
{
/// <summary>
/// The interface for defining strategies to deal with syntax errors encountered
/// during a parse by ANTLR-generated parsers.
/// </summary>
/// <remarks>
/// The interface for defining strategies to deal with syntax errors encountered
/// during a parse by ANTLR-generated parsers. We distinguish between three
/// different kinds of errors:
/// <ul>
/// <li>The parser could not figure out which path to take in the ATN (none of
/// the available alternatives could possibly match)</li>
/// <li>The current input does not match what we were looking for</li>
/// <li>A predicate evaluated to false</li>
/// </ul>
/// Implementations of this interface report syntax errors by calling
/// <see cref="Parser.NotifyErrorListeners(string)"/>
/// .
/// <p>TODO: what to do about lexers</p>
/// </remarks>
public interface IAntlrErrorStrategy
{
/// <summary>
/// Reset the error handler state for the specified
/// <paramref name="recognizer"/>
/// .
/// </summary>
/// <param name="recognizer">the parser instance</param>
void Reset(Parser recognizer);
/// <summary>
/// This method is called when an unexpected symbol is encountered during an
/// inline match operation, such as
/// <see cref="Parser.Match(int)"/>
/// . If the error
/// strategy successfully recovers from the match failure, this method
/// returns the
/// <see cref="IToken"/>
/// instance which should be treated as the
/// successful result of the match.
/// <p>Note that the calling code will not report an error if this method
/// returns successfully. The error strategy implementation is responsible
/// for calling
/// <see cref="Parser.NotifyErrorListeners(string)"/>
/// as appropriate.</p>
/// </summary>
/// <param name="recognizer">the parser instance</param>
/// <exception cref="RecognitionException">
/// if the error strategy was not able to
/// recover from the unexpected input symbol
/// </exception>
/// <exception cref="Antlr4.Runtime.RecognitionException"/>
[return: NotNull]
IToken RecoverInline(Parser recognizer);
/// <summary>
/// This method is called to recover from exception
/// <paramref name="e"/>
/// . This method is
/// called after
/// <see cref="ReportError(Parser, RecognitionException)"/>
/// by the default exception handler
/// generated for a rule method.
/// </summary>
/// <seealso cref="ReportError(Parser, RecognitionException)"/>
/// <param name="recognizer">the parser instance</param>
/// <param name="e">the recognition exception to recover from</param>
/// <exception cref="RecognitionException">
/// if the error strategy could not recover from
/// the recognition exception
/// </exception>
/// <exception cref="Antlr4.Runtime.RecognitionException"/>
void Recover(Parser recognizer, RecognitionException e);
/// <summary>
/// This method provides the error handler with an opportunity to handle
/// syntactic or semantic errors in the input stream before they result in a
/// <see cref="RecognitionException"/>
/// .
/// <p>The generated code currently contains calls to
/// <see cref="Sync(Parser)"/>
/// after
/// entering the decision state of a closure block (
/// <c>(...)*</c>
/// or
/// <c>(...)+</c>
/// ).</p>
/// <p>For an implementation based on Jim Idle's "magic sync" mechanism, see
/// <see cref="DefaultErrorStrategy.Sync(Parser)"/>
/// .</p>
/// </summary>
/// <seealso cref="DefaultErrorStrategy.Sync(Parser)"/>
/// <param name="recognizer">the parser instance</param>
/// <exception cref="RecognitionException">
/// if an error is detected by the error
/// strategy but cannot be automatically recovered at the current state in
/// the parsing process
/// </exception>
/// <exception cref="Antlr4.Runtime.RecognitionException"/>
void Sync(Parser recognizer);
/// <summary>
/// Tests whether or not
/// <paramref name="recognizer"/>
/// is in the process of recovering
/// from an error. In error recovery mode,
/// <see cref="Parser.Consume()"/>
/// adds
/// symbols to the parse tree by calling
/// <see cref="ParserRuleContext.AddErrorNode(IToken)"/>
/// instead of
/// <see cref="ParserRuleContext.AddChild(IToken)"/>
/// .
/// </summary>
/// <param name="recognizer">the parser instance</param>
/// <returns>
///
/// <see langword="true"/>
/// if the parser is currently recovering from a parse
/// error, otherwise
/// <see langword="false"/>
/// </returns>
bool InErrorRecoveryMode(Parser recognizer);
/// <summary>
/// This method is called by when the parser successfully matches an input
/// symbol.
/// </summary>
/// <remarks>
/// This method is called by when the parser successfully matches an input
/// symbol.
/// </remarks>
/// <param name="recognizer">the parser instance</param>
void ReportMatch(Parser recognizer);
/// <summary>
/// Report any kind of
/// <see cref="RecognitionException"/>
/// . This method is called by
/// the default exception handler generated for a rule method.
/// </summary>
/// <param name="recognizer">the parser instance</param>
/// <param name="e">the recognition exception to report</param>
void ReportError(Parser recognizer, RecognitionException e);
}
}