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 2026Releases
latest 56-
0.23.111 Mar 2026Release notes
Open source →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>
-
0.23.012 Feb 2026Release notes
Open source →Breaking Changes
- Lalrpop no longer exposes a regex-automata feature. This feature was previously exposed accidentally and did not change lalrpop functionality.
- Make the
lexerfeature a default feature for lalrpop-util. In older versions of rust, lalrpop-util would automatically use thelexerfeature 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 usingset_in_dir()could actually cause the generated parser to be put in the input directory rather than inOUT_DIR. In most casesOUT_DIRmay 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 withset_out_dir()(oruse_cargo_dir_conventions())Configuration.set_in_dir()is now incompatible withprocess_current_dir(), andprocess_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 theset_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, removeset_in_dir()from yourConfiguration, or use it withprocess(). You may also need to change your output directory as mentioned in the previous bullet.
Features
lalrpop_util::ParseErrornow implements theHashtrait- 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
Locationtype previously required theCopytrait, 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>
-
0.22.222 May 2025Release notes
Open source →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>
-
0.22.121 Jan 2025Release notes
Open source →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/14The 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.Release notes
Open source →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>
-
0.22.002 Oct 2024Release notes
Open source →-
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
Release notes
Open source →Breaking changes
- The
lexerfeature no longer implies thestdfeature. Nowlexeris usable inno_stdenvironments. Inno_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()andall()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>
-
-
0.21.026 Aug 2024Release notes
Open source →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_srcis now the recommended function to use inbuild.rsfiles. Previously the documentation incorrectly suggested thatlalrpop::process_rootlooked in./srcinstead 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
200should 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 viaConfiguration::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>
-
0.20.229 Feb 2024Release notes
Open source →-
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]
Release notes
Open source →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-terminalcrate (thanks to Kmeakin!) - Better performance with the default lexer using the underlying
regex-automatacrate (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_unconditionallynow 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>
-
-
0.20.123 Oct 2023 withdrawnRelease notes
Open source →-
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
-
-
0.20.005 May 2023Release notes
Open source →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
unicodefeature is added to enableregex/unicodeandregex-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>
-
0.19.1228 Apr 2023Release notes
Open source →- Add
unicodefeature toregex-syntax(thanks to Jan Niehusmann!)
Compatibility note
This is actually not fixing a
lalrpopbug but fixing user side missing dependency.lalrpopdoesn'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>
- Add
-
0.19.1128 Apr 2023Release notes
Open source →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>
-
0.19.1024 Apr 2023 withdrawnRelease notes
Open source →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>
-
0.19.925 Mar 2023Release notes
Open source →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
regexto 1.5.5 - update
thread-localto 1.1.7 - update to
is-terminalfromatty(thanks kpcyrd!)
<a name="0.19.8"></a>
-
0.19.805 May 2022 -
0.19.720 Jan 2022 -
0.19.608 Jun 2021 -
0.19.503 Mar 2021Release notes
Open source →- Fix inlining of fallible productions
- Update dependencies
<a name="0.19.4"></a>
-
0.19.408 Jan 2021 -
0.19.329 Dec 2020Nothing published for this version
-
0.19.225 Dec 2020Release notes
Open source →- Allow string literals in patterns #557
- Enable precedence annotations #555
- Shake dependency tree #559
<a name="0.19.1"></a>
-
0.19.104 Sep 2020 -
0.19.012 May 2020Release notes
Open source →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>
-
0.18.104 Mar 2020Release notes
Open source → -
0.18.004 Mar 2020Release notes
Open source →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
Breaking changes
- The
lexerfeature is now necessary whenlalrpopgenerates the lexer.
<a name="0.17.2"></a>
-
0.17.221 Aug 2019Nothing published for this version
-
0.17.124 Jun 2019Nothing published for this version
-
0.17.007 May 2019Nothing published for this version
-
0.16.320 Jan 2019Release notes
Open source →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)
-
0.16.228 Nov 2018Nothing published for this version
-
0.16.127 Oct 2018Nothing published for this version
-
0.16.003 Sep 2018Nothing published for this version
-
0.15.203 May 2018Nothing published for this version
-
0.15.105 Apr 2018Nothing published for this version
-
0.15.022 Mar 2018Nothing published for this version
-
0.14.024 Jan 2018Nothing published for this version
-
0.13.116 Jun 2017Nothing published for this version
-
0.13.007 Apr 2017Nothing published for this version
-
0.12.511 Feb 2017Nothing published for this version
-
0.12.429 Nov 2016Nothing published for this version
-
0.12.328 Nov 2016Nothing published for this version
-
0.12.223 Nov 2016Nothing published for this version
-
0.12.129 Sep 2016Nothing published for this version
-
0.12.005 Aug 2016Nothing published for this version
-
0.11.025 Feb 2016Nothing published for this version
-
0.10.019 Feb 2016Nothing published for this version
-
0.9.023 Jan 2016Nothing published for this version
-
0.8.006 Nov 2015Nothing published for this version
-
0.7.015 Oct 2015Nothing published for this version
-
0.6.115 Sep 2015Nothing published for this version
-
0.6.015 Sep 2015Nothing published for this version
-
0.5.011 Sep 2015Nothing published for this version
-
0.4.116 Aug 2015Nothing published for this version
-
0.4.016 Aug 2015Nothing published for this version
-
0.3.016 Aug 2015Nothing published for this version
-
0.2.027 Jul 2015Nothing published for this version
-
0.1.026 Jul 2015Nothing published for this version