LLK 0.4.1

Release notes

LLK Changes

Grammar

  • NEW - Added alias rule for parser that accept a tokenSet on the right hand side. Such alias rule simply given a name to the tokenSet such that it can be referenced in user code easily.
  • NEW - Added predict only action %%{ predictOnlyAction(); } that is executed during syntactic predict only.
  • CHANGE - Tag name for token types in the generated token type xml file is renamed from TokenTypes to tokentypes, to be consistent with other tags.

Implementation

  • NEW - Add new option BuildVisitorAdapter to build an adapter for the generated visitor. It require BuildVisitor as pre-requisite.
  • NEW - Add ISourceLocator.setCharWidth(int offset, int width) for handling character with column width other than one column. This is used by getColumn() to derive the correct column number. This do not apply to the tab character, which is handled by tab() method instead.
  • CHANGE - LLKParseError is now derived from RuntimeException instead of Error so that it can be catched as Exception.
  • CHANGE - _EOF_ token now return an empty string instead of null on getText().
  • CHANGE - void ILLKNode.add(ILLKNode child, ILLKNode prev) now returns child instead of void:
        ILLKNode add(ILLKNode child, ILLKNode prev)
    
  • CHANGE - ILLKNode setLastToken(ILLKToken t) and ILLKToken getLastToken() is back. A parser can choose to use setOffset() and setEndOffset() and decouple from the token stream or use setFirstToken() and setLastToken() to link the nodes to the token stream.
  • CHANGE - TreeParser now call llkPush() and llkPop() methods instead of inline these code fragments :
        llkStack.push(LT1);
        LT1 = LT1.getNext();
    
    and
        LT1 = ((ILLKNode)llkStack.pop()).getNext();
    

Bugs

  • FIXED - Removed ILLKLexerInput.llkRewind(ILLKToken t). ILLKLexer.llkRewind(ILLKToken lt0) now rewind to start token that follow lt0 (lt1), instead of start of the first special token of lt1, to avoid scanner the specials (which may be conditional directives) again.
  • FIXED - IntList.pop(int n) that caused IndexOutOfBoundException incorrectly.
  • FIXED - LLKTreeParserGenerator.java language configuration file location.
  • FIXED - Suppressed unwanted checking in TreeParser when Validate options is off.
  • FIXED - LLTreeParserGenerator do not generate correct code for conditional expression other than (>n) format.

Sample Grammar Changes

llk-csharp

  • FIXED - Nullable type in conditional expression.
  • NEW - Added operators ?? and :: for csharp 2.0.
  • NEW - Added FixedSizeBufferDeclaration() for csharp 2.0.

Requirement to run

See release 0.4 for details. In addition, LLK v0.4.1 required blacksun-util.jar v0.7.1 from the black-sun project which is bundled in both the binary and source distribution.

Requirement to run generated parsers

See release 0.4 for details.

Requirement to compile

See release 0.4 for details.

Installation and Running

See release 0.4 for details.

Status and plans