anchor.diff:  //printfn "result as AST:  %A" result
   //printfn "result as term: %s" (NHol.printer.string_of_term result)
   
  -
  +/// Convert a path to a list of absolute file names.
   // A path can be absolute or relative, a directory or file, or empty.
   let getFiles (path : string) : string list =
       let toAbsolutePath path =
  
positive.code:                     addInfo tl ((fileName, lineNumber, hd) :: acc)
                  | [] -> acc
              let newItems = addInfo matchesList []
              processPattern pattern tl (acc @ (List.rev newItems))
          | [] -> acc
      let rec processPatterns patterns fileNames acc =
          match patterns with
          | hd :: tl ->
              let acc = processPattern hd fileNames acc
              processPatterns tl fileNames acc
          | [] -> acc
      processPatterns patterns fileNames []
  
  let printInfo (info : (string * int * Match * string * string) list) =
      let printMatchCollection (item : (string * int * Match * string * string)) =
          let (fileName, lineNumber, regexMatch, matchString, msg) = item
  
negative.code:     with
      | _ -> acc
          
  /// Process the matches to build a list of messages based on the condtions.
  let processConditions conditions info  : (string * int * Match * string * string) list =
      let rec processConditions (item : (string * int * Match)) conditions acc : (string * int * Match * string * string) list =
          match conditions with
          | condition :: tl ->
              let acc = condition item acc
              processConditions item tl acc
          | [] -> acc
      let rec prcessInfo (info : (string * int * Match) list) conditions acc : (string * int * Match * string * string) list =
          match info with
          | hd :: tl -> 
              let acc = processConditions hd conditions acc
              prcessInfo tl conditions acc
          | [] -> List.rev acc
      prcessInfo info conditions []
     
  /// Prints a list of messages based on the filenames, patterns and condtions.
  let printMessages filenames patterns conditions =
      getMatches filenames patterns
      |> processConditions conditions
      |> printInfo 
  
  // I made this list to correspond with the compilation order to see if the 
  // order mattered when parsing.
  /// List of absolute filenames for HOL Light source code files in this project.
  let projectFiles : string list = 
      let projectCodeFiles =
          [@"lib.fs";
          @"fusion.fs";
          @"basics.fs";
          @"nets.fs";
          @"printer.fs";
          @"preterm.fs";
          @"parser.fs";
          @"equal.fs";
          @"bool.fs";
          @"drule.fs";
          @"tactics.fs";
          @"itab.fs";
          @"simp.fs";
          @"theorems.fs";
          @"ind_defs.fs";
          @"class.fs";
          @"trivia.fs";
          @"canon.fs";
          @"meson.fs";
          @"quot.fs";
          @"pair.fs";
          @"nums.fs";
          @"recursion.fs";
          @"arith.fs";
          @"wf.fs";
          @"calc_num.fs";
          @"normalizer.fs";
          @"grobner.fs";
          @"ind_types.fs";
          @"lists.fs";
          @"realax.fs";
          @"calc_int.fs";
          @"realarith.fs";
          @"real.fs";
          @"calc_rat.fs";
          @"int.fs";
          @"sets.fs";
          @"iterate.fs";
          @"cart.fs";
          @"define.fs";
          @"util.fs";
          @"help.fs";
          @"database.fs"]
      let rec convertFiles filenames acc =
          match filenames with
          | hd :: tl -> 
              let absoluteFileName = __SOURCE_DIRECTORY__ + System.IO.Path.DirectorySeparatorChar.ToString() + hd
              let acc = absoluteFileName :: acc
              convertFiles tl acc
          | [] -> List.rev acc
      convertFiles projectCodeFiles []
  
  // "(?<parse_function>parse_term)(?:[ ]?)(?<atSign>[@]?)(?:\x22)(?<parseString>.*?)(?:\x22)"
  // A parse_term in code should macth
  