anchor.diff:  	cobolWord
   ;
   
  -
  -// identifier ----------------------------------
  -
  -identifier :
  -	qualifiedDataName
  -	| tableCall
  -	| functionCall
  -	| linageCounterCall
  -;
  -
  -// array access
  -tableCall :
  -	qualifiedDataName (LPARENCHAR subscript RPARENCHAR)* (LPARENCHAR characterPosition COLONCHAR length? RPARENCHAR)?
  -;
  -
  -functionCall :
  -	FUNCTION functionName (LPARENCHAR argument RPARENCHAR)* (LPARENCHAR characterPosition COLONCHAR length? RPARENCHAR)?
  -;
  -
  -linageCounterCall :
  -	LINAGE_COUNTER ((IN | OF) fileName)?
  -;
  -
  -length :
  -	arithmeticExpression
  -;
  -
  -characterPosition :
  -	arithmeticExpression
  -;
  -
  -subscript :
  -	(
  -		integerLiteral
  -		| qualifiedDataName integerLiteral?
  -		| indexName integerLiteral?
  -		| arithmeticExpression
  -		| ALL
  -	)+
  -;
  -
  -argument :
  -	(
  -		literal
  -		| identifier
  -		| qualifiedDataName integerLiteral?
  -		| indexName integerLiteral?
  -		| arithmeticExpression
  -	)+
  +textName :
  +	cobolWord
   ;
   
   // literal ----------------------------------
  
positive.code: 	cobolWord | NONNUMERICLITERAL
  ;
  
  qualifiedDataName :
  	(dataName | conditionName)
  	(
  		((IN | OF) (dataName | tableCall))+
  		| (IN | OF) fileName
  	)?
  	| specialRegister
  ;
  
  recordName :
  	qualifiedDataName
  ;
  
negative.code: 	| LPARENCHAR arithmeticExpression abbreviationRest RPARENCHAR
  ;
  
  // identifier ----------------------------------
  
  identifier :
  	qualifiedDataName
  	| tableCall
  	| functionCall
  	| specialRegister
  ;
  
  // array access
  tableCall :
  	qualifiedDataName (LPARENCHAR subscript RPARENCHAR)* (LPARENCHAR characterPosition COLONCHAR length? RPARENCHAR)?
  ;
  
  functionCall :
  	FUNCTION functionName (LPARENCHAR argument RPARENCHAR)* (LPARENCHAR characterPosition COLONCHAR length? RPARENCHAR)?
  ;
  
  length :
  	arithmeticExpression
  ;
  
  characterPosition :
  	arithmeticExpression
  ;
  
  subscript :
  	(
  		integerLiteral
  		| qualifiedDataName integerLiteral?
  		| indexName integerLiteral?
  		| arithmeticExpression
  		| ALL
  	)+
  ;
  
  argument :
  	(
  		literal
  		| identifier
  		| qualifiedDataName integerLiteral?
  		| indexName integerLiteral?
  		| arithmeticExpression
  	)+
  ;
  
  // qualified data name ----------------------------------
  
  qualifiedDataName :
  	qualifiedDataNameFormat1
  	| qualifiedDataNameFormat2
  	| qualifiedDataNameFormat3
  	| qualifiedDataNameFormat4
  ;
  
  qualifiedDataNameFormat1 :
  	(dataName | conditionName)
  	(
  		((IN | OF) (dataName | tableCall))+ ((IN | OF) fileName)?
  		| (IN | OF) fileName
  	)?
  ;
  
  qualifiedDataNameFormat2 :
  	paragraphName (IN | OF) sectionName
  ;
  
  qualifiedDataNameFormat3 :
  	textName (IN | OF) libraryName
  ;
  
  qualifiedDataNameFormat4 :
  	LINAGE_COUNTER (IN | OF) fileName
  ;
  
  // names ----------------------------------
  
  