code: def from_fortran_file(cls, fortran_file: str, tmpdir: str = "."):
          
          stem = Path(fortran_file).stem
          if tmpdir == "." and "/" in fortran_file:
              tmpdir = Path(fortran_file).parent
          preprocessed_fortran_file = f"{tmpdir}/{stem}_preprocessed.f"
          lambdas_path = f"{tmpdir}/{stem}_lambdas.py"
          json_filename = stem + ".json"
  
          with open(fortran_file, "r") as f:
              inputLines = f.readlines()
  
          with open(preprocessed_fortran_file, "w") as f:
              f.write(preprocessor.process(inputLines))
  
          xml_string = sp.run(
              [
                  "java",
                  "fortran.ofp.FrontEnd",
                  "--class",
                  "fortran.ofp.XMLPrinter",
                  "--verbosity",
                  "0",
                  preprocessed_fortran_file,
              ],
              stdout=sp.PIPE,
          ).stdout
          trees = [ET.fromstring(xml_string)]
          comments = get_comments.get_comments(preprocessed_fortran_file)
          os.remove(preprocessed_fortran_file)
          xml_to_json_translator = translate.XMLToJSONTranslator()
          outputDict = xml_to_json_translator.analyze(trees, comments)
          pySrc = pyTranslate.create_python_source_list(outputDict)[0][0]
  
          G = cls.from_python_src(pySrc, lambdas_path, json_filename, stem)
          return G
docs: Builds GrFN object from a Fortran program.