code: public ProgramTree parseProgram() {
      try {
        SourcePosition start = getTreeStartLocation();
        ImmutableList<ParseTree> sourceElements = parseGlobalSourceElements();
        eat(TokenType.END_OF_FILE);
        return new ProgramTree(
            getTreeLocation(start), sourceElements, commentRecorder.getComments());
      } catch (StackOverflowError e) {
        reportError("Too deep recursion while parsing");
        return null;
      }
    }
docs: 14 Program