anchor.diff:  start:;
   
   modelDefinition:
  -  agentDefinition+
  -  model
  +  {hint.push(Messages.s_PARSER_AGENT_DEFINITION_REQUIRED);} agentDefinition+ {hint.pop();}
  +  {hint.push(Messages.s_PARSER_MODEL_DEFINITION_REQUIRED);} model {hint.pop();}
   ;
   
   agentDefinition:
  -  AGENT scopeName=UPPERCASENAME LBRACE componentDefinition+ RBRACE SEMI -> ^(AGENT $scopeName componentDefinition+)
  +  {hint.push(String.format(Messages.s_PARSER_INVALID_AGENT_SCOPE,$scopeName.text));} AGENT scopeName=UPPERCASENAME {hint.pop();}
  +  {hint.push(String.format(Messages.s_PARSER_INVALID_AGENT_MISSING_LBRACE,$scopeName.text));} LBRACE {hint.pop();}
  +  componentDefinition+ 
  +  {hint.push(String.format(Messages.s_PARSER_INVALID_AGENT_MISSING_RBRACE,$scopeName.text));} RBRACE {hint.pop();}
  +  {hint.push(String.format(Messages.s_PARSER_INVALID_AGENT_MISSING_SEMI,$scopeName.text));} SEMI {hint.pop();}
  +  -> ^(AGENT $scopeName componentDefinition+)
   ;
   
   componentDefinition:
  -  UPPERCASENAME DEF component SEMI -> ^(COMPONENT UPPERCASENAME component)
  +  id=UPPERCASENAME DEF {hint.push(String.format(Messages.s_PARSER_INVALID_AGENT_STATE_DEFINITION,$id.text));} s=component {hint.pop();}
  +  {hint.push(String.format(Messages.s_PARSER_INVALID_AGENT_STATE_MISSING_SEMI,$id.text));} SEMI {hint.pop();}
  +  -> ^(COMPONENT $id $s)
   ;
   
   component:
  
positive.code: ;
  
  choice:
    prefix (PLUS prefix)* -> prefix+
  ;
  
  prefix:
    LPAR r=expression RPAR DOT s=primaryComponent -> ^(PREFIX TAU $r $s)
  | LPAR action=LOWERCASENAME COMMA r=expression RPAR DOT s=primaryComponent -> ^(PREFIX $action $r $s)
  | SENDMSG LPAR r=expression COMMA msg=UPPERCASENAME COMMA nofmsg=expression RPAR DOT s=primaryComponent -> ^(SEND TAU $r $msg $nofmsg $s)
  | SENDMSG LPAR action=LOWERCASENAME COMMA r=expression COMMA msg=UPPERCASENAME COMMA nofmsg=expression RPAR DOT s=primaryComponent -> ^(SEND $action $r $msg $nofmsg $s)
  | RECVMSG LPAR msg=UPPERCASENAME COMMA msgaccprob=expression RPAR DOT s=primaryComponent -> ^(RECV TAU $msg $msgaccprob $s) 
  | RECVMSG LPAR action=LOWERCASENAME COMMA msg=UPPERCASENAME COMMA msgaccprob=expression RPAR DOT s=primaryComponent -> ^(RECV $action $msg $msgaccprob $s) 
  | primaryComponent
  ;
  
  primaryComponent:
  
negative.code: // *    			PCTMC Overwrites			      *
  // ****************************************************
  constant:
    id=LOWERCASENAME {hint.push(String.format(Messages.s_PARSER_INVALID_LOCATION_IN_CONST_NAME,$id.text));} AT location {hint.pop();}
    -> ^(CONSTANT LOWERCASENAME location)
  ;
  
  variable:
    VAR id=LOWERCASENAME {hint.push(String.format(Messages.s_PARSER_INVALID_LOCATION_IN_VAR_NAME,$id.text));} AT location {hint.pop();}
    -> ^(VARIABLE LOWERCASENAME location)
  ; 
  
  state: 
  