anchor.diff:  
   
   rule
  -	:	'rule' word
  +	:
  +		'rule' ruleName=word 
  +		{ rule = new RuleDescr( packageName + "." + ruleName, null ); }
   		rule_options?
   		'when' ':'?
  -			lhs+
  +		{ AndDescr lhs = new AndDescr(); rule.setLhs( lhs ); }
  +			(l=lhs { rootLhs.addConfiguration( l ); } )*
   		'then' ':'?
  +		{ rule.setRhs( null ); }
   		'end' 
  -	;
  -	
  -rule_name
  -	:
  -		ID
   	;
   
   rule_options
  
positive.code: 	;
  	
  package_statement
  	:	'package' ID ( '.' ID )* ';'?	
  	;
  	
  import_statement
  
negative.code: 	:
  	;
  	
  lhs_or returns [PatternDescr d]
  	:	
  		{ OrDescr or = null; }
  		left=lhs_and {d = left; }
  		( 	('or'|'||') 
  			right=lhs_and 
  			{
  				if ( or == null ) {
  					or = new OrDescr();
  					or.addConfiguration( left );
  					d = or;
  				}
  				
  				or.addConfiguration( right );
  			}
  		)*
  	;
  	
  lhs_and returns [PatternDescr d]
  	:
  		{ AndDescr and = null; }
  		left=lhs_unary { d = left; }
  		(	('and'|'&&') 
  			right=lhs_unary 
  			{
  				if ( and == null ) {
  					and = new AndDescr();
  					and.addConfiguration( left );
  					d = and;
  				}
  				
  				and.addConfiguration( right );
  			}
  		)* 
  	;
  	
  lhs_unary returns [PatternDescr d]
  	:	(	u=lhs_exist
  		|	u=lhs_not
  		|	u=lhs_eval
  		|	u=lhs_column
  		|	'(' u=lhs ')'
  		) { d = u; }
  	;
  	
  lhs_exist returns [PatternDescr d]
  	:	'exists' column=lhs_column { d = new ExistsDescr( column ); }	
  	;
  	
  lhs_not	returns [NotDescr d]
  	:	'not' column=lhs_column { d = new NotDescr( column ); }
  	;
  
  lhs_eval returns [PatternDescr d]
  	:	'eval' { d = new EvalDescr( "" ); }
  	;
  	
  java_package_or_class
  