anchor.diff:  // this is a declaration, but not sorted out the predications yet to
   // group it into a decl block
       | ("app") => d=appproceduredecl {code.setAttribute("functions",d);}
  -    | (predictProceduredecl) => d=proceduredecl {code.setAttribute("functions", d);}
       ;
   
   predictDeclaration {StringTemplate x,y;} : ("global") | (x=type y=declarator) ;
  
positive.code: 	})?
  ;
  
  actualParameter returns [StringTemplate code=template("actualParam")]
  {StringTemplate d=null, id=null, ai=null;}
      :
      (
          (declarator ASSIGN)=> (d=declarator ASSIGN)
          {
               code.setAttribute("bind", d);
            }
      )?
      id=expression
      {
        code.setAttribute("value", id);
      }
      ;
  
  atomicBody [StringTemplate code]
  {StringTemplate app=null, svc=null;}
  
negative.code: 
  // they all begin with (id name)
      | (predictDeclaration) => declaration[code]
  	| (predictProceduredecl) => d=proceduredecl {code.setAttribute("functions", d);}
  // more complicated function invocations
  // note that function invocations can happen in above statements too
  // this section is just the remaining more specialised invocations
  