anchor.diff:  	;
   
   generationExpression
  -	:	'wasGeneratedBy' '(' ((id0=identifier | '-') ';')? id2=identifier (',' ((id1=identifier) | '-') ',' ( time | '-' ))? optionalAttributeValuePairs ')'
  +	:	'wasGeneratedBy' '(' id0=optionalIdentifier id2=identifier (',' id1=identifierOrMarker ',' ( time | '-' ))? optionalAttributeValuePairs ')'
         -> {$id1.tree==null}? ^(WGB ^(ID $id0?) $id2 ^(ID)  ^(TIME time?) optionalAttributeValuePairs)
         -> ^(WGB ^(ID $id0?) $id2 $id1  ^(TIME time?) optionalAttributeValuePairs)
   	;
   
  +optionalIdentifier
  +    : ((id0=identifier | '-') ';')?
  +     -> identifier?
  +    ;
  +
  +identifierOrMarker
  +    : ((identifier) | '-')
  +     -> identifier?
  +    ;
  +
  +
   usageExpression
  -	:	'used' '(' ((id0=identifier | '-') ';')?  id2=identifier ',' id1=identifier (',' ( time | '-' ))? optionalAttributeValuePairs ')'
  +	:	'used' '(' id0=optionalIdentifier  id2=identifier ',' id1=identifier (',' ( time | '-' ))? optionalAttributeValuePairs ')'
         -> ^(USED ^(ID $id0?)  $id2 $id1 ^(TIME time?) optionalAttributeValuePairs)
   	;
   
   startExpression
  -	:	'wasStartedBy' '(' ((id0=identifier | '-') ';')? id2=identifier (',' ((id1=identifier) | '-') ',' ( time | '-' ))? optionalAttributeValuePairs ')'
  +	:	'wasStartedBy' '(' id0=optionalIdentifier id2=identifier (',' id1=identifierOrMarker ',' ( time | '-' ))? optionalAttributeValuePairs ')'
         -> {$id1.tree==null}? ^(WSB ^(ID $id0?) $id2 ^(ID)  ^(TIME time?) optionalAttributeValuePairs)
         -> ^(WSB ^(ID $id0?) $id2 $id1  ^(TIME time?) optionalAttributeValuePairs)
   	;
   
   endExpression
  -	:	'wasEndedBy' '(' ((id0=identifier | '-') ';')? id2=identifier (',' ((id1=identifier) | '-') ',' ( time | '-' ))? optionalAttributeValuePairs ')'
  +	:	'wasEndedBy' '(' id0=optionalIdentifier id2=identifier (',' id1=identifierOrMarker ',' ( time | '-' ))? optionalAttributeValuePairs ')'
         -> {$id1.tree==null}? ^(WEB ^(ID $id0?) $id2 ^(ID)  ^(TIME time?) optionalAttributeValuePairs)
         -> ^(WEB ^(ID $id0?) $id2 $id1  ^(TIME time?) optionalAttributeValuePairs)
   	;
   
   invalidationExpression
  -	:	'wasInvalidatedBy' '(' ((id0=identifier | '-') ';')? id2=identifier (',' ((id1=identifier) | '-') ',' ( time | '-' ))? optionalAttributeValuePairs ')'
  +	:	'wasInvalidatedBy' '(' id0=optionalIdentifier id2=identifier (',' id1=identifierOrMarker ',' ( time | '-' ))? optionalAttributeValuePairs ')'
         -> {$id1.tree==null}? ^(WINVB ^(ID $id0?) $id2 ^(ID)  ^(TIME time?) optionalAttributeValuePairs)
         -> ^(WINVB ^(ID $id0?) $id2 $id1  ^(TIME time?) optionalAttributeValuePairs)
   	;
   
   
   communicationExpression
  -	:	'wasInformedBy' '(' ((id0=identifier | '-') ';')? id2=identifier ',' id1=identifier optionalAttributeValuePairs ')'
  +	:	'wasInformedBy' '(' id0=optionalIdentifier id2=identifier ',' id1=identifier optionalAttributeValuePairs ')'
         -> ^(WIB ^(ID $id0?) $id2 $id1 optionalAttributeValuePairs)
   	;
   
   startByActivityExpression
  -	:	'wasStartedByActivity' '(' ((id0=identifier | '-') ';')? id2=identifier ',' id1=identifier optionalAttributeValuePairs ')'
  +	:	'wasStartedByActivity' '(' id0=optionalIdentifier id2=identifier ',' id1=identifier optionalAttributeValuePairs ')'
         -> ^(WSBA ^(ID $id0?) $id2 $id1 optionalAttributeValuePairs)
   	;
   
  
positive.code: /*
          Component 3: Derivations
  
  */
  
  
  derivationExpression
  	:	'wasDerivedFrom' '(' ((id0=identifier | '-') ';')? id2=identifier ',' id1=identifier (',' (a=identifier | '-') ',' (g2=identifier  | '-') ',' (u1=identifier | '-') )?	optionalAttributeValuePairs ')'
        -> {$a.tree==null && $g2.tree==null && $u1.tree==null}?
            ^(WDF ^(ID $id0?) $id2 $id1 ^(ID) ^(ID) ^(ID) optionalAttributeValuePairs)
        -> {$a.tree!=null && $g2.tree==null && $u1.tree==null}?
  
negative.code: 	;
  
  attributionExpression
  	:	'wasAttributedTo' '('  id0=optionalIdentifier e=identifier ',' ag=identifier optionalAttributeValuePairs ')'
        -> ^(WAT  ^(ID $id0?) $e $ag optionalAttributeValuePairs)
  	;
  
  associationExpression
  	:	'wasAssociatedWith' '('  id0=optionalIdentifier a=identifier ',' ag=identifierOrMarker (',' pl=identifierOrMarker)? optionalAttributeValuePairs ')'
        -> {$ag.tree==null}? ^(WAW ^(ID $id0?) $a ^(ID) ^(PLAN $pl?) optionalAttributeValuePairs)
        -> ^(WAW ^(ID $id0?) $a $ag? ^(PLAN $pl?) optionalAttributeValuePairs)
  	;
  
  responsibilityExpression
  	:	'actedOnBehalfOf' '('   id0=optionalIdentifier ag2=identifier ',' ag1=identifier (','  a=identifierOrMarker)? optionalAttributeValuePairs ')'
        -> {$a.tree==null}? ^(AOBO  ^(ID $id0?) $ag2 $ag1 ^(ID) optionalAttributeValuePairs)
        -> ^(AOBO  ^(ID $id0?) $ag2 $ag1 $a? optionalAttributeValuePairs)
  	;
  