docs: public static void doFile(File f)
                                throws Exception {
          // If this is a directory, walk each file/dir in that directory
          if (f.isDirectory()) {
              String files[] = f.list();
              for(int i=0; i < files.length; i++)
                  doFile(new File(f, files[i]));
          }
  
          // otherwise, if this is a groovy file, parse it!
          else if (f.getName().endsWith(".groovy")) {
              System.err.println(" --- "+f.getAbsolutePath());
              // parseFile(f.getName(), new FileInputStream(f));
              SourceBuffer sourceBuffer = new SourceBuffer();
              UnicodeEscapingReader unicodeReader = new UnicodeEscapingReader(new FileReader(f),sourceBuffer);
              GroovyLexer lexer = new GroovyLexer(unicodeReader);
              unicodeReader.setLexer(lexer);
              parseFile(f.getName(),lexer,sourceBuffer);
          }
      }
  
      // Here's where we do the real work...
      public static void parseFile(String f, GroovyLexer l, SourceBuffer sourceBuffer)
                                   throws Exception {
          try {
              // Create a parser that reads from the scanner
              GroovyRecognizer parser = GroovyRecognizer.make(l);
              parser.setSourceBuffer(sourceBuffer);
              parser.setFilename(f);
                          
                          if (whitespaceIncluded) {
                              GroovyLexer lexer = parser.getLexer();
                              lexer.setWhitespaceIncluded(true);
                              while (true) {
                                  Token t = lexer.nextToken();
                                  System.out.println(t);
                                  if (t == null || t.getType() == Token.EOF_TYPE)  break;
                              }
                              return;
                          }
  
              // start parsing at the compilationUnit rule
              parser.compilationUnit();
              
              System.out.println("parseFile "+f+" => "+parser.getAST());
  
              // do something with the tree
              doTreeAction(f, parser.getAST(), parser.getTokenNames());
          }