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: 
  // they all begin with (id name)
      | (predictDeclaration) => declaration[code]
  
  // more complicated function invocations
  // note that function invocations can happen in above statements too
  // this section is just the remaining more specialised invocations
  
negative.code: 	})?
  ;
  
  actualParameter returns [StringTemplate code=template("actualParam")]:
  	(predictNamedParam) => namedParam[code] 
  	| positionalParam[code]
  ;
  
  predictNamedParam {StringTemplate d = null;}:
  	d=declarator ASSIGN
  ;
  
  namedParam[StringTemplate code] {StringTemplate d = null;}:
  	d=declarator ASSIGN {
  		code.setAttribute("bind", d);
  	}
  	positionalParam[code]
  ;
  
  positionalParam[StringTemplate code] {StringTemplate id = null;}:
  	id=expression {
  		code.setAttribute("value", id);
  	}
  ;
  
  atomicBody [StringTemplate code]
  {StringTemplate app=null, svc=null;}
  