Skip to content

Latest commit

 

History

History
617 lines (406 loc) · 19.5 KB

RELEASES.md

File metadata and controls

617 lines (406 loc) · 19.5 KB

0.20.2 (2024-02-**)

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.

0.20.1 (2024-02-**)

Yanked

0.20.0 (2023-05-02)

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"

0.19.12 (2023-04-28)

  • 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.

0.19.11 (2023-04-28)

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!)

0.19.10 (2023-04-24)

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

0.19.9 (2023-03-25)

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!)

0.19.8 (2022-05-05)

Features

0.19.7 (2022-01-20)

0.19.6 (2021-06-08)

0.19.5 (2021-03-03)

  • Fix inlining of fallible productions
  • Update dependencies

0.19.4 (2021-01-08)

0.19.4 (2021-01-08)

0.19.2 (2020-12-25)

  • Allow string literals in patterns #557
  • Enable precedence annotations #555
  • Shake dependency tree #559

0.19.1 (2020-09-04)

  • Reduce work for LLVMs inliner

0.19.0 (2020-05-11)

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)

0.18.1 (2020-03-04)

Bug Fixes

  • Remove eprintln which I thought were removed (a9a775eb)

0.18.0 (2020-03-04)

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.

(2019-08-21)

Features

  • Add support for allowing for mutable x in action code.

(2019-06-24)

Bug Fixes

0.17.0 (2019-05-06)

Fixes

  • The minimum Rust version has been updated to 1.32.0 to fix deprecations

Features

  • Split apart UnrecognizedEOF variant from UnrecognizedToken (#446)

Style

  • Formatting and clippy warnings have been fixed

Thanks to the following contributors:

  • @ra-kete
  • @Eijebong
  • @rofrol
  • @mikeyhew
  • @jwinnie
  • @jespersm
  • @nwtwnni
  • @Songbird0

0.16.3 (2019-01-20)

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)

Version 0.16.2 (2018-11-22)

Fixes

  • Fix type annotation for inline actions

Thanks to the following contributors:

  • @tjade273

Version 0.16.1 (2018-10-27)

Features

  • Add a setting to strip indentation from the generated grammar (9f3a978f)
  • Allow setting features from the commandline (c8df4987)
  • Don't depend on lalrpop-snap to compile lalrpop (3ff1b4c4)
  • Allow setting out_dir on the command line (9c26e517)
  • Let parse rules be conditionally compiled (e6b6a07f)

Fixes

  • Process escape sequences in string literals appearing as terminals (0b7e1e1d)

Thanks to the following contributors:

  • @Marwes
  • @jimblandy

Version 0.16.0

Features:

  • Allow attributes to be specified in larlpop_mod! (#398)

Fixes:

  • Don't generate reduce actions which do not fit in the integer size (#399)
  • Generate files in OUT_DIR (#353)

Dependencies:

  • Update atty (0.2), bit-set (0.5), ena(0.9) (#374)
  • Regex to 1.0 (#375)

Thanks to the following contributors:

  • @Marwes
  • @KRITZCREEK
  • @asyosec
  • snsmac
  • Eijebong
  • @sanxiyn

Version 0.15.2

Features:

  • Make semicolon after } in rules optional (#355)

Fixes:

  • Use hash to decide whether to recompile (#369)
  • Reduce the compile times of generated parse table parsers (#366)

Thanks to the following contributors for this release:

  • @matklad
  • @psl8
  • @Marwes

Version 0.15.1

Fixes:

  • Don't overflow the stack in parse table debug builds (#337)
  • Use the correct type for ! in macro expanded productions (#335)
  • Allow lalrpop parsers to be used with include! (#338)
  • Remove dependency on docopt, rustc-serialize, update itertools (#344, #345)
  • Correctly anchor regex at the beginning (#358)

Thanks to the following contributors for this release:

  • @Marwes
  • @mbrubek
  • @waywardmonkeys
  • @sanxiyn
  • @17cupsofcoffee
  • @matklad

Version 0.15

Features:

  • The source and binary size of generated parsers has been reduced (#324, #306)
  • Regex compilation as part of the generated lexer can now be cached (#318)
  • The documentation is now provided as a mbbook (#298)

Bugs fixed:

  • Fixed a stack overflow in debug builds of large grammars (#337)
  • The error terminal now gets the correct type assigned when part of macros (#335)
  • Character literals now parse correctly in the parser files (#320)

Compatibility notes:

  • To let regex compilation be cached, each parser are now generated as a struct with a parse method instead of just a function. To upgrade, change each parse call from parse_X(..) to XParser::new().parse(..).

Thanks to the following contributors for this release:

  • @Phlosioneer
  • @waywardmonkeys
  • @brendanzab
  • @dtkerr
  • @Marwes
  • @ahmedcharles
  • @udoprog

Version 0.14

Bugs fixed:

  • Infinite loop in error recovery fixed (#240).
  • Bad error messages if a ; was forgotten fixed (#276).
  • Grammar errors were sometimes incorrectly reported as "extra tokens" (#278)
  • extern blocks now allowed even when not using a custom tokenizer (#261)
  • ParseError now implements Display
  • actions can now return a grammar's type parameter's associated type (#247)
  • generated files are now rebuilt when there is a new LALRPOP version (#243)

Compatibility notes:

  • As part of making ParseError implement Display, the default error type changed from () to &'static str, so parse errors type may change from lalrpop_util::ParseError<..., ()> to lalrpop_util::ParseError<..., &'static str>.

Thanks to the following contributors for this release:

  • @fitzgen
  • @joerivanruth
  • @pyfisch
  • @nick70
  • @notriddle
  • @vmx

Version 0.13.1

  • We now support #![..] attributes in .lalrpop files.
  • We now use lane table by default: since the lane table algorithm automatically generates compressed tables where possible, the #[LALR] attribute is still accepted, but has no effect.
    • If you encounter problems, please report bugs! In the meantime, though, you can use the LALRPOP_LANE_TABLE=disabled environment variable to change back.
  • When the <> string is found within {} inside of an action, it now generates a series of x: x pairs for each named value x. This is useful for struct constants, since you can do something like: <a:Foo> <b:Bar> => MyStruct { <> }, if MyStruct had two fields named a and b.
  • We now support character literal patterns in the external tokenizer pattern syntax.
  • The lalrpop executable now supports --version.
  • We are (for now, at least) testing for compatibility with Rust 1.13. This minimal supported rustc version may change in the future, however.
  • Misc bug fixes.

Thanks to the following contributors for this release:

  • @jchlapinski
  • @minijackson
  • @nikomatsakis
  • @ravenexp
  • @ruuda
  • @wieczyk
  • @withoutboats

Version 0.13

This is a bug release for LALRPOP. First, we have two major improvements to the generated lexer:

  • The lexer now generates code that uses the regex crate. This results in far less code than the older style, and seems to preserve performance.
  • The lexer now supports custom priorities for regular expression tokens, making it possible to support case-insensitive keywords.

Second, we have a beta release of the new lane-table based LR-table generation. Lane tables handle the full set of LR(1) grammars but typically reduce much smaller state tables. This feature eliminates the need to manually mark grammars as #[LALR]. Lane tables are not on by default; you can enable them by setting LALRPOP_LANE_TABLE=enabled in your environment (use std::env::set_var in your build.rs).

Finally, the lalrpop executable now has the ability to generate standalone reports (--report).

Fixed bugs:

  • Fix #157: We now recognize single quote (') properly in our tokenizer.
  • Fix #179: Fix bug in recursive ascent code generation.

Thanks to the following contributors to this release:

  • @ahmedcharles
  • @king6cong
  • @nikomatsakis
  • @nixpulvis
  • @wagenet
  • @wieczyk

Version 0.12.5

Version 0.12.4

Major new feature! @Marwes added support for error recovery.

There have also been a number of other improvements:

Versions 0.12.2, 0.12.3

(Yanked due to minor backwards incompatibility.)

Version 0.12.1

Bug fix release. Major bugs addressed:

Also, there is now a tutorial for writing custom lexers. Thanks @malleusinferni!.

Version 0.12

Enabled a new table-driven code-generator by default. This generates less code than the older recursive-ascent-based generation scheme, but may parse less efficiently. To go back to the old scheme, annotate the grammar declaration:

#[recursive_ascent] grammar;

Also, the syntax for requesting LALR-generation has changed to use an annotation:

#[LALR] grammar;

We no longer emit module-level attributes, which means that unused imports in your .lalrpop file may start getting warnings. Thanks @dflemstr!

An overflow bug in LALRPOP was fixed. Thanks @larsluthman!

We no longer depend on time, but now use std::time. Thanks @serprex!

There is now a Configuration object for use in your build.rs scripts. And, thanks to @dflemstr!, it permits you to configure the directory where LALRPOP output is generated.

Fixed a bug in the LALRPOP option parsing. Thanks @Nemikolh!

Various typos and small corrections. Thanks @reuben and @ashleygwilliams!

Version 0.11

Updated to use the regex-syntax crate for regular expression parsing instead of rolling our own parser. This means we can now support the same regular expression syntax as the regex crate, and in particular can support unicode character classes like \p{Greek}. Note that some regex features -- such as non-greedy repetition and named capture groups -- are still not supported (or just not meaningful).

Optimized LR(1) construction time by approximately 5x.

Improved handling of location tokens @L and @R so that they can be freely used without ever causing parse conflicts.

Version 0.10

Major update to LALRPOP error messages in cases of shift/reduce and reduce/reduce conflicts. The messages now try to explain the problem in terms of your grammar, as well as diagnosing common problem scenarios and suggesting solutions.

Added a standalone LALRPOP executable.

We no longer generate incomplete files when grammar generation fails (Issue #57).

Version 0.9

Miscellaneous bug fixes, mostly. Processing for a build.rs file now starts from the project directory, rather than being hardcoded to start from src.

Version 0.8

Add support for inlining nonterminals. Nonterminals can now be annotated with #[inline]. If you do so, each use of the nonterminal will be inlined into its place. This can be very helpful in addressing shift-reduce or reduce-reduce conflicts, at the cost of a larger grammar. We now inline Foo*, Foo?, and (Foo Bar) nonterminals by default.

Version 0.7

This is mostly a bug-fix release.

Various minor issues were addressed:

  • Issue #25: Unbalanced parens in string literals appearing in code now work properly.
  • Issue #32: Regular expression parsing consumed infinite memory when a . appeared.
  • Issue #34: Automatic tokenizer generation did not play well with generic type parameters.

Older versions

I hadn't yet started writing release notes, sorry.