This document contains details of the various releases and their release dates. Dates are in the format yyyy-mm-dd.

2.1.1 - 2015-03-22

This release adds Windows support for ruby-ll by tweaking the compilation process of the native extensions. Tests are run on AppVeyor ( to ensure they always pass.

2.1.0 - 2015-03-20

Question/Optional Operator Support

Support was added for the ? operator. This operator can be used to indicate a certain rule/terminal is optional.

Bugfix when parsing parenthesis with an operator

This release fixes a bug in the parser that would occur when parsing input such as the following:

A = B (C D)? E;

This would previously throw a syntax error.

2.0.0 - 2015-03-18

This release contains some changes that are not backwards compatible, hence the major version increase.

Operator Support

Grammars can now use two new operators: * and +. The star operator (*) defines that a set of terminals/rules can occur 0 or more times while the plus operator (+) indicates that something occurs 1 or more times. These operators don’t rely on recursion and thus are left-associative.

Branch Action Optimization

Branches containing only a single step without any custom actions now only return the first step’s value instead of an Array containing the value. In other words, previously ruby-ll would generate an action returning val whereas now it returns val[0]. This can break existing grammars, hence the major version bump.

As an example:

A = B;

Previously A would essentially be set to [B] whereas now it’s just set to B. This means you no longer have to do this:

A = B { val[0] };

CAPI Cleanups

Some of the C code used for the driver has been cleaned up to use correct CAPI datatypes.

1.1.3 - 2015-02-17

The function ll_driver_config_mark() has been removed from the C extension as it would occasionally trigger a segmentation fault. See commit 667339611d05fa58b60db58a7135156456dbd504 for more information.

1.1.2 - 2015-02-16

The file ll/setup now also loads LL::ConfigurationCompiler to ensure that the TYPES array (and thus LL::Driver#id_to_type) can be used outside of ruby-ll itself.

1.1.1 - 2015-02-16

Parser errors produced by ruby-ll’s own parser/grammar now include the line number/column number whenever possible.

1.1.0 - 2015-02-16

This release changes the way error handling is done. Instead of having multiple, separate error callbacks there’s now only one error callback: LL::Driver#parser_error. See commit 22b6081e37509d10e3b31d6593b0a7f2e5fd7839 for more information.

While this change technically breaks backwards compatibility I do not consider the old error handling system part of the public API, mainly due to it being extremely painful to use.

1.0.0 - 2015-02-13

The first public release of ruby-ll!