Skip to content

Releases: ehwan/RustyLR

v3.34.0

04 Oct 06:37
Compare
Choose a tag to compare

What's Changed

  • Add --state option for state machine inspection in #34
  • Add state field to ParseError in #35
  • Use ArrayVec for multiple reduce rules container in #36
  • Add more test cases in #37
  • Optimization for unused data in #38 #39 #40 #41
  • Use static memory for parser table generation in #42

Full Changelog: v3.32.0...v3.34.0

v3.32.0

13 Sep 13:50
Compare
Choose a tag to compare

What's Changed

  • fixed can_feed() logic in #28
  • fixed expected() logic in #29
  • run code generation for sample projects in #30
  • check if custom reduce action can be identity in #31
  • Single rule optimization can be applied with custom reduce action in #32

Full Changelog: v3.31.0...v3.32.0

v3.31.0

23 Aug 04:10
Compare
Choose a tag to compare

What's Changed

  • fixed number of tags mismatch in split_off in #24
  • fixed eof was not popped on pop_start() in #25
  • Removed %runtime directive in #26
  • Optimized out unused states and production rules, reduces runtime by 30% in #27

Full Changelog: v3.30.0...v3.31.0

v3.30.0

15 Aug 01:48
Compare
Choose a tag to compare

What's Changed

  • add IntermediateState for lightweight state generation in #22
  • use truncate() instead of pop() for unused and shadowed variables in #23
  • optimize counting logic in DataStack::split_off

Full Changelog: v3.29.0...v3.30.0

v3.29.0

09 Aug 09:06
Compare
Choose a tag to compare

What's Changed

  • fix command line arguments for note diagnostics in #19
  • split location stack for reduce action, optimizing the stack management in #20
  • replacing the enum-based TokenData approach with separate Vec stacks for each rule type by #21

Full Changelog: v3.28.0...v3.29.0

v3.28.0

27 Jul 12:34
Compare
Choose a tag to compare

What's Changed

  • use compact integer types instead of usize to reduce memory usage and binary size in #18
  • fixed some memory was not freed in non-deterministic parser

Full Changelog: v3.27.0-1...v3.28.0

v3.27.0-1

25 Jul 11:21
Compare
Choose a tag to compare

What's Changed

  • optimized non-deterministic parser and increase performance by 10 times in #17

Full Changelog: v3.27.0...v3.27.0-1

v3.27.0

21 Jul 03:32
Compare
Choose a tag to compare

What's Changed

  • remove explicit eof token feed in #15
  • Optimize dense state fields in #16
  • support OR separator in paren syntax ( a b | c | )

Full Changelog: v3.25.0...v3.27.0

v3.25.0

15 Jul 06:55
Compare
Choose a tag to compare

What's Changed

  • change error token logic; refactored the parser to treat the error token as a terminal symbol in #13
  • add function call and $sep syntax in #14
    $sep( P, P_separator, *|+ ): A repetition of P separated by P_separator. The repetition can be *, or + to indicate zero or more, or one or more repetitions respectively

Full Changelog: v3.24.0...v3.25.0

v3.24.0

13 Jul 02:20
Compare
Choose a tag to compare

What's Changed

  • add error-recovery to grammar parser
  • Runtime operator precedence conflict resolution in #12
    Example:
%left '+';
%left '*';

E: E op=BinOp E %prec op { ... }
 | ...
 ;

// The precedence of `BinOp` is determined by the production rule that `BinOp` was derived from.
BinOp: '+'
     | '*'
     ;

In this example, the E: E op=BinOp E rule's precedence is determined by the BinOp non-terminal.
When the parser needs to resolve a conflict involving this rule, it will look at what BinOp was reduced from.
If BinOp was reduced from +, the precedence of BinOp will be the precedence of +, which is defined by %left '+'.
otherwise, if BinOp was reduced from *, the precedence of BinOp will be the precedence of *, which is defined by %left '*'.

If any non-terminal symbol was referenced in the %prec directive,
every production rule in that non-terminal must have operator precedence.

Full Changelog: v3.22.0...v3.24.0