public static ParserRuleContext getParseTree(String fileName) throws Exception {
    FileOpener fo = new FileOpener(fileName);
    String contents = fo.getTrimmedContents();

    org.antlr.v4.runtime.CharStream input = new org.antlr.v4.runtime.ANTLRInputStream(contents);
    PythonLexer lexer = new PythonLexer(input);

    org.antlr.v4.runtime.CommonTokenStream tokens =
        new org.antlr.v4.runtime.CommonTokenStream(lexer);
    PythonParser parser = new PythonParser(tokens);
    parser.setErrorHandler(new BailErrorStrategy());

    try {
      ParserRuleContext context = parser.file_input();
      File2Tree.unlink(lexer, parser);
      return context;
    } catch (Exception ex) {
      File2Tree.unlink(lexer, parser);
      throw ex;
    }
  }