LCOV - code coverage report
Current view: top level - usr/include/antlr4-runtime - BufferedTokenStream.h (source / functions) Hit Total Coverage
Test: ROSE Lines: 0 1 0.0 %
Date: 2022-12-08 13:48:47 Functions: 0 0 -
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.
       2             :  * Use of this file is governed by the BSD 3-clause license that
       3             :  * can be found in the LICENSE.txt file in the project root.
       4             :  */
       5             : 
       6             : #pragma once
       7             : 
       8             : #include "TokenStream.h"
       9             : 
      10             : namespace antlr4 {
      11             : 
      12             :   /**
      13             :    * This implementation of {@link TokenStream} loads tokens from a
      14             :    * {@link TokenSource} on-demand, and places the tokens in a buffer to provide
      15             :    * access to any previous token by index.
      16             :    *
      17             :    * <p>
      18             :    * This token stream ignores the value of {@link Token#getChannel}. If your
      19             :    * parser requires the token stream filter tokens to only those on a particular
      20             :    * channel, such as {@link Token#DEFAULT_CHANNEL} or
      21             :    * {@link Token#HIDDEN_CHANNEL}, use a filtering token stream such a
      22             :    * {@link CommonTokenStream}.</p>
      23             :    */
      24           0 :   class ANTLR4CPP_PUBLIC BufferedTokenStream : public TokenStream {
      25             :   public:
      26             :     BufferedTokenStream(TokenSource *tokenSource);
      27             :     BufferedTokenStream(const BufferedTokenStream& other) = delete;
      28             : 
      29             :     BufferedTokenStream& operator = (const BufferedTokenStream& other) = delete;
      30             : 
      31             :     virtual TokenSource* getTokenSource() const override;
      32             :     virtual size_t index() override;
      33             :     virtual ssize_t mark() override;
      34             : 
      35             :     virtual void release(ssize_t marker) override;
      36             :     virtual void reset();
      37             :     virtual void seek(size_t index) override;
      38             : 
      39             :     virtual size_t size() override;
      40             :     virtual void consume() override;
      41             : 
      42             :     virtual Token* get(size_t i) const override;
      43             : 
      44             :     /// Get all tokens from start..stop inclusively.
      45             :     virtual std::vector<Token *> get(size_t start, size_t stop);
      46             : 
      47             :     virtual size_t LA(ssize_t i) override;
      48             :     virtual Token* LT(ssize_t k) override;
      49             : 
      50             :     /// Reset this token stream by setting its token source.
      51             :     virtual void setTokenSource(TokenSource *tokenSource);
      52             :     virtual std::vector<Token *> getTokens();
      53             :     virtual std::vector<Token *> getTokens(size_t start, size_t stop);
      54             : 
      55             :     /// <summary>
      56             :     /// Given a start and stop index, return a List of all tokens in
      57             :     ///  the token type BitSet.  Return null if no tokens were found.  This
      58             :     ///  method looks at both on and off channel tokens.
      59             :     /// </summary>
      60             :     virtual std::vector<Token *> getTokens(size_t start, size_t stop, const std::vector<size_t> &types);
      61             :     virtual std::vector<Token *> getTokens(size_t start, size_t stop, size_t ttype);
      62             : 
      63             :     /// Collect all tokens on specified channel to the right of
      64             :     ///  the current token up until we see a token on DEFAULT_TOKEN_CHANNEL or
      65             :     ///  EOF. If channel is -1, find any non default channel token.
      66             :     virtual std::vector<Token *> getHiddenTokensToRight(size_t tokenIndex, ssize_t channel);
      67             : 
      68             :     /// <summary>
      69             :     /// Collect all hidden tokens (any off-default channel) to the right of
      70             :     ///  the current token up until we see a token on DEFAULT_TOKEN_CHANNEL
      71             :     ///  or EOF.
      72             :     /// </summary>
      73             :     virtual std::vector<Token *> getHiddenTokensToRight(size_t tokenIndex);
      74             : 
      75             :     /// <summary>
      76             :     /// Collect all tokens on specified channel to the left of
      77             :     ///  the current token up until we see a token on DEFAULT_TOKEN_CHANNEL.
      78             :     ///  If channel is -1, find any non default channel token.
      79             :     /// </summary>
      80             :     virtual std::vector<Token *> getHiddenTokensToLeft(size_t tokenIndex, ssize_t channel);
      81             : 
      82             :     /// <summary>
      83             :     /// Collect all hidden tokens (any off-default channel) to the left of
      84             :     ///  the current token up until we see a token on DEFAULT_TOKEN_CHANNEL.
      85             :     /// </summary>
      86             :     virtual std::vector<Token *> getHiddenTokensToLeft(size_t tokenIndex);
      87             : 
      88             :     virtual std::string getSourceName() const override;
      89             :     virtual std::string getText() override;
      90             :     virtual std::string getText(const misc::Interval &interval) override;
      91             :     virtual std::string getText(RuleContext *ctx) override;
      92             :     virtual std::string getText(Token *start, Token *stop) override;
      93             : 
      94             :     /// Get all tokens from lexer until EOF.
      95             :     virtual void fill();
      96             : 
      97             :   protected:
      98             :     /**
      99             :      * The {@link TokenSource} from which tokens for this stream are fetched.
     100             :      */
     101             :     TokenSource *_tokenSource;
     102             : 
     103             :     /**
     104             :      * A collection of all tokens fetched from the token source. The list is
     105             :      * considered a complete view of the input once {@link #fetchedEOF} is set
     106             :      * to {@code true}.
     107             :      */
     108             :     std::vector<std::unique_ptr<Token>> _tokens;
     109             : 
     110             :     /**
     111             :      * The index into {@link #tokens} of the current token (next token to
     112             :      * {@link #consume}). {@link #tokens}{@code [}{@link #p}{@code ]} should be
     113             :      * {@link #LT LT(1)}.
     114             :      *
     115             :      * <p>This field is set to -1 when the stream is first constructed or when
     116             :      * {@link #setTokenSource} is called, indicating that the first token has
     117             :      * not yet been fetched from the token source. For additional information,
     118             :      * see the documentation of {@link IntStream} for a description of
     119             :      * Initializing Methods.</p>
     120             :      */
     121             :     // ml: since -1 requires to make this member signed for just this single aspect we use a member _needSetup instead.
     122             :     //     Use bool isInitialized() to find out if this stream has started reading.
     123             :     size_t _p;
     124             : 
     125             :     /**
     126             :      * Indicates whether the {@link Token#EOF} token has been fetched from
     127             :      * {@link #tokenSource} and added to {@link #tokens}. This field improves
     128             :      * performance for the following cases:
     129             :      *
     130             :      * <ul>
     131             :      * <li>{@link #consume}: The lookahead check in {@link #consume} to prevent
     132             :      * consuming the EOF symbol is optimized by checking the values of
     133             :      * {@link #fetchedEOF} and {@link #p} instead of calling {@link #LA}.</li>
     134             :      * <li>{@link #fetch}: The check to prevent adding multiple EOF symbols into
     135             :      * {@link #tokens} is trivial with this field.</li>
     136             :      * <ul>
     137             :      */
     138             :     bool _fetchedEOF;
     139             : 
     140             :     /// <summary>
     141             :     /// Make sure index {@code i} in tokens has a token.
     142             :     /// </summary>
     143             :     /// <returns> {@code true} if a token is located at index {@code i}, otherwise
     144             :     ///    {@code false}. </returns>
     145             :     /// <seealso cref= #get(int i) </seealso>
     146             :     virtual bool sync(size_t i);
     147             : 
     148             :     /// <summary>
     149             :     /// Add {@code n} elements to buffer.
     150             :     /// </summary>
     151             :     /// <returns> The actual number of elements added to the buffer. </returns>
     152             :     virtual size_t fetch(size_t n);
     153             : 
     154             :     virtual Token* LB(size_t k);
     155             : 
     156             :     /// Allowed derived classes to modify the behavior of operations which change
     157             :     /// the current stream position by adjusting the target token index of a seek
     158             :     /// operation. The default implementation simply returns {@code i}. If an
     159             :     /// exception is thrown in this method, the current stream index should not be
     160             :     /// changed.
     161             :     /// <p/>
     162             :     /// For example, <seealso cref="CommonTokenStream"/> overrides this method to ensure that
     163             :     /// the seek target is always an on-channel token.
     164             :     ///
     165             :     /// <param name="i"> The target token index. </param>
     166             :     /// <returns> The adjusted target token index. </returns>
     167             :     virtual ssize_t adjustSeekIndex(size_t i);
     168             :     void lazyInit();
     169             :     virtual void setup();
     170             : 
     171             :     /**
     172             :      * Given a starting index, return the index of the next token on channel.
     173             :      * Return {@code i} if {@code tokens[i]} is on channel. Return the index of
     174             :      * the EOF token if there are no tokens on channel between {@code i} and
     175             :      * EOF.
     176             :      */
     177             :     virtual ssize_t nextTokenOnChannel(size_t i, size_t channel);
     178             : 
     179             :     /**
     180             :      * Given a starting index, return the index of the previous token on
     181             :      * channel. Return {@code i} if {@code tokens[i]} is on channel. Return -1
     182             :      * if there are no tokens on channel between {@code i} and 0.
     183             :      *
     184             :      * <p>
     185             :      * If {@code i} specifies an index at or after the EOF token, the EOF token
     186             :      * index is returned. This is due to the fact that the EOF token is treated
     187             :      * as though it were on every channel.</p>
     188             :      */
     189             :     virtual ssize_t previousTokenOnChannel(size_t i, size_t channel);
     190             : 
     191             :     virtual std::vector<Token *> filterForChannel(size_t from, size_t to, ssize_t channel);
     192             : 
     193             :     bool isInitialized() const;
     194             : 
     195             :   private:
     196             :     bool _needSetup;
     197             :     void InitializeInstanceFields();
     198             :   };
     199             : 
     200             : } // namespace antlr4

Generated by: LCOV version 1.14