2

私は非常にシンプルで小さなコンパイラを書いています(私自身で、コースなどは行っていません)。そして、いくつかの決定を下すために助けが必要です。最初のステップ (だと思います) では、アセンブリからコード生成までを知る必要があります (そうですか?)。より良いアセンブリ言語を探しています。コーディングが簡単である/バックエンドのサポートが優れているなどの点で優れていますHOWTO assembly by LPD。いくつかのアセンブリがある場所を読みました。しかし、私は AT&T コード生成に本当に興味があります。AT&T のコード生成を行う GNU/Linux、GCC、および GCC に似たコンパイラに精通しているためです。

他の提案はありますか?可能であれば、AT&T 構文とバックエンド (ある場合) の利点を説明してください。

これまでにコンパイラを書いたことがなく、複雑すぎて BISON または同等のものなしでそれを行うことができない人にとっては? recursive descent parser私は(例えば、DMRとgcc 4.6>、そしてTCCがそうするように)を使ってそれをしたいです。また、これは私の最初のコンパイラ (非基本的でアセンブリを使用する場合) であるため、BISON ヘルプを使用して行うのは間違っていると考えています。

非常にTnanks。

4

3 に答える 3

2

JVMに書き込むことを検討しましたか? それはあなたのプラットフォームに存在し、(私は推測しますか?) 生のマシン ASM よりも扱いやすいでしょう。

于 2012-08-26T04:16:33.263 に答える
2

まず第一に、AT&T 対 Intel は単なる構文の問題です。基盤となるプラットフォームの機能は、構文ではなく、ハードウェア アーキテクチャによって決まります。コンパイラを移植可能にしたい場合は、複数のアーキテクチャをサポートする必要がありますが、使用する構文は同じままにすることができます。AT&T 構文を使用する場合でも、x86 と ARM 用に異なるコードを生成する必要があります。各アーキテクチャにはアセンブリ言語が 1 つしかありません。たとえば、最初に Intel で、次に AT&T で 2 つの数値を追加します。

mov eax, 1
mov ebx, 2
add eax, ebx

と:

movl $1, %eax
movl $2, %ebx
addl %ebx, %eax
于 2012-08-26T04:32:46.183 に答える
1

antlrは検討する価値のある別のパッケージです。flex や bison よりも使いやすいと思います。また、プロセスをさらに簡単にするエディターも付属しています。これを使用して、複数の言語のパーサーを生成できます。flex と bison は c/c++ ベースです。また、antlr を使用する場合は、構文と解析規則を 1 つのファイルで定義します。flex と bison では、.l ファイルと .y/.ypp ファイルを作成する必要があり、それぞれに何を入れるかを知ると、非常に混乱する可能性があります。

アセンブリについてはよくわかりませんが、Courseraにはコンパイラに関する無料のコースがあり、コードの解析とアセンブリへのコンパイルについて教えています。見てみな

于 2012-08-26T04:27:49.573 に答える