Skip to content

Latest commit

 

History

History
161 lines (111 loc) · 5.76 KB

RELEASES.md

File metadata and controls

161 lines (111 loc) · 5.76 KB

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.