github foonathan/lexy v2022.12.0
Release 2022.12.0

latest release: v2022.12.1
23 months ago

Headline: Unicode 15 support, ability to split a grammar into multiple translation units using lexy::dsl::subgrammar, and significant performance improvements.

Potential breaking changes

  • Change [lexy::dsl::peek_not() error recovery behavior:
    it will now consume the input it matched to recover, which is more useful.
  • Remove Production parameter from lexy::error_context.
    It is replaced by a type-erased lexy::production_info.
  • lexy::validate, lexy::parse, and lexy::parse_as_tree now type-erase generic error tags prior to invoking the callback.
  • Use type-erased lexy::production_info instead of Production type in lexy::parse_tree.
    This is technically a breaking change, as it may affect overload resolution.

New features

  • Update Unicode database to Unicode 15.
  • Use SWAR (SIMD within a register) techniques to optimize token parsing.
  • Add lexy::dsl::subgrammar to split a grammar into multiple translation units.
  • Add lexy::dsl::flags and lexy::dsl::flag to parse enum flags.
  • Add overload of lexy::dsl::position that parses a rule.
    This allows using it as branch conditions.
  • Add lexy::dsl::effect to trigger side-effects during parsing.
  • Add lexy::subexpression_production to parse a subexpression.
  • Add lexy::utf8_char_encoding.
  • Add lexy::parse_tree::remaining_input() and populate it by lexy::parse_as_tree.
  • Add lexy::make_buffer_from_input function.
  • Add type-erased version of lexy::error.
  • Support non-const parse state.

Bugfixes

  • Fix bug where lexy::bind callback does not forward rvalue arguments; they got turned into lvalues instead.
  • Fix bug where callback composition was not allowed if the final callback returns void.
  • Fix bug where dsl::quoted(cc.error<foo>) did not use foo as the error.

New Contributors

Full Changelog: v2022.05.1...v2022.12.0

Don't miss a new lexy release

NewReleases is sending notifications on new releases.