2013-04-20 11 views
6

私はLLVMの初心者です。私の基本的な必要性は、Fortranのコードを解析することです。 LLVMのウェブサイトを見ると、LLVMはコードを解析するためのライブラリとして使用できるようです。だから私はFortranコードを解析し、コード(AST?)に関する情報を抽出するためにそれを使うことができますか?Fortranの解析にLLVMを使用できますか?

+1

LLVMには解析するための* nothing *があります。 f2cからのパーサー、またはantlr Fortran文法の1つを再利用することができます。あるいは、単にあなた自身のパーサーを書くと、Fortranはかなり簡単です。 –

+0

@ SK-logic私は、私の目的のためにTreetopを使ってFortranパーサを書いて始めました。 –

答えて

10

LLVMはコンパイラのバックエンドです。解析する方法を知っている唯一のものは、プログラミング言語のフロントエンドから生成されるように設計された中間言語であるLLVM IRです。 LLVMの公式フロントエンドはClangであり、C、C++、ObjCを扱うことができます。他の言語に興味がある場合は、DragonEggもあります。これはgccのLLVMプラグインです。 gccのフロントエンドとLLVMをバックエンドとして使用するので、gccがパースする方法を知っているものを解析できます。私は、AdaとFortranから正しいコードを生成するように作業が行われていることを知っています。

現状

    のgcc-4.6で最適に動作
  • :ここではそのページからの抜粋です。
  • Fortranは非常にうまく動作します。 Ada、C、C++もうまくいきます。 Adaはgcc-4.7でうまく動作しません。
  • Obj-C、Obj-C++、Goの合理的な量をコンパイルできます。
  • これは単純なJavaプログラムをコンパイルできますが、正しく実行されません(これはGCCの LTOをサポートしていないJavaフロントエンドの結果です)。
  • デバッグ情報が不良です。イーライBenderskyのコメントに追加
+0

ありがとう!だから私はライブラリとしてDragonEggを使うことができますか? Fortranコードを解析し、シンボル情報を要求するようにします。 –

+2

@LiDong:Fortranを解析してシンボル情報を取得する必要があるのであれば、おそらくDragonEggやLLVMは必要ありません。おそらく、フロントエンドのデータをダンプするにはgccが必要です。私はgccでそれを行うためのドキュメントを探します。 –

2

いいえ、LLVMはFortranを解析するためのライブラリではありません。 LLVMは、コンパイラのバックエンドを実装するためのライブラリです。自分でFortranフロントエンドを書く必要があります。

+1

またはhttp://dragonegg.llvm.orgなどのFortranフロントエンドを書いた他の人の作品を使用してください –

0

、あなたは「コード生成を開始する前に、出力内部解析ツリー」のためのgfortranで-fdump-構文解析木のオプションを使用することができます。

関連する問題