anchor.diff:  
   alternative
   	: 
  -		( predicate )* 	debug_term 	( predicate )* 
  -		( INTO ( production )* debug_term ( production )* )?
  +		( predicate )* 	debug_term[True] ( predicate )* 
  +		( INTO ( production )* debug_term[False] ( production )* )?
   		{ ## = #(#[ALTERNATIVE,"ALTERNATIVE"], ##) }
   	;
   
  
positive.code: 	;
  
  // TODO: support variable assignments
  term
  	: INT^
  	| REAL^
  	| STR^
  	| LSQUARE! term_list RSQUARE!
  		{ ## = #(#[LIST,"LIST"], ##) }
  	| term_args
  		{ ## = #(#[APPL,"APPL"], #[CONS,""], ##) }
  	| CONS ( (LPAREN) => term_args | term_nil_list)
  		{ ## = #(#[APPL,"APPL"], ##) }
  	| VAR term_args
  		{ ## = #(#[APPL,"APPL"], ##) }
  	| WILDCARD term_args
  		{ ## = #(#[APPL,"APPL"], ##) }
  	| VAR^ term_implicit_wildcard
  	| WILDCARD^
  	| VAR ( TRANSF^ | TRANSF_MAP^) transf_args
  	| term_implicit_wildcard ( TRANSF^ | TRANSF_MAP^) transf_args
  	;
  
  term_implicit_wildcard
  
negative.code: 		{ ret = "_f.parse(%r)" % #s.getText() }
  	| c:CONS 
  		{ ret = "_f.makeStr(%r)" % #c.getText() }
  	| v:VAR
  //		{ ret = "_f.makeVar(%r,_f.makeWildcard())" % #v.getText() }
  		{ ret = "_k[%r]" % #v.getText() }
  	| w:WILDCARD 
  //		{ ret = "_f.makeWildcard()" }
  