anchor.diff:  
   void setReturnVariables(StringTemplate container, StringTemplate statement) {
       if (!statement.getName().equals("call"))
  -	 return;
  +     return;
       Object outputs = statement.getAttribute("outputs");
   
       if (outputs == null)
  -	 return;
  +     return;
       if (outputs instanceof List) {
            for (Iterator it=((List)outputs).iterator(); it.hasNext();) {
  -	     StringTemplate param = (StringTemplate) it.next();
  -	     Object type = param.getAttribute("type");
  +         StringTemplate param = (StringTemplate) it.next();
  +         Object type = param.getAttribute("type");
                if (type != null) {
  -	        StringTemplate var = template("variable");
  -	        var.setAttribute("name", param.getAttribute("name"));
  -	        var.setAttribute("type", type); 
  +            StringTemplate var = template("variable");
  +            var.setAttribute("name", param.getAttribute("name"));
  +            var.setAttribute("type", type);
                   container.setAttribute("statements", var);
                }
            }
       } else {
  -	 StringTemplate param = (StringTemplate) outputs;
  -	 Object type = param.getAttribute("type");
  +     StringTemplate param = (StringTemplate) outputs;
  +     Object type = param.getAttribute("type");
            if (type != null) {
  -	    StringTemplate var = template("variable");
  -	    var.setAttribute("name", param.getAttribute("name"));
  -	    var.setAttribute("type", type); 
  +        StringTemplate var = template("variable");
  +        var.setAttribute("name", param.getAttribute("name"));
  +        var.setAttribute("type", type);
               container.setAttribute("statements", var);
            }
  -    }	 
  +    }
   }
   }
   
   // The specification for a VDL program
   program returns [StringTemplate code=template("program")]
  -    :   
  -	(nsdecl[code])*		//namespace declaration
  -	(typedecl[code])*	//type declaration
  -	(declaration[code])*	//procedures
  -//	(declORstat[code])*	//variable or dataset or call declaration
  +    :
  +    (nsdecl[code])*        //namespace declaration
  +    (typedecl[code])*    //type declaration
  +    (declaration[code])*    //procedures
  +//    (declORstat[code])*    //variable or dataset or call declaration
       ;
   
   nsdecl [StringTemplate code]
   {StringTemplate ns=null;}
  -    :   ns=nsdef 
  -	{
  -	  code.setAttribute("namespaces", ns);
  -	  if (ns.getAttribute("prefix") == null)
  -	     code.setAttribute("targetNS", ns.getAttribute("uri"));
  -	}
  +    :   ns=nsdef
  +    {
  +      code.setAttribute("namespaces", ns);
  +      if (ns.getAttribute("prefix") == null)
  +         code.setAttribute("targetNS", ns.getAttribute("uri"));
  +    }
       ;
   
   nsdef returns [StringTemplate code=template("nsDef")]
       :   "namespace" (prefix:ID{code.setAttribute("prefix", prefix.getText());})? uri:STRING_LITERAL SEMI
  -	{
  -	  code.setAttribute("uri", uri.getText());
  -	} 
  +    {
  +      code.setAttribute("uri", uri.getText());
  +    }
       ;
   
   typedecl [StringTemplate code]
   {StringTemplate t=null;}
       :   t=typedef {code.setAttribute("types", t);}
       ;
  -	
  +
   typedef returns [StringTemplate code=template("typeDef")]
   {StringTemplate t=null;}
  -    :	"type" id:ID {	code.setAttribute("name", id.getText()); }
  -	(
  -	    (t=type
  -	    {
  -	       code.setAttribute("type", t);
  -	    }
  -	    SEMI
  -	    ) 
  -	    | structdecl[code]
  -	)
  +    :    "type" id:ID {    code.setAttribute("name", id.getText()); }
  +    (
  +        (t=type
  +        {
  +           code.setAttribute("type", t);
  +        }
  +        SEMI
  +        )
  +        | structdecl[code]
  +    )
       ;
   
   structdecl [StringTemplate code]
   {StringTemplate e=null, e1=null, t=null;}
  -    :   LCURLY 
  -	(t=type id:ID
  -	{
  -	e=template("member");
  -	e.setAttribute("type", t);
  -	e.setAttribute("name", id.getText());
  -	}
  -	(LBRACK RBRACK {e.setAttribute("isArray", "true");})?
  -	{ code.setAttribute("members", e); }
  -	(
  -	    COMMA
  -	    id1:ID
  -	    {
  -		e1=template("member");
  -		e1.setAttribute("type", t);
  -		e1.setAttribute("name", id1.getText());
  -	    }
  -	    (LBRACK RBRACK {e1.setAttribute("isArray", "true");})?
  -	    { code.setAttribute("members", e1); }
  -	)*
  -	SEMI
  -	)* 
  -	RCURLY
  -	(options {
  -	   warnWhenFollowAmbig = false;
  -	 } 
  -	:SEMI
  -	)?
  +    :   LCURLY
  +    (t=type id:ID
  +    {
  +    e=template("member");
  +    e.setAttribute("type", t);
  +    e.setAttribute("name", id.getText());
  +    }
  +    (LBRACK RBRACK {e.setAttribute("isArray", "true");})?
  +    { code.setAttribute("members", e); }
  +    (
  +        COMMA
  +        id1:ID
  +        {
  +        e1=template("member");
  +        e1.setAttribute("type", t);
  +        e1.setAttribute("name", id1.getText());
  +        }
  +        (LBRACK RBRACK {e1.setAttribute("isArray", "true");})?
  +        { code.setAttribute("members", e1); }
  +    )*
  +    SEMI
  +    )*
  +    RCURLY
  +    (options {
  +       warnWhenFollowAmbig = false;
  +     }
  +    :SEMI
  +    )?
       ;
   
   declaration[StringTemplate code]
   {StringTemplate f=null;}
   
  -   :    (declORstat[code])=>declORstat[code] 
  -        |   
  +   :    (declORstat[code])=>declORstat[code]
  +        |
           f=function {code.setAttribute("functions", f);}
       ;
   
  
positive.code:         |   '\n' {newline();}
          )+
          { $setType(Token.SKIP); }
      ;    
  
  // Single-line comments, c style
  SL_CCOMMENT
  	:	"//"
  		(~('\n'|'\r'))* ('\n'|'\r'('\n')?)
  		{$setType(Token.SKIP); newline();}
  	;
  
  // Single-line comments, shell style
  SL_SCOMMENT
  	:	"#"
  		(~('\n'|'\r'))* ('\n'|'\r'('\n')?)
  		{$setType(Token.SKIP); newline();}
  	;
  
  // multiple-line comments
  ML_COMMENT
  	:	"/*"
  		(
  		options {
  			generateAmbigWarnings=false;
  		}
  		:
  			{ LA(2)!='/' }? '*'
  		|	'\r' '\n'		{newline();}
  		|	'\r'			{newline();}
  		|	'\n'			{newline();}
  		|	~('*'|'\n'|'\r')
  		)*
  		"*/"
  		{$setType(Token.SKIP);}
  	;
  
  // escape sequence
  protected
  ESC
      :	'\\'
  	(	'n'
  	|	'r'
  	|	't'
  	|	'b'
  	|	'f'
  	|	'"'
  	|	'\''
  	|	'\\'
  	)
      ;	
  
  protected
  EXPONENT
  	:	('e'|'E') ('+'|'-')? ('0'..'9')+
  	;
  
negative.code: }
      :   code=additiveExpr
          (
          options {
          greedy = true;
          //warnWhenFollowAmbig = false;
          }
          :
             {op=LT(1);}
              ( LT | LE | GT | GE ) b=additiveExpr
              {
              a = code;
              code=template("cond");
          code.setAttribute("op", escape(op.getText()));
              code.setAttribute("left", a);
              code.setAttribute("right", b);
              }
  