anchor.diff:      RBRACK
       ;
   
  -predictDatasetdecl: type declarator (LBRACK RBRACK)? LT;
  -
  -datasetdecl [StringTemplate code]
  -{StringTemplate dataset=null, t=null, m=null, d=null;}
  -    :   t=type d=declarator (b1:LBRACK RBRACK)? LT (m=mappingdecl | f:STRING_LITERAL) GT SEMI
  +predictDatasetdecl: (LBRACK RBRACK)? LT;
  +
  +datasetdecl [StringTemplate code, StringTemplate t, StringTemplate d]
  +{StringTemplate dataset=null, m=null;}
  +    :  (b1:LBRACK RBRACK)? LT (m=mappingdecl | f:STRING_LITERAL) GT SEMI
       {
          dataset=template("dataset");
          dataset.setAttribute("type", t);
  
positive.code:     :  code=ll1statement
      |  (functioncallStatNoAssign) => code=functioncallStatNoAssign
      |   (functioncallStatAssignManyReturnParam) => code=functioncallStatAssignManyReturnParam
      |   (functioncallStatAssignOneReturnParamAsDecl) => code=functioncallStatAssignOneReturnParamAsDecl
      |  (predictAssignStat) => code=assignStat
      ;
  
  
negative.code: predictDeclaration : type declarator ;
  
  declaration [StringTemplate code]
  {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,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 ) {
  