anchor.diff:  	@init {
   		d=null;
   	}
  -	:	fact_binding
  -	|	fact
  +	:	f=fact_binding	{ d = f; }
  +	|	f=fact		{ d = f; }
   	;
    	
  -fact_binding returns [PatternDescr d]
  +fact_binding returns [ColumnDescr d]
   	@init {
   		d=null;
   	}
    	:
  - 		ID opt_eol ':' opt_eol f=fact { d=f; } opt_eol
  + 		id=ID opt_eol ':' opt_eol f=fact { d=f; } opt_eol
  + 		{
  + 			d=f;
  + 			d.setIdentifier( id.getText() );
  + 		}
    	;
    
  -fact returns [PatternDescr d] 
  +fact returns [ColumnDescr d] 
   	@init {
   		d=null;
   	}
  - 	:	ID opt_eol '(' opt_eol constraints? opt_eol ')' opt_eol
  + 	:	id=ID { d = new ColumnDescr( id.getText() ); } opt_eol 
  + 		'(' opt_eol (	c=constraints
  + 				{
  +		 			for ( Iterator cIter = c.iterator() ; cIter.hasNext() ; ) {
  + 						d.addDescr( (PatternDescr) cIter.next() );
  + 					}
  + 				}
  + 
  + 				)? opt_eol ')' opt_eol
    	;
    	
   	
  
positive.code: 	public String getPackageName() { return packageName; }
  	public List getImports() { return imports; }
  	public List getRules() { return rules; }
  }
  
  @lexer::header {
  
negative.code: 	package org.drools.lang;
  	import java.util.List;
  	import java.util.ArrayList;
  	import java.util.Iterator;
  	import org.drools.lang.descr.*;
  }
  
  @parser::members {
  	private PackageDescr packageDescr;
  	
  	public PackageDescr getPackageDescr() {
  		return packageDescr;
  	}
  /*
  	private String    packageName = "";
  	private List      rules       = new ArrayList();
  	private List      imports     = new ArrayList();
  