anchor.diff:  	|	forStatement
   	;
   
  -topExpr
  +exprList
   	:	expr ( ',' expr)* ','?
  -	|	'(' topExpr ')'
   	;
   
   expr
  -	:	expr '->' expr											#composeExpr
  +	:	'(' exprList ')'											#groupExpr
  +	|	expr '->' expr											#composeExpr
   	|	expr '(' expr? ')'										#executeExpr
   	|	expr '<' expr '>'										#argExpr
   	|	sign=( PLUS | MINUS ) expr						#unarySignExpr
  
positive.code: 	|	expr op=( LTEQ | GTEQ | LT | GT ) expr	#relationExpr
  	|	expr AND expr											#andExpr
  	|	expr OR expr											#orExpr
  	|	nameRef '=' expr										#nameAssignExpr
  	|	expr ':' expr												#assignExpr
  	|	'(' expr ')'													#groupExpr
  	|	atom														#atomExpr
  	;
  
  
negative.code: *	names
  */
  
  nameExpression
  	:	nameRef
  	|	'&' nameRef
  	|	'&&' nameRef
  	;
  
  nameRef
  	:	Name trailer*
  	;
  
  trailer
  	:	'[' expr ']'
  	|	'.' PlainName
  	;
  
  Name
  	:	PlainName
  	|	SpecialName
  	;
  
  PlainName : NameHead NameChar*	;
  fragment NameHead : [_a-zA-Z] ;
  fragment NameChar : [0-9] | NameHead ;
  
  