/* 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 "BufferedTokenStream.h" namespace antlr4 { /** * This class extends {@link BufferedTokenStream} with functionality to filter * token streams to tokens on a particular channel (tokens where * {@link Token#getChannel} returns a particular value). * *

* This token stream provides access to all tokens by index or when calling * methods like {@link #getText}. The channel filtering is only used for code * accessing tokens via the lookahead methods {@link #LA}, {@link #LT}, and * {@link #LB}.

* *

* By default, tokens are placed on the default channel * ({@link Token#DEFAULT_CHANNEL}), but may be reassigned by using the * {@code ->channel(HIDDEN)} lexer command, or by using an embedded action to * call {@link Lexer#setChannel}. *

* *

* Note: lexer rules which use the {@code ->skip} lexer command or call * {@link Lexer#skip} do not produce tokens at all, so input text matched by * such a rule will not be available as part of the token stream, regardless of * channel.

*/ class ANTLR4CPP_PUBLIC CommonTokenStream : public BufferedTokenStream { public: /** * Constructs a new {@link CommonTokenStream} using the specified token * source and the default token channel ({@link Token#DEFAULT_CHANNEL}). * * @param tokenSource The token source. */ CommonTokenStream(TokenSource *tokenSource); /** * Constructs a new {@link CommonTokenStream} using the specified token * source and filtering tokens to the specified channel. Only tokens whose * {@link Token#getChannel} matches {@code channel} or have the * {@link Token#getType} equal to {@link Token#EOF} will be returned by the * token stream lookahead methods. * * @param tokenSource The token source. * @param channel The channel to use for filtering tokens. */ CommonTokenStream(TokenSource *tokenSource, size_t channel); virtual Token* LT(ssize_t k) override; /// Count EOF just once. virtual int getNumberOfOnChannelTokens(); protected: /** * Specifies the channel to use for filtering tokens. * *

* The default value is {@link Token#DEFAULT_CHANNEL}, which matches the * default channel assigned to tokens created by the lexer.

*/ size_t channel; virtual ssize_t adjustSeekIndex(size_t i) override; virtual Token* LB(size_t k) override; }; } // namespace antlr4