anchor.diff:      ;
   
   LINE_COMMENT
  -    : '--' ~('\n'|'\r')* '\r'? '\n' ->skip
  +    : {getCharPositionInLine() == 0}? (' ' | '\t')*? '--' ~('\n'|'\r')* '\r'? '\n' ->skip
       ;
   
   BSTRING
  
positive.code: */
  
  
  grammar ASN;
  
  modules: moduleDefinition+;
  
  
negative.code: ;
  
  componentTypeLists :
     rootComponentTypeList (tag | (COMMA tag? extensionAndException  extensionAdditions   (optionalExtensionMarker|(EXTENSTIONENDMARKER  COMMA  rootComponentTypeList tag?))))?
  //  |  rootComponentTypeList  COMMA  extensionAndException  extensionAdditions    optionalExtensionMarker
  //  |  rootComponentTypeList  COMMA  extensionAndException  extensionAdditions     EXTENSTIONENDMARKER  COMMA  rootComponentTypeList
    |  extensionAndException  extensionAdditions  (optionalExtensionMarker | (EXTENSTIONENDMARKER  COMMA    rootComponentTypeList tag?))
  //  |  extensionAndException  extensionAdditions  optionalExtensionMarker
  ;
  rootComponentTypeList  : componentTypeList
  ;
  componentTypeList  : (componentType) (COMMA tag? componentType)*
  ;
  componentType  :
    namedType (OPTIONAL_LITERAL | DEFAULT_LITERAL value )?
   |  COMPONENTS_LITERAL OF_LITERAL  asnType
  ;
  
  tag
    : needTag
    | condTag
    | INVALID_TAG
    ;
  
  needTag
    : '-- Need' IDENTIFIER
    ;
  
  condTag
    : '-- Cond' IDENTIFIER
    ;
  
  INVALID_TAG
    : '--' ~('\n'|'\r')*
    ;
  
  extensionAdditions  :  (COMMA  extensionAdditionList)?
  ;
  