anchor.diff:  {
   package net.sf.lua4j;
   }
  +@lexer::members
  +{
  +protected boolean isLongBracketOpen(int length)
  +{
  +	if (input.LA(1) != ']') return true;
  +
  +	for (int i = 0; i != length; ++i)
  +	{
  +		if (input.LA(i + 2) != '=') return true;
  +	}
  +
  +	return (input.LA(length + 2) != ']');
  +}
  +
  +protected void matchLongBracketClose(int length) throws MismatchedTokenException
  +{
  +	StringBuilder builder = new StringBuilder();
  +
  +	builder.append(']');
  +	for (int i = 0; i != length; ++i) builder.append('=');
  +	builder.append(']');
  +
  +	match(builder.toString());
  +}
  +}
   
   chunk
       : (stat ';'?)* (laststat ';'?)?
  
positive.code: fragment
  HEX_DIGIT : ('0'..'9'|'a'..'f'|'A'..'F') ;
  
  
negative.code:    ;
  
  LONG_STRING
  	: LONG_BRACKET
      ;
  
  fragment
  ESCAPE_SEQUENCE
  