5

読書をしていると、「中級言語」と「3AC」という言葉に出くわしました。

私が理解しているように、ILはソースコードコンパイルプロセスの中間の「ステップ」です。具体的には、バイトコード(Java)とCについて読んでいます。

私がそれを解釈する方法(間違っている場合は私を訂正してください)は次のとおりです。

ソースコード1(例:Lisp)->中間言語(C)->アセンブリ言語->機械語

ソースコード2(例:Java)->バイトコード->Java仮想マシン

そのため、それに基づいて、3番地コード(TAC / 3AC)がどこで機能し、何が使用されるのかを確認するのに苦労しています。

4

1 に答える 1

8

3番地コード(TAC)は、ほとんどのコンパイラで使用される中間表現です。これは本質的に、中間レベルのIRのローエンドに該当する一般的なアセンブリ言語です。2、3、または4アドレスコードの一部のバリアントは、ほとんどのアセンブリ言語に適切にマッピングされるため、IRとしてかなり一般的に使用されます。

TAC命令は、最大3つのオペランドを持つことができます。オペランドは、2進算術演算子の2つのオペランドと、結果の位置の3番目、またはゼロと比較するためのオペランド、および分岐先の2番目の位置などです。たとえば、下の上部は算術式で、下部はTAC命令への変換です。

//Expresion
        a = b * c + b * d;
//3AC
        _t1 = b * c;
        _t2 = b * d;
        _t3 = _t1 + _t2;
        a = _t3;

出典: http://web.archive.org/web/20151010192637/http: //www.dound.com/courses/cs143/handouts/17-TAC-Examples.pdf

于 2010-11-02T00:47:15.213 に答える