anchor.diff:  writeStmt : WRITE WS valueStmt WS? ',' (WS? outputList)?;
   
   
  -// contextualized complex call statements -------------------
  -
  -explicitCallStmt_Block : explicitCallStmt;
  -
  -explicitCallStmt_Inline : explicitCallStmt;
  -
  -implicitCallStmt_NoValue_Block : implicitCallStmt_NoValue;
  -
  -implicitCallStmt_NoValue_Inline : implicitCallStmt_NoValue;
  -
  -implicitCallStmt_Value_Block : implicitCallStmt_Value_Procedural;
  -
  -implicitCallStmt_Value_Inline : implicitCallStmt_Value_Procedural;
  -
  -implicitCallStmt_Value_InStmt : implicitCallStmt_Value;
  - 
  -
   // complex call statements ----------------------------------
   
   explicitCallStmt : 
  -	eCS_SubCall 
  -	| eCS_FunctionOrArrayCall 
  -	| eCS_MemberSubCall 
  -	| eCS_MemberFunctionCall
  -;
  -
  -eCS_SubCall : CALL WS subCallStmt_ExplicitCall;
  -
  -eCS_FunctionOrArrayCall : CALL WS functionOrArrayCallStmt;
  -
  -eCS_MemberSubCall : CALL WS variableCallStmt? propertyCallStmt* memberSubCallStmt_ExplicitCall;
  -
  -eCS_MemberFunctionCall : CALL WS variableCallStmt? propertyCallStmt* memberFunctionOrArrayCallStmt;
  -
  -implicitCallStmt_NoValue :
  -	subCallStmt_ImplicitCall
  -	| implicitCallStmt_Value+ memberSubCallStmt_ImplicitCall
  -	| memberSubCallStmt_ImplicitCall
  -;
  -
  -implicitCallStmt_Value :
  -	iCS_V_VariableCall
  -	| iCS_V_FunctionOrArrayCall
  -	| iCS_V_MembersCall
  -	| iCS_V_DictionaryCall
  -;
  -
  -iCS_V_VariableCall : variableCallStmt dictionaryCallStmt?;
  -
  -iCS_V_FunctionOrArrayCall : functionOrArrayCallStmt dictionaryCallStmt?;
  -
  -iCS_V_MembersCall : (variableCallStmt | functionOrArrayCallStmt)? memberCall_Value+ dictionaryCallStmt?;
  -
  -iCS_V_DictionaryCall : dictionaryCallStmt;
  -
  -implicitCallStmt_Value_Procedural :
  -	iCS_V_P_FunctionCall
  -	| iCS_V_P_MembersCall
  -;
  -
  -iCS_V_P_FunctionCall : functionOrArrayCallStmt dictionaryCallStmt?;
  -
  -iCS_V_P_MembersCall : (variableCallStmt | functionOrArrayCallStmt)? memberCall_Value* memberFunctionOrArrayCallStmt dictionaryCallStmt?;
  -
  -memberCall_Value : propertyCallStmt | memberFunctionOrArrayCallStmt;
  +	eCS_ProcedureCall 
  +	| eCS_MemberProcedureCall 
  +;
  +
  +eCS_ProcedureCall : CALL WS ambiguousIdentifier WS? LPAREN WS? (argsCall WS?)? RPAREN;
  +
  +eCS_MemberProcedureCall : CALL WS variableCallStmt? memberPropertyCallStmt* '.' ambiguousIdentifier WS? LPAREN WS? (argsCall WS?)? RPAREN;
  +
  +
  +implicitCallStmt_InBlock :
  +	iCS_B_SubCall
  +	| iCS_B_FunctionCall
  +	| iCS_B_MemberSubCall
  +	| iCS_B_MemberFunctionCall
  +;
  +
  +// certainIdentifier instead of ambiguousIdentifier for preventing ambiguity with statement keywords 
  +iCS_B_SubCall : certainIdentifier (WS argsCall)?;
  +
  +iCS_B_FunctionCall : functionOrArrayCallStmt dictionaryCallStmt?;
  +
  +iCS_B_MemberSubCall : implicitCallStmt_InStmt* memberSubCallStmt;
  +
  +iCS_B_MemberFunctionCall : implicitCallStmt_InStmt* memberFunctionOrArrayCallStmt dictionaryCallStmt?;
  +
  +
  +implicitCallStmt_InStmt :
  +	iCS_S_VariableCall
  +	| iCS_S_FunctionOrArrayCall
  +	| iCS_S_DictionaryCall
  +	| iCS_S_MembersCall
  +;
  +
  +iCS_S_VariableCall : variableCallStmt dictionaryCallStmt?;
  +
  +iCS_S_FunctionOrArrayCall : functionOrArrayCallStmt dictionaryCallStmt?;
  +
  +iCS_S_DictionaryCall : dictionaryCallStmt;
  +
  +iCS_S_MembersCall : (variableCallStmt | functionOrArrayCallStmt)? memberCall_Value+ dictionaryCallStmt?;
  +
  +
  +// member call statements ----------------------------------
  +
  +memberPropertyCallStmt : '.' ambiguousIdentifier;
  +
  +memberFunctionOrArrayCallStmt : '.' functionOrArrayCallStmt;
  +
  +memberSubCallStmt : '.' ambiguousIdentifier (WS argsCall)?;
  +
  +memberCall_Value : memberPropertyCallStmt | memberFunctionOrArrayCallStmt;
   
   
   // atomic call statements ----------------------------------
   
   variableCallStmt : ambiguousIdentifier (WS? typeHint)?;
   
  -propertyCallStmt : '.' ambiguousIdentifier;
  -
   dictionaryCallStmt : '!' ambiguousIdentifier;
   
  -
  -memberFunctionOrArrayCallStmt : '.' functionOrArrayCallStmt;
  -
   functionOrArrayCallStmt : (ambiguousIdentifier | baseType) typeHint? WS? LPAREN WS? (argsCall WS?)? RPAREN;
  -
  -
  -memberSubCallStmt_ExplicitCall : '.' ambiguousIdentifier WS? LPAREN WS? (argsCall WS?)? RPAREN;
  -
  -memberSubCallStmt_ImplicitCall : '.' ambiguousIdentifier (WS argsCall)?;
  -
  -subCallStmt_ExplicitCall : ambiguousIdentifier WS? LPAREN WS? (argsCall WS?)? RPAREN;
  -
  -subCallStmt_ImplicitCall : certainIdentifier (WS argsCall)?;
   
   
   argsCall : (argCall? WS? (',' | ';') WS?)* argCall (WS? (',' | ';') WS? argCall?)*;
  
positive.code: 
  moduleBlock : block;
  
  attributeStmt : ATTRIBUTE WS implicitCallStmt_Value_InStmt WS? EQ WS? literal (WS? ',' WS? literal)*;
  
  block : blockStmt (NEWLINE+ WS? blockStmt)*;
  
  
negative.code: 
  implementsStmt : IMPLEMENTS WS ambiguousIdentifier;
  
  inputStmt : INPUT WS valueStmt (WS? ',' WS? valueStmt)+;
  
  killStmt : KILL WS valueStmt;
  
  letStmt : (LET WS)? implicitCallStmt_InStmt WS? (EQ | PLUS_EQ | MINUS_EQ) WS? valueStmt;
  
  lineInputStmt : LINE_INPUT WS valueStmt WS? ',' WS? valueStmt;
  
  