1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
/* 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);
}
}