Potential breaking changes
scanner-common::capture_tokenwas renamed toscanner-common::capture, and oldscanner-common::captureremoved.
Previously,capture_tokenwas a linker error anyway, but if you're callingscanner-common::captureit will no longer work for arbitrary rules and instead only likedsl::capture.lexy::parse_as_treewill add a position token to production nodes that would otherwise be empty.
That way, no production node will be empty, unless the builder API is used directly.- Change
lexy::dsl::try_()error recovery behavior:
It will now skip whitespace after the (optional) error recovery rule. - Deprecate the
lexy::parse_tree::builder::finish()overload that does not take aremaining_input. - The typo
lexy::code_point::spaing_markwas fixed tospacing_mark.
New Features
- Experimental: Add
lexy::parse_tree_inputandlexy::dsl::tnode/lexy::dsl::pnodeto support multi-pass parsing. - Add
lexy::dsl::byte.if_/set/range/asciimethods to match specific bytes. - Add an overload of
fatal_error()on scanners that allows construction of type-erased generic errors (#134). - Add
lexy::buffer::release()andlexy::buffer::adopt()to deconstruct a buffer into its components and re-assemble it later. - Add
lexy::parse_tree::node::position()and::covering_lexeme(). - Add default argument to
lexy::dsl::flag(). - Add
lexy::callback_with_state. - Pass the parse state to the tag of
lexy::dsl::opif required (#172) and tolexy::dsl::error(#211). - Enable CMake install rule for subdirectory builds (#205).
Bug fixes
- Add missing
constexprto container callbacks andlexy::as_string. - Fix infinite loop in
dsl::delimitedwhen dealing with invalid code points (#173). - Fix swallowed errors from case-folding rules (#149).
- Fix
lexy::production_namefor productions in an anonymous namespace. - Fix bugs in
dsl::scan(#133, #135, #142, #154, #209). - Fix bug with the position passed to the tag constructor of
lexy::dsl::op(#170). - Fix bug where
lexy_ext::report_errorunconditionally wrote tostderr, ignoring the output iterator. - Fix bug with missing
lexy::error_context::positioninlexy::parse_as_tree(#184). - Fix
static_assertinlexy::parse_tree(#190). - Fix bugs in
lexy::input_location::operator<(#228). - Fix bugs in examples (#183)
- Add missing
&&inlexy::bind_sink(#221). - Workaround compiler bugs and improve documentation (#128, #129, #146, #181, #197, #216, #227).
New Contributors
- @jgopel made their first contribution in #128
- @NelsonEloi made their first contribution in #129
- @nickelpro made their first contribution in #134
- @jan-kelemen made their first contribution in #146
- @shohirose made their first contribution in #181
- @MarcusVoelker made their first contribution in #182
- @klao made their first contribution in #183
- @stotiks made their first contribution in #197
- @TheServer201 made their first contribution in #227
- @Spartan322 made their first contribution in #228
Full Changelog: v2022.12.1...v2025.05.0