/* 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