anchor.diff:  	;
   	
   package_statement
  -	:	'package' ID ( '.' ID )* ';'?	
  +	:	'package' id=ID { packageName = id.getText(); } ( '.' id=ID { packageName += "." + id.getText(); } )* ';'?	
   	;
   	
   import_statement
  
positive.code: grammar RuleParser;
  
  compilation_unit
  	:	prolog 
  
negative.code: 	;
  	
  	
  lhs returns [PatternDescr d]
  	: l=lhs_or { d = l; }
  	;
  
  	
  lhs_column returns [ColumnDesc d]
  	:	fact_binding
  	|	fact
  	;
   	
  fact_binding returns [PatternDescr d]
   	:
   		ID '=>' f=fact { d=f; }
   	;
   
  fact returns [PatternDescr d] 
   	:	ID '(' constraints? ')'
   	;
   	
  	
  constraints returns [List constraints]
  	:	c=constraint  { constraints = new ArrayList(); constraints.add( c ); }
  		( ',' c=constraint { constraints.add( c ); } )*
  	;
  	
  constraint returns [PatternDescr d]
  	:	f=ID	op=(	'=='
  			|	'>'
  			|	'>='
  			|	'<'
  			|	'<='
  			|	'!='
  			)	(	lc=literal_constraint { d = new LiteralDescr( f.getText(), null, lc ); }
  				|	rvc=retval_constraint { d = new ReturnValueDescr( f.getText(), null, rvc ); } )
  	;
  	
  literal_constraint returns [String text]
  	:	(	t=STRING
  		|	t=INT
  		|	t=FLOAT	
  		) { text = t.getText(); }
  	;
  	
  retval_constraint returns [String text]
  	:
  	;
  	
  