クロスコンパイラのTダイアグラム


9

Red Dragon Book CompilersのBootstrappingを研究していて、クロスコンパイラーのTダイアグラムがかなり混乱していることがわかりました。「コンパイラ1からコンパイラ2を実行する」が何を意味するのか理解できません。誰かがいくつかのより良い説明、類推、または実際のコンパイラに関連する例を提供できますか?

最初にいくつかの表記。 私は言語のコンパイラの平均 言語で書かれた出力言語/マシンコード生成。これは墓石またはT-diagramsです。LSN= ここに画像の説明を入力してくださいLSN

コンパイラーのコンパイル

  1. マシンNのコードを生成する実装言語Sの新しい言語Lのクロスコンパイラーがあるとします。

    LSN=
    LSNのTダイアグラム

  2. マシンMで実行されている既存のSコンパイラもマシンMのコードを実装しているとします。

    SMM=
    SMMのTダイアグラム

  3. LMNを生成するためにSMMを介してLSNを実行する

コンパイラの構築

LMN=LSN+SMM
LMN = LSN + SMMのTダイアグラム


Tダイアグラムをいくつか追加しました。これにより、実際に何が起こっているのかを理解しやすくなります。うまくいけば、誰かがそれらをレンダリングするより良い方法を罰することができます。
Dave Clarke

回答:


11

Tダイアグラム(質問の元のバージョンから省略したもの)は、この種の質問を理解するために重要です。最後のT-diagramを見てみましょう。

ここに画像の説明を入力してください

最初のTは、Sで記述されたLからNまでのコンパイラを示します。

2番目のTは、Mで記述された(またはMで実行されている)SからMへのコンパイラーを示します。これはコンパイラコンパイラになります。

最初のTに2番目のTを適用すると、最初のTがコンパイルされ、マシンMで実行されます。その結果、マシンMで実行されるLからNまでのコンパイラーになります。

2番目のTもマシンMで実行されるという事実は、コンパイラーを実行するマシンでコンパイラーコンパイラーを実行していることを示しています。クロスコンパイラーを使用する必要はありません(これは、下部のMが異なる場合に当てはまります)。 )。


5

これは、LSNをSMMでコンパイルすること、つまりLSNのソースコードをSMMで実行することを意味します。

SMMがいくつかのソースコードをコンパイルすると、マシンMの実行可能ファイルが生成されるため、LSMをSMMでコンパイルすると、マシンNの実行可能ファイルを生成するためにマシンMでLソースファイルをコンパイルする実行可能ファイルLMNが取得されます。

おそらくこれを類推で理解する方が簡単でしょう。Supppse ccARMコードを生成するFortranで書かれたCコンパイラーがあります。fcx64コンピューターにFortranコンパイラーもあるとします。ccソースコードをコンパイルfcしてx64で実行されるプログラムを取得すると、Cプログラムをコンパイルしますが、ARMの実行可能ファイルを生成します。


0

簡単にするために...

注:コンパイラーは低水準言語でのみ実行できることを忘れないでください。

最初の図では、コンパイラーはHLL(High Level Langg)で記述されているため、それをマシンで実行するには、コンパイラーの実装言語がLLLである必要があります。

したがって、2番目の図では、コンパイラーの実装言語は自己常駐コンパイラーで実行されるため、ターゲットコードは独自のマシンで実行できます。

最後に、それらの両方を組み合わせて、コンパイラはlangg--Mのマシンで実行されます

入力言語--L

出力Langg--N

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.