私はJVMを対象とした言語を作成しており、現在コンパイラーをまとめています。論理的には、私の新しい言語には、バイトコードの作成に関してJavaと同じニーズがたくさんあることがわかります。いくつか例を挙げます。
- ドットで区切られた識別子のシーケンスが何を指しているかを調べます。abcはローカル変数a、フィールドa、クラスa、またはクラスabを参照できます。
- 算術演算用のプリミティブ型の変換:intVar * doubleVarの場合、intVarをdoubleにキャストする必要があります
- パラメータのセットのマッチング方法を見つけます。適切な継承と上記と同じプリミティブキャストを使用します。
- 関連するメモ、オートボクシング
- ジェネリック型チェック、例えば
List<X<? super Y>> l = new List<X<Z>>();
互換性があるかどうか
おそらくもっとたくさんあります、そして私はどういうわけかこれらのホイールを再発明したくありません(新しい言語を作ります、もちろん私はすでにいくつかのホイールを再発明しています...)、それで私は再利用するための最良の方法は何であるか疑問に思いました(の一部)既存のJavaコンパイラーに、上記を理解するために必要なASTの一部を渡します。
私はすでにレクサーとパーサー(ANTLR)を配置しているので、コンパイラーを比較的簡単に操作できるようにするために、どのコンパイラーが存在するかについてのアドバイスを本当に探しています(たとえば、ECJを少し調べました)。 、しかし誰かが私が望むものができないと私に言った場合、または別のコンパイラがより使いやすいでしょうそれは素晴らしいでしょう)。
明確な質問で要約すると、Java以外のJVM言語のフロントエンドで使用するのに適した、簡単にアクセスできるバックエンドを備えているJavaコンパイラはどれですか。