2010-10-20 19 views
5

En faisant quelques lectures, je suis tombé sur les termes "Intermediate Language" et "3AC". D'après ce que je comprends, l'IL est l'étape intermédiaire du processus de compilation du code source. Plus précisément, je lis à propos de bytecode (Java) et C.Trois code d'adresse (TAC/3AC)

La façon dont je l'interprète (corrigez-moi si je me trompe) est;

Source Code 1 (ex Lisp.) -> Langue intermédiaire (C) -> Assemblée Langue -> Code machine

Code source 2 (ex Java.) -> bytecode -> Java Machine virtuelle

Donc, basé sur cela, j'ai du mal à voir où est-ce que le code de trois adresses (TAC/3AC) entre en jeu, et ce qui est utilisé.

Répondre

8

Le code à trois adresses (TAC) est la représentation intermédiaire utilisée dans la plupart des compilateurs . C'est essentiellement un langage d'assemblage générique qui se situe dans la partie inférieure des IR de niveau intermédiaire . Une variante de 2, 3 ou 4 code d'adresse est assez couramment utilisé comme un IR, car il correspond bien à la plupart des langages d'assemblage.

Une instruction TAC peut avoir au plus trois opérandes. Les opérandes peuvent être deux opérandes à un opérateur arithmétique binaire et le troisième l'emplacement du résultat, ou un opérande à comparer à zéro et un deuxième emplacement à se connecter à, et ainsi de suite. Par exemple, ci-dessous sur le sommet est une expression arithmétique et sur le fond, est une traduction en instructions TAC :

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

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