1

私は個人/友人が使用するための小さなコンパイラを作りたいと思っています。いくつかの基本的な入出力コンソール機能。そして、Strings、ints、floats、chars、boolsなどの他のすべてのもの。しかし、私はこれをJavaで実行したいと思います。私はあなたが何を言おうとしているのか知っています、私はCのような実用的で速いものを使うべきです。しかし私はそれに少しのOOPも欲しいです。今、あなたは考えているに違いありません、C++。それに関して私が抱えている問題が1つあります。完成したプログラムは.exeファイルです。これで、.exeを実行するために何もインストールする必要がないことがわかりました。また、必要なファイルである.jarを実行するには、JVMをインストールする必要があります。しかし、私にはAppleコンピュータに友達が何人かいて、Appleを持っていないので、それらの人々のためにObj-cで書かれた別のバージョンを作ることはできませんでした。必要に応じて、Apple、さらにはLinuxでJVMを入手できます。これは、クロスプラットフォームになります。遅くなることは承知していますが、言語はほんのわずかであり、違いは、最初の計算機のようなものと比較して、数分かかった非常に少量です。ヘルプが「Getalife」や「LearnC」のようなものでない限り、すべてのヘルプが適用されます。私はJavaが得意で、クロスプラットフォームが大好きなので、Java以外のものを提案すると、非常にイライラします。ありがとう!

編集:私が尋ねている質問を見ることができる人はそれほど多くないので、ここに再びあります。Javaでコンパイラを作成する方法を知りたいです。それでおしまい。

4

4 に答える 4

10

これらのチュートリアル/リンクをご覧ください:

独自の言語をコンパイルするコンパイラを作成する場合は、コンパイラを作成するよりも多くの作業を行う必要があります。言語構文、ヒープ、スタック、ニーモニック、オペコード、デバッガーなど、そして最後にコンパイラーが必要です。

ただし、Java言語用に独自のカスタムコンパイラを作成する場合は、以下を参照してください。

それをする必要があります。

いくつかのインスピレーションとFindbugs(クラスファイルを読み取る/理解する必要がある)については、バイトコードエンジニアリングライブラリ(BCEL)を参照してください。

編集:

ここにいくつかの素晴らしい答えがある別の同様の質問があります:コンパイラを書くことを学ぶ

于 2012-08-16T15:36:13.803 に答える
2

ここに私が見つけたものを読むためのいくつかのリソースがあります

ここでは、javac(javaコンパイラ)のソースコードを見つけることができます。これは、実際には非常に豊富な知識があるはずです。

ドラゴンの本、コンパイラについて読む

于 2012-08-16T15:36:35.660 に答える
2

これはあなたが始めるのに良い本であり、初心者にとって本当に良い本です。それは理解しやすい理論から始まり、小さなコンパイラを書く方法とそれを段階的に改善する方法を示します。

Java、JavaCC、およびYaccを使用したコンパイラの構築

そして、ここにもう1つあります。これには、長いコードリストが含まれています(気に入るかどうかはわかりません)。簡単にフォローできます。

コンパイラとインタプリタの記述:ソフトウェアエンジニアリングアプローチ

他にもJavaコンパイラの本やJava以外のコンパイラの本がたくさんあります(私は個人的にそれらの本をたくさん所有しています)。しかし、本当にJavaを使い続けたいのであれば、上記の2つをお勧めします。

于 2012-08-16T15:46:32.027 に答える
-2

http://code.google.com/p/javamicko/

それは未完成ですが、あなたはそれを基にしたものをベースにすることができるでしょう。それはあなたが望むもの、JavaのCコンパイラです。

編集:次のものが必要になります-スキャナー-そのためにjFlexを使用します

パーサー-そのためにBisonを使用する

言語文法-ここではCsynthaxを使用しますが、プロジェクトにアップロードされていると思います

「中間コード」は、おそらく.txtファイルのASMダンプになります。後で、そのASM txtファイルを使用してターゲットマシンのマシンコードを生成できます(基本的に、「コンパイル」を「アセンブル」から切断します)。これら2つを分解すると、中間コードでオプティマイザーを実行する余地が残り、16進バイト(オペコード)に変換する前にさらに最適化できます。

今コードを見ていますが...私が最初にコミットしたものよりもはるかに少ないことがわかります。これは、CからのマイクロCコンパイラの移植版であり、完全なものではありません。これは私の学校のプロジェクトの1つだったので、それを価値のあるものと考えてください...

于 2012-08-16T15:41:41.010 に答える