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.Atn;
using Antlr4.Runtime.Misc;
using Antlr4.Runtime.Sharpen;
namespace Antlr4.Runtime.Atn
{
/// <summary>
/// Represents a single action which can be executed following the successful
/// match of a lexer rule.
/// </summary>
/// <remarks>
/// Represents a single action which can be executed following the successful
/// match of a lexer rule. Lexer actions are used for both embedded action syntax
/// and ANTLR 4's new lexer command syntax.
/// </remarks>
/// <author>Sam Harwell</author>
/// <since>4.2</since>
public interface ILexerAction
{
/// <summary>Gets the serialization type of the lexer action.</summary>
/// <remarks>Gets the serialization type of the lexer action.</remarks>
/// <returns>The serialization type of the lexer action.</returns>
[NotNull]
LexerActionType ActionType
{
get;
}
/// <summary>Gets whether the lexer action is position-dependent.</summary>
/// <remarks>
/// Gets whether the lexer action is position-dependent. Position-dependent
/// actions may have different semantics depending on the
/// <see cref="Antlr4.Runtime.ICharStream"/>
/// index at the time the action is executed.
/// <p>Many lexer commands, including
/// <c>type</c>
/// ,
/// <c>skip</c>
/// , and
/// <c>more</c>
/// , do not check the input index during their execution.
/// Actions like this are position-independent, and may be stored more
/// efficiently as part of the
/// <see cref="LexerATNConfig.lexerActionExecutor"/>
/// .</p>
/// </remarks>
/// <returns>
///
/// <see langword="true"/>
/// if the lexer action semantics can be affected by the
/// position of the input
/// <see cref="Antlr4.Runtime.ICharStream"/>
/// at the time it is executed;
/// otherwise,
/// <see langword="false"/>
/// .
/// </returns>
bool IsPositionDependent
{
get;
}
/// <summary>
/// Execute the lexer action in the context of the specified
/// <see cref="Antlr4.Runtime.Lexer"/>
/// .
/// <p>For position-dependent actions, the input stream must already be
/// positioned correctly prior to calling this method.</p>
/// </summary>
/// <param name="lexer">The lexer instance.</param>
void Execute(Lexer lexer);
}
}