Be notified of new releases
Create your free GitHub account today to subscribe to this repository for new releases and build software alongside 50 million developers.Sign up
- License modified to revised BSD
The license agreement for this library has been changed to revised BSD license. This change was made to avoid any confusion related to usage in commercial (closed source) applications.
- Fixed minor API issues for reusing parsers
The Parser.reset method is now available in a new flavor that allows replacing the Analyzer being used. Also the Tokenizer now disposes the input buffer and references to parsed tokens already when the end of file is encountered.
- License modified to GNU LGPL version 3
The license agreement for this library has been changed to GNU LGPL,
version 3. This change was made for compatibility reasons and most
users will remain unaffected.
- Added Visual Basic.NET code generation
A Visual Basic.NET source code generator has been contributed by
Adrian Moore. It uses the same run-time library (DLL) as the C# .NET
- Added support for case-insensitive parsing
CASESENSITIVEgrammar declaration has been added to make it
possible to parse in case-insensitive mode. By default all parsing is
case-sensitive. Thanks to Adrian Moore for providing a partial implementation.
- Added support for reusing parsers and tokenizers
A reset() method has been added to both the Parser and the Tokenizer
classes, allowing to reuse a parser with a new input stream. By reusing a
single parser and tokenizer for various input files speed and memory
gains can be made, especially for complex grammars.
- Added factory methods for creating various objects
New factory methods for creating tokens, productions, tokenizers and
analyzers have been added. These can be overridden in subclasses to
provide more specific classes if desired.
- Improved the tokenizer processing speed
The tokenizer speed has been improved by using a custom DFA
implementation for regular expressions. The tokenization phase now
runs some 20-30% faster in the general case.
Bug #3603 &
- Changed to use native Java regular expressions
Since the built-in regular expression library is not used as frequently
after the implementation of DFA regular expression handling, the native
Java regular expression classes are now used. This implies improved
support for advanced regular expression syntax (at a performance
Bug #3597 &
- Changed .NET parser namespace for C# 2.0
The C# parser namespace has been modified from
PerCederberg.Grammatica.Runtimedue to the new C# 2.0 compiler strictness.
- Changed .NET parser API for better integration
The .NET parser API has been modified for almost all classes, introducing
properties and indices instead of getter and setter methods. The old methods
have been deprecated, but are still available to avoid breaking existing applications.
- Changed built-in regular expression API subtly
Due to fixes required to be able to reuse tokenizers, the built-in regular
expression class API had to be changed subtly. In essence, all the methods
can now throw IOException which breaks a Java compile.
- Fixed possible divide by zero in profiling
When profiling grammars with small input files, the time measured could
previously be zero (0). This caused a division by zero exception when
calculating the number of tokens parsed per second.
- Fixed parse error on some grammar comments
Grammar comments ending with
**/previously caused a parse error.
The comment token regular expression has now been corrected to fix this.
- Fixed premature EOF reported in some cases
The tokenizer previously assumed EOF had been encountered when a full
look-ahead buffer couldn't be read. Thanks to Jeremy M Stone for finding this.
- Fixed token match priority to use the grammar order
String tokens were previously always checked and considered first, unless a
regular expression token matched more characters. This has now been
changed to depend on the grammar file ordering instead.
- Added Apache Ant task
An Apache Ant task has been added to the distribution. See the reference
manual for details on how to use it.
- Added support for retrieving all tokens
The Tokenizer class now supports enabling a useTokenList feature, that will
link all tokens in a double-linked list. This can be used to access whitespace
and comment tokens, although otherwise ignored by the parser. By default
this feature is off, to avoid potetial garbage collection problems when parsing large files.
- Removed API documentation for unsupported API
Java API documentation for the unsupported API:s in Grammatica is no longer
created or distributed.
- Corrected a null pointer error in
--profilea null pointer exception was thrown during the parsing
of the file. This was due to the analyzer being set to null, something that has
now been made impossible.
- Added C# API documentation
C# API documentation has now been added to the release documentation. The build
file uses CppDoc to generate the HTML documents.
- Added source code examples to documentation
Some examples of Java source code for creating a parser has been added to the
- Improved and clarified the Analyzer API
The Analyzer class API has been clarified by improving the generated comments slightly
and by adding a getChildValues() method.
- Corrected generation of C# analyzer classes
The generation of C# analyzer classes was completely broken in all previous releases,
due to missing keywords and erroneous casing of method names. Tests have now been
added to verify the generated analyzers. This was only an issue in the C# code generation,
as the Java version has been tested continuously.
Bug #4416 &
- Added profiling for grammars
A new action
--profilehas been added that prints out the statistics from a profiling run of the grammar. This is useful for improving the grammar and parsing speed. Bug #3936
- Improved tokenizer performance
The tokenizer performance has been much improved for string tokens. The tokenization speed is now about twice as fast (on average), meaning that the tokenizer will use half as much time for most input and grammars. Bug #3603
- Improved the parse tree output on error
The parse tree was previously only printed when a file could be parsed correctly. Now the parse tree is printed until the first syntax error is found. Bug #3930
- Improved error message for missing
When missing the final
%character in the grammar file, the error message printed was not logical. This has been improved by printing an 'unterminated directive' error instead. Bug #3931
- Improved the reference manual
The reference manual has been improved to the point where it is considered finished. There is still room for much improvement, however, and such fixes will added in later versions. Bug #3598
- Corrected unexpected token error messages
In some circumstances the unexpected token error messages didn't list all possible tokens. This only ocurred for productions containing alternatives with ambiguities that were resolved with one alternative being set as the default. This has now been corrected, which should also improve the error recovery in these cases. Bug #3929
License: GNU GPL License (with linking exception)