/* 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 "antlr4-common.h"

namespace antlr4 {
namespace tree {
namespace pattern {

  /// <summary>
  /// A chunk is either a token tag, a rule tag, or a span of literal text within a
  /// tree pattern.
  /// <p/>
  /// The method <seealso cref="ParseTreePatternMatcher#split(String)"/> returns a list of
  /// chunks in preparation for creating a token stream by
  /// <seealso cref="ParseTreePatternMatcher#tokenize(String)"/>. From there, we get a parse
  /// tree from with <seealso cref="ParseTreePatternMatcher#compile(String, int)"/>. These
  /// chunks are converted to <seealso cref="RuleTagToken"/>, <seealso cref="TokenTagToken"/>, or the
  /// regular tokens of the text surrounding the tags.
  /// </summary>
  class ANTLR4CPP_PUBLIC Chunk {
  public:
    Chunk() = default;
    Chunk(Chunk const&) = default;
    virtual ~Chunk();

    Chunk& operator=(Chunk const&) = default;

    /// This method returns a text representation of the tag chunk. Labeled tags
    /// are returned in the form {@code label:tag}, and unlabeled tags are
    /// returned as just the tag name.
    virtual std::string toString() {
      std::string str;
      return str;
    }
  };

} // namespace pattern
} // namespace tree
} // namespace antlr4
