anchor.diff:  ;
   
   collatingSequenceClause :
  -	PROGRAM? COLLATING? SEQUENCE IS? alphabetName+
  +	PROGRAM? COLLATING? SEQUENCE 
  +	(IS? alphabetName+)
  +	(FOR? ALPHANUMERIC IS? alphabetName)?
  +	(FOR? NATIONAL IS? alphabetName)?
   ;
   
   segmentLimitClause :
  
positive.code: 
  currencySignClause :
  	CURRENCY SIGN? IS? literal
  ;
  
  decimalPointClause :
  	DECIMAL_POINT IS? COMMA
  ;
  
  symbolicCharactersClause :
  	SYMBOLIC CHARACTERS? (FOR? (ALPHANUMERIC | NATIONAL))? (symbolicCharacter+ (IS | ARE)? integerLiteral+)+ (IN alphabetName)?
  ;
  
  environmentSwitchNameClause :
  	environmentName IS? mnemonicName specialNamesStatusPhrase?
  	| specialNamesStatusPhrase
  ;
  
  specialNamesStatusPhrase :
  	ON STATUS? IS? condition (OFF STATUS? IS? condition)?
  	| OFF STATUS? IS? condition (ON STATUS? IS? condition)?
  ;
  
  // -- input output section ----------------------------------
  
negative.code: 	| decimalPointClause
  	| symbolicCharactersClause
  	| environmentSwitchNameClause
  	| defaultDisplaySignClause
  	| defaultComputationalSignClause
  	| reserveNetworkClause
  ;
  
  alphabetClause :
  	alphabetClauseFormat1
  	| alphabetClauseFormat2
  ;
  
  alphabetClauseFormat1 :
  	ALPHABET alphabetName (FOR ALPHANUMERIC)? IS?
  	(
  		EBCDIC
  