Header lexy/input/lexeme_input.hpp

Input lexy::lexeme_input

lexy/input/lexeme_input.hpp
namespace lexy
{
  template <input auto ParentInput>
  class lexeme_input
  {
      using lexeme-type = lexeme_for<ParentInput>;

  public:
      using encoding  = typename lexeme-type::encoding;
      using char_type = typename lexeme-type::char_type;
      using iterator  = typename lexeme-type::iterator;

      //=== constructor ===//
      explicit lexeme_input(const ParentInput& input, lexeme-type lexeme);

      explicit lexeme_input(const ParentInput& input, iterator begin, iterator end);

      //=== access ===//
      const ParentInput& parent_input() const;
      lexeme-type lexeme() const;

      //=== input ===//
      reader auto reader() const& noexcept;
  };
}

The class lexy::lexeme_input uses a lexy::lexeme  as the input.

A lexeme is a subset of an existing input, the parent input, which must be provided as well. If the parent input is a view-like input (e.g. lexy::string_input  or lexy::range_input , it stores a copy. Otherwise, if the parent input owns the input (e.g. lexy::buffer ), it stores a pointer to the parent input.

If an error is generated on a lexeme input, lexy::error_context  will return the parent input. That way, any calls to lexy::get_input_location  will result in the correct line/column information for the entire input, and don’t start at the partial input.

Tip
Use lexy::lexeme_input if the input is parsed in multiple passes.

See also