PEGTL v3.0.0 Release Notes

Release Date: 2020-11-28 // over 3 years ago
    • Use the migration guide when updating.
    • Infrastructure
      • Updated required C++ standard to C++17.
      • Updated required CMake version to 3.8.
      • The macro TAO_PEGTL_NAMESPACE now contains the fully qualified namespace, e.g. tao::pegtl.
      • Added [[nodiscard]] or [[noreturn]] to most non-void functions.
    • Meta-Data Layer
      • Replaced analysis_t with more general and complete rule_t and subs_t.
      • Added functions to visit all rules of a grammar.
      • Added functions to measure rule coverage of a parsing run.
      • Moved the analysis function and header to contrib.
    • Error Handling
      • Replaced tao::pegtl::input_error with std::system_error and std::filesystem::filesystem_error.
      • Added must_if<>
      • Allows to define custom error messages for global errors.
      • Adds a non-intrusive way to define global parse errors for a grammar retroactively.
    • Demangling
      • Removed the need for RTTI.
      • Some broken/unknown compilers will use RTTI as a fallback, without demangling.
      • Moved tao::pegtl::internal::demangle<T>() to tao::demangle<T>().
      • Improved generated code to be shorter and more efficient.
    • 📜 Parse Tree
      • Removed the need for RTTI.
    • Other
      • Changed std::string to std::filesystem::path for filename parameters.
      • Renamed byte_in_line to column and use 1-based counting.
      • Moved rule eolf from inline namespace tao::pegtl::ascii to tao::pegtl.
      • Changed rules in tao/pegtl/contrib/integer.hpp to not accept redundant leading zeros.
      • Added rules to tao/pegtl/contrib/integer.hpp that test unsigned values against a maximum.
      • Demoted UTF-16 and UTF-32 support to contrib.
      • Demoted UINT-8, UINT-16, UINT-32 and UINT-64 support to contrib.
      • Folded contrib/counter.hpp into json_count.cpp, count is superceded by coverage.
      • Removed right padding from contrib/json.hpp's value.
    • Cleanup
      • Removed option of state's S::success() to have an extended signature to get access to the current apply_mode, rewind_mode, action- and control class (template).
      • Removed compatibility macros starting with TAOCPP_PEGTL_.
      • Removed compatibility uppercase enumerators.
      • Removed compatibility peek_byte() member functions.
      • Removed compatibility header changes.hpp from contrib.

Previous changes from v2.8.3

    • 🛠 Fixed excessive read-ahead with incremental inputs.
    • Added state manipulators remove_first_state, remove_last_states, rotate_states_right, rotate_states_left, and reverse_states to contrib.
    • ⬇️ Reduced the number of intermediate parse tree nodes.