2011-12-14 12 views
2

私は、Java構文を拡張する方法を探しています。基本的には、コンパイル時にASTを変更するプリプロセッサを持つことができるlispish "マクロ" -時間。Java構文(衛生的なマクロ)を拡張する最も簡単な方法

Javaコンパイラをプラグインするための最も簡単な方法は、私の個人用の構文拡張に基づいてASTを変更できるため、コンパイラはクラスキャストの例外などを引き継ぐことができます。 ASTを読んで、見つかったものに基づいて修正したいと思います。基本的に私はjavaで衛生的なマクロを使いたいと思っています。

私は約project lombokを知っていますが、それは実際に私が知っているライブラリ/プロジェクトですが、実際にASTを拡張しますが、私がやりたいことはやや複雑です。

なぜ私はこれをしたいですか?私はそれが可能な場合は、パターンの構文、型推論、本当に読みやすい関数の構文などのパターンのJavaを追加することができますしようとしたいです。

+0

私はここからいくつかのアイデアを借りることができます:http://www.chrisseaton.com/katahdin/ –

答えて

1

COTS Javaコンパイラがあなたの構文を拡張しようとしているかどうかわかりません。そして、私はソースコードを再生成するとは思っていませんが、マクロを展開した後でプログラムをコンパイルしたいだけなのかどうか気にする必要はありません。

文法を拡張したい場合は、おそらく、パーサジェネレータ、Java用の文法を取得し、ハッキングを開始するために最低限必要なものです。 ANTLRとすると、Java文法が利用できると思います。コンパイラに供給するためにマクロ解決コードを再生成するためのプリテインタを構築する必要があります。私はANTLRがこれを棚から外すとは思わない。

現実的には、ハイジェニックマクロが拡大したときにハイジェニックマクロが検査し調整できるシンボルテーブル情報が必要と思われます。その場合、オープンソースのJavaコンパイラ(Jikes)を入手し、それをハッキングするかもしれません。このようなオープンソースコンパイラは、最新のJava標準に準拠していない場合があります。

Javaを解析し、文法をハックさせ、完全なシンボルテーブルをサポートする場合は、DMS Software Reengineering ToolkitとそのJava Front Endと考えるかもしれません。 DMSは構文解析、ツリー構築、シンボルテーブルの作成、ASTへの手続き的なアクセス/変更、ソースの再生成のための事前印刷、そしてあなたがDMSに定義する文法のソースからソースへの変換を提供します。 Java文法)。

+0

openjdkは公式のJava 7リファレンス実装だと思います。はい、私はそれをハックすることができますが、私は見つけようとしています簡単な方法(存在する場合)またはよりポータブルなソリューション。私はDMSをチェックします、ポインタのおかげで。 – mikkom

+0

Mikkom:openJDKはコンパイラソースを提供しますか?もしそうなら、それは答えです。 –

+0

はい、OpenJDKはGPLです。私は "オープンソースのコンパイラは最新のJava標準にならない..."とコメントするつもりでした...私は実際に(私が見ていないが)クローズドソースのJavaコンパイラは認識していません。 – BRFennPocock

0

Eclipse IDEを使用している場合は、Eclipse Xtendプロジェクトを調べることができます。

active annotationsでカスタムマクロを拡張するJavaをサポートしています。

関連する問題