anchor.diff:  
   method_call_chain returns [String code]
       : (method_call PERIOD) => method_call {$code=$method_call.code;}
  -      ( PERIOD ID method_params {$code="("+$ID.text+" "+$code+$method_params.code+")";} )+
  +                              (PERIOD ID method_params {$code="("+$ID.text+" "+$code+$method_params.code+")";})+
       | method_call {$code=$method_call.code;}
       ;
  -
   
   method_call returns [String code]
       : ( ID PERIOD ID method_params) => obj=ID PERIOD func=ID method_params { $code = "(" + $func.text + " " + $obj.text + $method_params.code + ")"; }
       ;
  +
  +/*
  + Parameter for a function or method call
  + is either an empty string or, if parameters are
  + present, includes leading whitespace so it can be
  + directly added to any previous text
  +*/
   
   method_params returns [String code]
       : ( '(' ')') => '(' ')' { $code = "";}
  
positive.code: 
  function_call returns [String code]
      : ID method_params { $code = "(" + $ID.text + $method_params.code + ")"; }
  /*
      : (ID '(' ')') => ID '(' ')' { $code = "(" + $ID.text + ")"; }
      | (ID '(' expression COMMA!) => ID '(' expression_list ')' {
              $code = "(" + $ID.text;
              for(int i=0; i < $expression_list.code_list.size(); ++i) {
                  $code += " " + $expression_list.code_list.get(i);
              }
              $code += ")";
          }
      | ID '(' expression ')' { $code = "(" + $ID.text + " " + $expression.code + ")"; }
  */
      ;
  
  /*
  
negative.code:             }
          }
      | '(' expression ')' { $code = " " + $expression.code; }
      ;
  
  
  for_loop returns [String code]
  