anchor.diff:  // certainIdentifier instead of ambiguousIdentifier for preventing ambiguity with statement keywords 
   iCS_B_ProcedureCall : certainIdentifier (WS argsCall)?;
   
  -iCS_B_MemberProcedureCall : implicitCallStmt_InStmt? '.' ambiguousIdentifier typeHint? (WS argsCall)? dictionaryCallStmt?;
  +iCS_B_MemberProcedureCall : implicitCallStmt_InStmt? DOT ambiguousIdentifier typeHint? (WS argsCall)? dictionaryCallStmt?;
   
   
   // iCS_S_MembersCall first, so that member calls are not resolved as separate iCS_S_VariableOrProcedureCalls
  
positive.code: eCS_ProcedureCall : CALL WS ambiguousIdentifier typeHint? (WS? LPAREN WS? argsCall WS? RPAREN)?;
  
  // parantheses are required in case of args -> empty parantheses are removed
  eCS_MemberProcedureCall : CALL WS implicitCallStmt_InStmt? '.' ambiguousIdentifier typeHint? (WS? LPAREN WS? argsCall WS? RPAREN)?;
  
  
  implicitCallStmt_InBlock :
  
negative.code: 
  iCS_S_MembersCall : (iCS_S_VariableOrProcedureCall | iCS_S_ProcedureOrArrayCall)? iCS_S_MemberCall+ dictionaryCallStmt?;
  
  iCS_S_MemberCall : DOT (iCS_S_VariableOrProcedureCall | iCS_S_ProcedureOrArrayCall);
  
  iCS_S_DictionaryCall : dictionaryCallStmt;
  
  
  // atomic call statements ----------------------------------
  
  argsCall : (argCall? WS? (COMMA | SEMICOLON) WS?)* argCall (WS? (COMMA | SEMICOLON) WS? argCall?)*;
  
  argCall : ((BYVAL | BYREF | PARAMARRAY) WS)? valueStmt;
  
  dictionaryCallStmt : EXCLAMATIONMARK ambiguousIdentifier typeHint?;
  
  
  // atomic rules for statements
  
  argList : LPAREN (WS? arg (WS? COMMA WS? arg)*)? WS? RPAREN;
  
  arg : (OPTIONAL WS)? ((BYVAL | BYREF) WS)? (PARAMARRAY WS)? ambiguousIdentifier (WS? LPAREN WS? RPAREN)? (WS asTypeClause)? (WS? argDefaultValue)?;
  
  argDefaultValue : EQ WS? (literal | ambiguousIdentifier);
  
  subscripts : subscript (WS? COMMA WS? subscript)*;
  
  subscript : (valueStmt WS TO WS)? valueStmt;
  
  