LLK 0.7.0

Release notes

LLK Changes

This release contains mostly updates to llk-csharp-model for resolving references. While the csharp resolver starts being usable/useful, be warned that it is still in very early stage, lots of code are quite sloppy and lots features are not yet completed.

Also added sample grammar for EMCA262 (aka Javascript) which also comes with a code formatter.


  • CHANGE - Moved documentation from llk/doc/release/ directory to llk-doc/doc/llk/ in the new llk-doc project.


  • CHANGE - Grammar option VisitorException now require a fully qualified exception class name (eg "sf.llk.share.support.LLKParseException") so that an import statement is automatically generated in the generated visitor and visitor adapter output.
  • CHANGE - Treeparser rule is now allowed to has no child. The empty rule can, however,implements init and return action for side effects.


  • NEW - LLK now accept a special form for the shared path to specify a package instead of a file path. The special form specify a package with a trailing '.' eg. sf.llk.share.support. to specify that LLK should search for classes in the specified package through the ClassLoader instead of searching for source files the file system. This allow support files in llk-share.jar to be searched and prevent them from being generated. The special form can be used together with the normal file system paths (eg. sf.llk.share.support.;/workspace/project/src/a/b/c).
  • CHANGE - LLK --spath command line option now use File.pathSeparator instead of ':' as separator.
  • CHANGE - LLK now do not generate node file if it is found on shared paths.
  • CHANGE - LLK now generate separate class for charset only if the charset has more than 256 bits. This should reduce the disk footprint a little bit.

Support Projects Changes


  • CHANGE - ILLKNode no longer extends List<ILLKNode>, use ILLKNode.children() to iterate over its children instead.
  • CHANGE - Renamed ILLKNode.size() to ILLKNode.childCount().
  • CHANGE - Added ILLKMain.putOpt(String name, Object value).
  • NEW - Added ILLKParseException. Both LLKParseException and LLKParseError now implements ILLKParseException.
  • FIXED - SimpleLLKMain now report error location for LLKParseError.


  • FIXED - Typo that FormatBuilder.isOnelineOK() should be isOnelinerOK().


  • CHANGE - There has been considerable changes in this project due to llk-csharp-model changes.



Sample Grammar Changes



  • NEW - There has been lots of refactoring and update to the CSharp resolver and related code in the related projects. It now resolve method references properly, most of the time.
  • NEW - Added format options to add space before parameters and arguments.
  • NEW - Added format options for whether to break before open brace in accessors, property and indexer delarations.
  • CHANGE - Method signature now get a space before '('.
  • CHANGE - The format option defaults are changed.
  • CHANGE - Now use '+' instead of '/' as inner type signature separator.
  • CHANGE - Index database schema is changed.
  • FIXED - Problem with formatting of indexer declaration.
  • FIXED - Updated unicode character set for IdentifierStart, IdentifierPart and SPACES in CSharpLexer according to C# 2.0 spec..
  • FIXED - Ambiguity resolution between type arguments and relational operation as described in C# 2.0 spec. 9.2.3.
  • FIXED - Ambigurity resolution between CastExpression and ParenthesizedExpression.
  • FIXED - CSharpLexer now allow unicode escaped sequences as IdentifierStart and IdentifierPart according to C# 2.0 spec.
  • FIXED - CSharp formatter to allow for spaces between '#' and preprocessor directives.
  • TODO - Many less used features, eg. partial types, attributes, delegate overload resolution, visibility resolution, user defined conversions, operator overloading, type inference ... etc., just to name a few, are not yet properly handled in the resolver.


  • FIXED - Formatting of assertStatement, forStatements, variableDeclarators, typeParameters, ... etc.



  • CSSParser now generate nodes.





  • NEW - Added ECMA262 (aka. Javascript) grammar which also comes with a code formatter.


Requirements to run LLK

See v0.6.1 release notes for details.

Requirement to run generated parsers

Same as requirement to run LLK above.

Requirement to compile LLK

See v0.6.1 release notes for details.

Running the binary

See v0.6.1 release notes for details.

Compiling the source

See v0.6.1 release notes for details.

Status and plans