Grammars can no longer have lookahead conflicts. Instead, possible reductions are automatically prioritized according to the order in which they were added to the grammar. The design is much more streamlined in that every type of sub grammar can have a node factory. Each Grammar now provides the operators star(), plus(), and opt() to make incremental grammar building easier. A means to write grammars in a BNF like fashion instead of using the GrammarBuilder was added. A simple lexer is provided for non-performance-critical uses.
A slight change in the architecture allowed the removal of one generic parameter while maintaining the overall generality of the approach. The benefit is that using the package is much easier. Furthermore, the recursive decent of the parser was conceptually different before for a choice and a sequence element, resulting in a hidden bug. By improving the conceptual integrity of how the recursive steps are performed, the bug could be fixed. In addition, the code is much more readable now.
While the interface has nearly no changes, the package underwent major refactoring. In particular, an example package was extracted from the tests to serve as a hint of how the parser can be used. The documentation was extended.