Release Notes: The -I option was added for specifying include directories. The "token uses" construct was fixed.
Release Notes: The uses statement can now reference undefined types. RHS element reference checking has been fixed. The un-translate code blocks are now properly balanced with the translate blocks. The graphviz output has been improved. const correctness warnings have been fixed. The distclean target has been fixed. There are other updates.
Release Notes: The -l option was added for turning off line directives in generated code. The class keyword was added. This indicates that a nonterminal or the token type is a C++ class, and should have its constructors and destructors called. The 'shortest' statement was added. This allows one to force a shortest match of a list of items. The semantics of commit was changed. It now forces a full commit rather than a scoped commit. Many other improvements were made.
Release Notes: The commit and final block execution code now uses malloc to allocate an array of pointers instead of using a variable-sized array on the stack, which is not portable C.
Release Notes: The Ragel style of generating code was adopted. In this style, the section of code to generate is explicitly named using a write statement. The access statement was added. The generated code was made compatible with C. Single-line parser specifications were added. The "token uses" statement was added. Line directive writing was fixed.
Release Notes: The sentinel at the top of the stack now needs to have its pointers initialized.
Release Notes: Line directives are now generated for inline code blocks which are passed through to the output file. Access to the production non-terminal element and the right-hand side elements is now supported in final actions. A priority mechanism for explicit control of conflicting actions was added. This is useful in select instances for overriding the "innermost" nature of ordered choice and obtaining an "outermost" strategy.
Release Notes: The program no longer generates a line of code which writes 'parse error' when parsing fails. This can be done by the caller of parseLangEl after looking at the return value. The scanner is now a class. It tracks the current line and guards against passing tokens to the parser if no parser name has been given.