anchor.diff:  		( ('e'|'E') ('-'|'+')? ('0'..'9')+ { $setType(REAL); } )?
   	;
   
  -STR	: '"'! (STRCHAR)* '"'!;
  +STR
  +	: '"'! (STRCHAR)* '"'!
  +	;
   
   protected
  -STRCHAR: ESCCHAR
  +STRCHAR
  +	: ESCCHAR
   	| ~('"'|'\\')
   	;
   
   protected
  -ESCCHAR	: '\\'!
  +ESCCHAR
  +	:
  +		'\\'!
   		( 'n' { $setText("\n"); }
   		| 'r' { $setText("\r"); }
   		| 't' { $setText("\t"); }
  
positive.code: 		)
  	;
  
  CONS: ('A'..'Z') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')* ;
  VAR: ('a'..'z') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')* ;
  WILDCARD: '_';
  
  COMMA	: ',';
  
  LPAREN	: '(';
  RPAREN	: ')';
  LSQUARE	: '[';
  RSQUARE	: ']';
  LCURLY	: '{';
  RCURLY	: '}';
  
  STAR	: '*';
  
  class atermParser extends Parser;
  
  
negative.code: 	;
  	
  aterms_rest returns [res]
  	:
  		head=aterm
  		(
  			{ res = self.factory.makeConsList(head) }
  		| COMMA tail=aterms_rest
  			{ res = self.factory.makeConsList(head, tail) }
  		)
  	|
  		STAR
  		( ( WILDCARD )?
  			{ res = self.factory.makeWildcard() }
  		| vname:VAR
  