anchor.diff:  predictDeclaration : type declarator ;
   
   declaration [StringTemplate code]
  -{StringTemplate d=null;}
  -    :
  -     (functioncallStatAssignOneReturnParamAsDecl) => d=functioncallStatAssignOneReturnParamAsDecl
  +{StringTemplate d=null, t=null, n=null;}
  +    : t=type
  +      n=declarator
  +    (
  +     (functioncallStatAssignOneReturnParamAsDecl[null,null]) => d=functioncallStatAssignOneReturnParamAsDecl[t, n]
          {
           code.setAttribute("statements",d);
           setReturnVariables(code, d);
          }
  -    | (variableDecl[code]) => variableDecl[code]
  -    | (predictDatasetdecl) => datasetdecl[code]
  -    ;
  -
  -variableDecl [StringTemplate code]
  -{StringTemplate v1=null, v2=null,t=null, d=null, i1=null, i2=null;}
  -    :   t=type d=declarator (b1:LBRACK RBRACK)? i1=varInitializer
  +    | (variableDecl[code,null,null]) => variableDecl[code, t, n]
  +    | (predictDatasetdecl) => datasetdecl[code, t, n]
  +    )
  +    ;
  +
  +variableDecl [StringTemplate code, StringTemplate t, StringTemplate d]
  +{StringTemplate v1=null, v2=null, i1=null, i2=null;}
  +    :  (b1:LBRACK RBRACK)? i1=varInitializer
   
       {
           if ( currentFunctionName==null ) {
  
positive.code:     :  code=ll1statement
      |  (functioncallStatNoAssign) => code=functioncallStatNoAssign
      |   (functioncallStatAssignManyReturnParam) => code=functioncallStatAssignManyReturnParam
      |   (functioncallStatAssignOneReturnParamAsDecl) => code=functioncallStatAssignOneReturnParamAsDecl
      |  (predictAssignStat) => code=assignStat
      ;
  
  
negative.code:     : functionInvocation[code]
      ;
  
  functioncallStatAssignOneReturnParamAsDecl
    [StringTemplate t, StringTemplate d]
    returns [StringTemplate code=template("call")]
  {
  StringTemplate f=template("returnParam");
  code.setAttribute("outputs", f);
  f.setAttribute("type", t);
  f.setAttribute("name", d);
  }
      :
          ASSIGN
          functionInvocation[code]
      ;
  