/* 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. */ #pragma once #include "RuleContext.h" #include "atn/LexerAction.h" namespace antlr4 { namespace atn { /// /// This implementation of is used for tracking input offsets /// for position-dependent actions within a . /// /// This action is not serialized as part of the ATN, and is only required for /// position-dependent lexer actions which appear at a location other than the /// end of a rule. For more information about DFA optimizations employed for /// lexer actions, see and /// . /// /// @author Sam Harwell /// @since 4.2 /// class ANTLR4CPP_PUBLIC LexerIndexedCustomAction final : public LexerAction { public: /// /// Constructs a new indexed custom action by associating a character offset /// with a . /// /// Note: This class is only required for lexer actions for which /// returns {@code true}. /// /// The offset into the input , relative to /// the token start index, at which the specified lexer action should be /// executed. /// The lexer action to execute at a particular offset in the /// input . LexerIndexedCustomAction(int offset, Ref const& action); /// /// Gets the location in the input at which the lexer /// action should be executed. The value is interpreted as an offset relative /// to the token start index. /// /// The location in the input at which the lexer /// action should be executed. int getOffset() const; /// /// Gets the lexer action to execute. /// /// A object which executes the lexer action. Ref getAction() const; /// /// {@inheritDoc} /// /// This method returns the result of calling /// on the returned by . virtual LexerActionType getActionType() const override; /// /// {@inheritDoc} /// This method returns {@code true}. virtual bool isPositionDependent() const override; virtual void execute(Lexer *lexer) override; virtual size_t hashCode() const override; virtual bool operator == (const LexerAction &obj) const override; virtual std::string toString() const override; private: const int _offset; const Ref _action; }; } // namespace atn } // namespace antlr4