docs: public Tree readTree() throws IOException {
      Tree t = null;
  
      while (tokenizer.hasNext() && t == null) {
  
        //Setup PDA
        this.currentTree = null;
        this.stack = new ArrayList<Tree>();
  
        try {
          t = getTreeFromInputStream();
        } catch (NoSuchElementException e) {
          throw new IOException("End of token stream encountered before parsing could complete.");
        }
  
        if (t != null) {
          // cdm 20100618: Don't do this!  This was never the historical behavior!!!
          // Escape empty trees e.g. (())
          // while(t != null && (t.value() == null || t.value().equals("")) && t.numChildren() <= 1)
          //   t = t.firstChild();
  
          if (t != null && treeNormalizer != null && treeFactory != null)
            t = treeNormalizer.normalizeWholeTree(t, treeFactory);
        }
      }
  
      return t;
    }