anchor.diff:                  }
   	;
   
  +curly_chunk returns [String text]
  +        @init {
  +           StringBuffer buf = null;
  +           Integer channel = null;
  +        }
  +	:
  +		loc=LEFT_CURLY 
  +		{
  +	            channel = ((SwitchingCommonTokenStream)input).getTokenTypeChannel( WS ); 
  +		    ((SwitchingCommonTokenStream)input).setTokenTypeChannel( WS, Token.DEFAULT_CHANNEL );
  +		    buf = new StringBuffer();
  +		    
  +		    buf.append( loc.getText() );
  +		} 
  +		( 
  +			~(LEFT_CURLY|RIGHT_CURLY)
  +			  {
  +			    buf.append( input.LT(-1).getText() );
  +			  }
  +			|
  +			chunk=curly_chunk
  +			  {
  +			    buf.append( chunk );
  +			  }
  +		)*
  +		{
  +		    if( channel != null ) {
  +			    ((SwitchingCommonTokenStream)input).setTokenTypeChannel(WS, channel.intValue());
  +		    } else {
  +			    ((SwitchingCommonTokenStream)input).setTokenTypeChannel(WS, Token.HIDDEN_CHANNEL);
  +		    }
  +		}
  +                loc=RIGHT_CURLY
  +                {
  +                    buf.append( loc.getText() );
  +		    text = buf.toString();
  +                }
  +	;
  +
   square_chunk returns [String text]
           @init {
              StringBuffer buf = null;
  
positive.code: 				)*
  			)?
  		')'
  		body=CURLY_CHUNK
  		{
  			//strip out '{','}'
  			String bodys = body.getText();
  			bodys = bodys.substring(1,bodys.length()-1);
  			f.setText( bodys );
  
  			packageDescr.addFunction( f );
  		}
  
negative.code: 	;
  
  
  LEFT_PAREN
          :	'('
          ;
  