2012-02-06 22 views
2

私は自分のアプリケーションで使用するために手作業でASTツリーを構築しています。私は現在、ASTを形成するために使用する標準的なオブジェクト指向アプローチを使用して、プログラムのメモリに多くのデータを格納しています。ASTビルダーfor Java?

私は、この仕事で私を助けることができるフレームワーク/コードジェネレータが偶然あるのだろうかと思っていました。

私はコンパイラコンパイラを探していません。私は文法を定義して、コードジェネレータにそれに対するパーサを生成させたくありません。私は自分自身でツリーのノードをインスタンス化しようと考えています。私は、より速く安価な方法で、.javaファイル自体を構築することを望んでいます(ノードの属性、オプションのbeginVisit()/endVisit()メソッドなどのオプションがあります)。

+0

作成するASTノードは何ですか?あなたはコードジェネレータがほしいと思うように聞こえますが、ジェネレータはいくつかの入力から逃げなければなりません。どのような入力があり、あなたが望むASTノードについて説明していますか?そのような入力がない場合は、ジェネレータまたはフレームワークが ".java"ファイルを構築するのにどのように役立つと思いますか? (* Javaファイルはどういう意味ですか?) –

答えて

1

これは、質問への答えのようだ:

http://www.jetbrains.com/mps/

MPSの主要な目標は、言語を拡張できるようにすることです。これは、 の既存のすべての言語に、すでに柔軟性が制限されている厳密な言語構文が定義されているので、 です。

言語の構文を拡張する際の問題は、主にテキストの コードの提示です。これは、 異なる言語拡張を使用したい場合に特に当てはまります。それぞれの言語拡張は独自の構文を持つことがあります。

これは当然、 プログラムコードの非テキスト表現の考えにつながります。このアプローチの主な利点は、コード解析の必要性をなくすことです( )。私たちのソリューションは、コード を、プロパティ、子および参照付きのノード で構成された抽象構文木(AST)に保持し、 プログラムコードを完全に記述することです。

同時に、MPSはコードを にテキスト形式で書き込むことを効率的に保ちます。

言語の作成では、コード編集と レンダリングのルールを定義します。 language type-systemと という制約を指定することもできます。これにより、MPSは即座にプログラムコードを確認することができ、 は新しい言語のプログラミングを容易にし、 エラーが発生しにくくなります。

MPSは、生成アプローチを使用します。 用のジェネレータを定義して、カスタム言語のコードを従来の言語のコンパイル可能な コードに変換することもできます。現在、MPSは、特にJavaコードの生成に適していますが、これに限定されるものではありません( )。 XML、HTML、JavaScriptなどを生成することもできます。

+0

パーサを生成するコンパイラコンパイラが必要ではないということははっきりしていましたが、それはMPSとまったく同じです(使用したい場合は避けられないものです)。だから私はあなたがこれをあなたの元の質問に対する答えと考える理由を理解していない。 –

+1

MPSは私にパーサーを生成しません。私のプログラムで使用できる出力ファイル自体が生成されます。 –

4

EclipseのJava Development Toolsをご覧ください。これには非常に堅牢なASTフレームワークが含まれています。

このAPIを使用すると、さまざまな種類のASTノードのすべての属性にアクセスでき、beginVisit()endVisit()のメソッドを持つ訪問者を作成することもできます。

+0

JDTのどの具体的なプラグインを参考にしていますか? –

+0

@devouredelysium私はそれが[JDTコア](http://www.eclipse.org/jdt/core/index.php)([javadoc](http://help.eclipse.org/indigo/index)です)を推測しています。 jsp?topic =%2Forg.eclipse.jdt.doc.isv%2Freference%2Fapi%2Foverview-summary.html)) – prunge

+0

はい、@ prungeは正しいですが、JDT Coreはあなたが探しているものです。 – jbranchaud