PackageTrack
Sign in Get early access

lalrpop-util

Runtime library for parsers generated by LALRPOP

0.23.1 80M downloads/mo #912 most downloaded on crates.io lalrpop/lalrpop

What this package is like to depend on

Last release 5 months ago

11 Mar 2026

Release timing varies

gaps range from 1 weeks to 11 months

Some releases are documented

notes for 22 of 54 stable releases

2 versions withdrawn

withdrawn after publishing

11 years old

56 releases · first in 2015

2 releases in the last 12 months

see the full history below

Release timeline

56 releases · Jul 2015 to Mar 2026
2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026
Release Pre-release Withdrawn

Releases

latest 56
  1. 0.23.1 11 Mar 2026
    Release notes

    chore: Release lalrpop-util version 0.23.1

    Open source →
    Release notes

    Bugfixes

    • Fix bug where windows paths were used based on target OS rather than host OS, breaking cross compile scenarios

    <a name="0.23.0"></a>

    Open source →
  2. 0.23.0 12 Feb 2026
    Release notes

    chore: Release lalrpop-util version 0.23.0

    Open source →
    Release notes

    Breaking Changes

    • Lalrpop no longer exposes a regex-automata feature. This feature was previously exposed accidentally and did not change lalrpop functionality.
    • Make the lexer feature a default feature for lalrpop-util. In older versions of rust, lalrpop-util would automatically use the lexer feature when lalrpop did, but that is no longer the case, so this change keeps the common case as the default. If you're using a custom lexer, you'll need to make sure to disable default-features for both lalrpop and lalrpop-util.
    • Configuration.set_in_dir() can now no longer affect the output dir. In certain configurations, setting in_dir using set_in_dir() could actually cause the generated parser to be put in the input directory rather than in OUT_DIR. In most cases OUT_DIR may be what you want anyways and should work seamlessly. If you want to preserve the existing behavior of writing to the source directory, you should do that explicitly with set_out_dir() (or use_cargo_dir_conventions())
    • Configuration.set_in_dir() is now incompatible with process_current_dir(), and process_dir() , because all of these functions set an input directory themselves (either the current directory, or the argument). Previously, these functions would all silently ignore the set_in_dir() setting, except possibly to change the output directory as mentioned above. Now these functions are incompatible. If you get an error about this, remove set_in_dir() from your Configuration, or use it with process(). You may also need to change your output directory as mentioned in the previous bullet.

    Features

    • lalrpop_util::ParseError now implements the Hash trait
    • Support expanding multiple anonymous format arguments in the same pattern (e.g. <A> <B> => format!("<> <>")). It is an error if the number of format strings in the pattern do not match the number in the action code.
    • Support binding tuple patterns in grammar. This syntactic sugar can make dealing with nonterminal definitions that return multiple values easier.

    Changes

    • Bump MSRV to 1.85
    • Update to the 2024 rust edition

    Internal Development features

    • Support running tests with cargo-nextest.
    • Support running benchmarks on both lalrpop build time and generated parsers using cargo bench

    Bugfixes

    • Documentation updates
    • When using a custom lexer, the Location type previously required the Copy trait, which was undocumented and unintentional. This requirement has been dropped.
    • If looking for a .lalrpop file in a directory that no longer exists, lalrpop no longer creates the missing directory.

    <a name="0.22.2"></a>

    Open source →
  3. 0.22.2 22 May 2025
    Release notes

    chore: Release lalrpop-util version 0.22.2

    Open source →
    Release notes

    Features

    • Support \0 and \x## ASCII escape sequences in grammars
    • Documentation updates

    Bugfixes

    • Avoid clippy warnings for uninlined format strings in generated code

    <a name="0.22.1"></a>

    Open source →
  4. 0.22.1 21 Jan 2025
    Release notes

    When running cargo doc, the include_str command works fine, however,
    cargo publish relocates the package into target/package, so the relative
    path to the README is different, causing cargo publish to fail.

    External discussion at:

    rust-lang/cargo#13309
    https://users.rust-lang.org/t/include-str-does-not-work-when-releasing-because-of-changed-pathes/15551/14

    The solution suggested in those links is to symlink the top level README
    inside your package, and then consistently refer to the README in the
    package. That README will be copied into the right place during cargo
    publish.

    Open source →
    Release notes

    Bugfixes

    • Many documentation updates.
    • Internal cleanups and testsuite enhancements.
    • Isolate a few clippy lint allows more tightly to generated code so that these lints can trigger on action code.
    • Bump some dependency versions

    <a name="0.22.0"></a>

    Open source →
  5. 0.22.0 02 Oct 2024
    Release notes
    • Release version 0.22.0

    • Fix version in documentation comment

    • Update changelog based on recent merges

    • Update Cargo.lock to the latest version of dependencies

    Open source →
    Release notes

    Breaking changes

    • The lexer feature no longer implies the std feature. Now lexer is usable in no_std environments. In no_std, ParseError only implements the Error trait in rust 1.81 or later (since core::error was stablized in 1.81).

    Features

    • Overhaul cfg attributes. You can now include or omit grammar rules and alternatives based on cargo features with not(), any() and all() support

    Bugfixes

    • Improvements to error message reporting to improve clarity and suppress extra noise
    • lalrpop_mod!() now handles imports correctly
    • Reenable some warnings on user code for custom lexers

    <a name="0.21.0"></a>

    Open source →
  6. 0.21.0 26 Aug 2024
    Release notes

    chore: Release lalrpop-util version 0.21.0

    Open source →
    Release notes

    Since the last release, a fair number of the commits have been focused on cleaning up and improving LALRPOP's documentation. Shout out to Yudai Takada, George White, and Dinu Blanovschi.

    Features

    • LALRPOP now throws an error in more cases where it would previously just write out an error message and exit.
    • lalrpop::process_src is now the recommended function to use in build.rs files. Previously the documentation incorrectly suggested that lalrpop::process_root looked in ./src instead of .

    Bugfixes

    • A long-standing bug where LALRPOP would throw a "no entry found for key" exception when trying to handle certain grammars has been resolved.
    • LALRPOP will stop expanding macros infinitely during build time via a new macro_expansion_limit.

    Compatibility note

    Adding a limit to the number of times that LALRPOP will attempt to expand a macro is technically a breaking change. However, the default limit of 200 should be more than enough for the grammars we are currently aware of (which almost always need a limit of less than 5). This limit is customizable via Configuration::set_macro_expansion_limit.

    If you have a grammar that uses a significant amount of macro expansion steps, we would be very interested in a PR that adds it to the test suite.

    <a name="0.20.2"></a>

    Open source →
  7. 0.20.2 29 Feb 2024
    Release notes
    • Release 0.20.2

    • undo autoformatting of comments in Cargo.toml

    Co-authored-by: Yann Hamdaoui [email protected]


    Co-authored-by: Yann Hamdaoui [email protected]

    Open source →
    Release notes

    Special thanks to our newest maintainers, Daniel Burgener and Patrick LaFontaine for helping to coordinate this release.

    Features

    • Lalrpop no longer depends on the is-terminal crate (thanks to Kmeakin!)
    • Better performance with the default lexer using the underlying regex-automata crate (thanks to QuarticCat!)
    • Allow the catch-all _ case for token matching can now be set to a higher precedence in match (thanks to fpoli!)
    • Fewer clippy lints triggered in generated code
    • Lalrpop now traverses symlinks to find .lalrpop files(thanks mbid!)
    • Lalrpop now supports block comments including nestings(thanks seanbright!)

    Bugfixes

    • Lalrpop now uses the ascii-aware space regex when the unicode feature is not enabled (thanks to QuarticCat!)
    • Dangling symlinks in crate no longer cause build failure (thanks to legeana for the report!)
    • Unicode is now set as a default feature in lalrpop-util to align with lalrpop's defaults

    Compatibility note

    • MSRV increased to 1.70.
    • process_root_unconditionally now correctly lints as having been deprecated.
    • Internal types which lead with a __ and should not be relied upon are no longer publicly exposed (thanks to arnaudgolfouse!)
    • Lalrpop files containing a space in their name now return an error.

    <a name="0.20.1"></a>

    Open source →
  8. 0.20.1 23 Oct 2023 withdrawn
    Release notes
    • Release 0.20.1 notes

    • Add set -e -o to version.sh

    • Update version numbers

    • Create bugfix section and msrv nit

    • Add new maintainer note... which copies the 0.19.9 maintainer note

    Open source →
    Release notes

    Yanked

    <a name="0.20.0"></a>

    Open source →
  9. 0.20.0 05 May 2023
    Release notes

    Bringing back 0.19.10 patches and further enhancement.

    Breaking changes

    • Types and enums name with capitalized acronyms are renamed to camelCase
    • Minimum rust supported version is now 1.64
    • New unicode feature is added to enable regex/unicode and regex-syntax/unicode. Building lalrpop with --no-default-features may be broken without adding it.

    Features

    • faster compilation time by up to 2x
    • expected tokens in failed parses are more accurate
    • support for unicode when using builtin tokenizer

    Bug fixes and other changes

    • fewer warnings about clippy/unused imports in generated code
    • updated to edition 2021
    • updated mdbook
    • Use inclusive ranges for DFA/NFA
    • A new document "Lexing raw delimited content"

    <a name="0.19.12"></a>

    Open source →
  10. 0.19.12 28 Apr 2023
    Release notes
    • Add unicode feature to regex-syntax (thanks to Jan Niehusmann!)

    Compatibility note

    This is actually not fixing a lalrpop bug but fixing user side missing dependency. lalrpop doesn't directly depend on the feature. But regex from user code probably contains it. We will drop this dependency again in the next release.

    <a name="0.19.11"></a>

    Open source →
  11. 0.19.11 28 Apr 2023
    Release notes

    This release is based on 0.19.9, not 0.19.10 No feature added or other bug fixed since 0.19.9

    • Fix regex version dependency issues (thanks to Wilfried Chauveau!)

    <a name="0.19.10"></a>

    Open source →
  12. 0.19.10 24 Apr 2023 withdrawn
    Release notes

    Note: This version is yanked. These changes will be included in 0.20

    This release fixes an incompatibility with regex.

    Features

    • faster compilation time by up to 2x
    • expected tokens in failed parses are more accurate
    • support for unicode when using builtin tokenizer

    Bug fixes and other changes

    • fix a compatibility issue with regex 1.8
    • fewer warnings about clippy/unused imports in generated code
    • updated to edition 2021
    • updated mdbook

    <a name="0.19.9"></a>

    Open source →
  13. 0.19.9 25 Mar 2023
    Release notes

    This release addresses backwards compatibility warnings and security alerts, along with a few smaller features.

    Special thanks to our newest maintainers, Yann Hamdaoui and YunWon Jeong for helping to coordinate this release.

    Features

    • stream errors to the terminal as they are computed (thanks to Anders Kaseorg!)
    • lex raw identifiers (thanks to Karl Meakin!)
    • upgrade to the 2018 edition (thanks to blakehawkins!)

    Bug Fixes

    • fix bug in lane table state splitting (thanks Anders Kaseorg!)
    • fix warnings, typos, and links (thanks ggsh, Kian-Meng Ang, Ian Alexander Joiner, absurdhero, and Ömer Sinan Ağacan!)
    • fix licensing to be spdx-conformant (thanks chayleaf!)
    • fixs to the whitespace example (thanks Thalia Archibald!)

    Security patches

    • update regex to 1.5.5
    • update thread-local to 1.1.7
    • update to is-terminal from atty (thanks kpcyrd!)

    <a name="0.19.8"></a>

    Open source →
  14. 0.19.8 05 May 2022
    Release notes

    Features

    <a name="0.19.7"></a>

    Open source →
  15. 0.19.7 20 Jan 2022
    Release notes

    <a name="0.19.6"></a>

    Open source →
  16. 0.19.6 08 Jun 2021
    Release notes

    <a name="0.19.5"></a>

    Open source →
  17. 0.19.5 03 Mar 2021
    Release notes
    • Fix inlining of fallible productions
    • Update dependencies

    <a name="0.19.4"></a>

    Open source →
  18. 0.19.4 08 Jan 2021
    Release notes

    <a name="0.19.4"></a>

    Open source →
  19. 0.19.3 29 Dec 2020

    Nothing published for this version

  20. 0.19.2 25 Dec 2020
    Release notes
    • Allow string literals in patterns #557
    • Enable precedence annotations #555
    • Shake dependency tree #559

    <a name="0.19.1"></a>

    Open source →
  21. 0.19.1 04 Sep 2020
    Release notes
    • Reduce work for LLVMs inliner

    <a name="0.19.0"></a>

    Open source →
  22. 0.19.0 12 May 2020
    Release notes

    Performance

    • Move the symbol mismatch panic into a colder path (0c69e999)
    • Avoid subtracting in goto (8a47ed8c)
    • Emit the GOTO table as nested matches (c5070af2)
    • parse_table: Avoid generating unused rows in the matrix (688b9193)

    Features

    • Use FnMut/FnOnce in ParseErrors map functions (8f73c9dc)

    Bug Fixes

    • Don't include whitespace in the span with empty nonterminals (11a50e70)

    <a name="0.18.1"></a>

    Open source →
  23. 0.18.1 04 Mar 2020
    Release notes

    Bug Fixes

    • Remove eprintln which I thought were removed (a9a775eb)

    <a name="0.18.0"></a>

    Open source →
  24. 0.18.0 04 Mar 2020
    Release notes

    Features

    • Allow the tokenizer to contain custom skip regexes/literals (ee2f7060)
    • states does not need to be passed to reduce actions (c156b4b2)
    • action does not need to be passed to reduce actions (f69bce30)
    • Only generate simulate_reduce if error recovery is used (d0a3ccba)
    • Accept slices as types (#507) (c3e1cda5, closes #493)

    Bug Fixes

    • Avoid emitting redundant parentheses (b165fc93, closes #493)

    Breaking changes

    • The lexer feature is now necessary when lalrpop generates the lexer.

    <a name="0.17.2"></a>

    Open source →
  25. 0.17.2 21 Aug 2019

    Nothing published for this version

  26. 0.17.1 24 Jun 2019

    Nothing published for this version

  27. 0.17.0 07 May 2019

    Nothing published for this version

  28. 0.16.3 20 Jan 2019
    Release notes

    Performance

    • Avoid some memcpying in reductions (4968e5a6)

    Bug Fixes

    • Allow the deprecated use of trim_left (bdd65184, closes #428)
    • Don't make generated files read-only (0c67bbed)

    <a name="0.16.2"></a>

    Version 0.16.2 (2018-11-22)

    Open source →
  29. 0.16.2 28 Nov 2018

    Nothing published for this version

  30. 0.16.1 27 Oct 2018

    Nothing published for this version

  31. 0.16.0 03 Sep 2018

    Nothing published for this version

  32. 0.15.2 03 May 2018

    Nothing published for this version

  33. 0.15.1 05 Apr 2018

    Nothing published for this version

  34. 0.15.0 22 Mar 2018

    Nothing published for this version

  35. 0.14.0 24 Jan 2018

    Nothing published for this version

  36. 0.13.1 16 Jun 2017

    Nothing published for this version

  37. 0.13.0 07 Apr 2017

    Nothing published for this version

  38. 0.12.5 11 Feb 2017

    Nothing published for this version

  39. 0.12.4 29 Nov 2016

    Nothing published for this version

  40. 0.12.3 28 Nov 2016

    Nothing published for this version

  41. 0.12.2 23 Nov 2016

    Nothing published for this version

  42. 0.12.1 29 Sep 2016

    Nothing published for this version

  43. 0.12.0 05 Aug 2016

    Nothing published for this version

  44. 0.11.0 25 Feb 2016

    Nothing published for this version

  45. 0.10.0 19 Feb 2016

    Nothing published for this version

  46. 0.9.0 23 Jan 2016

    Nothing published for this version

  47. 0.8.0 06 Nov 2015

    Nothing published for this version

  48. 0.7.0 15 Oct 2015

    Nothing published for this version

  49. 0.6.1 15 Sep 2015

    Nothing published for this version

  50. 0.6.0 15 Sep 2015

    Nothing published for this version

  51. 0.5.0 11 Sep 2015

    Nothing published for this version

  52. 0.4.1 16 Aug 2015

    Nothing published for this version

  53. 0.4.0 16 Aug 2015

    Nothing published for this version

  54. 0.3.0 16 Aug 2015

    Nothing published for this version

  55. 0.2.0 27 Jul 2015

    Nothing published for this version

  56. 0.1.0 26 Jul 2015

    Nothing published for this version

Every package, every release, already written down.

The archive is open and free. Watching your own project is what we are building next.

Browse the archive