anchor.diff:  	;
   
   
  -CURLY_CHUNK
  -	:
  -	'{' ( CURLY_CHUNK | NO_CURLY )* '}'
  -	;
  -
   LEFT_PAREN
           :	'('
           ;
  
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:                 }
  	;
  
  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;
  