WikiDer > Drei Adresscodes
Drei Adresscodes ist ein Begriff aus dem Informatik mit dem eine bestimmte Art von interne Vertretungen vor dem Compiler angegeben ist.
Im Allgemeinen bestehen drei Adresscodes aus einer Folge von Aussagen mit dem Formular:
- x := y auf z
bei welchem auf ist ein beliebiger Operator und X, ja und z Argumente sind die zu Speicheradressen, registriert, Konstanten oder Labels. Drei Adreßcodes können zwar auch Anweisungen mit einem oder gar keinen Argumenten oder Anweisungen ohne Ergebniszuweisung enthalten (Ziel) gibt es nie mehr als zwei Argumente und ein Ziel. daher der Name drei Adresscode.
Drei Adresscodes können als a . betrachtet werden Versammlung Für ein virtuelle Maschine mit unendlich vielen Registern. Drei-Adress-Code ähnelt häufig der Assemblierung für bestehende Prozessoren und ist daher weitgehend einfach in Maschinensprache zu übersetzen.
Die Aussage x := x y * z kann in drei Adresscodes wie folgt dargestellt werden:
- t1 := x * z
- x := x t1
bei welchem t1 ist eine vom Compiler generierte temporäre Variable (ein Register).
Neben arithmetischen Operationen und Zuweisungen gibt es im Allgemeinen eine Reihe anderer Arten von Anweisungen in drei Adresscodes, darunter bedingte und unbedingte Sprunganweisungen, Verfahren-Anrufe und Unterstützung für Arrays.
Leistungen
Drei Adresscodes haben eine Reihe von Vorteilen:
- Es ist kompakt (sowohl im Computerspeicher als auch auf dem Papier).
- Obwohl es Maschinencode sehr ähnelt, ist es (noch) nicht notwendig, Registerzuordnung bewirbt sich. Das spätere Ausführen der maschinenabhängigen Registerzuordnung erleichtert einem Compiler die Anpassung an eine neue Zielarchitektur.
- Aufgrund der starken Ähnlichkeit mit "echtem" Maschinencode ist die endgültige Übersetzung in Maschinencode relativ einfach.
Implementierung
Im Allgemeinen gibt es drei Implementierungsverfahren für drei Adresscodes: mittels Quadruplets, Triplets oder indirekten Triplets.
Beim Benutzen Vierlinge der Drei-Adress-Code wird durch eine Liste (Array) dargestellt, von der jede Zeile vier Felder hat (jede Zeile bildet ein Vierfach). Ein Feld enthält den Operator, ein Feld enthält das (optionale) Ziel und zwei Felder enthalten die (optionalen) Argumente.
Mit Hilfe von Dreiergruppen jede Anweisung wird durch drei statt vier Felder dargestellt: eines für den Operator und zwei für die optionalen Argumente. Da Code mit drei Adressen unendlich viele temporäre Variablen verwenden kann, können wir jedes Ergebnis einer Operation in einer temporären Variablen speichern, die der Position dieser Operation im Array der drei Adressanweisungen entspricht. Also: wenn die Operation 2*a befindet sich in der dritten Zeile des Arrays, dann befindet sich das Ergebnis dieser Operation in der temporären Variablen t3.
Die Triplet-Methode benötigt weniger Speicher als die Verwendung von Quadruplets. Der Nachteil besteht darin, dass beim Verschieben einer Anweisung alle Verweise auf das Ergebnis dieser Operation angepasst werden müssen. Dies macht Triplets ungeeignet, wenn der Drei-Adress-Code noch optimiert wird, was normalerweise der Fall ist. In diesem Fall sind indirekte Tripletts besser geeignet.
Mit indirekte Drillinge die Anweisungen werden auch durch Tripletts repräsentiert, aber zusätzlich verwenden wir ein Array, das Zeiger zu diesen Drillingen. Dieses Array bestimmt die Reihenfolge, in der die (Anweisungen in) den Tripletts ausgeführt werden. Eine Anweisung kann jetzt verschoben werden, indem dieses Array modifiziert wird, während die Tripel selbst ihre ursprüngliche Reihenfolge beibehalten.
Quellen, Anmerkungen und/oder Verweise
|
| Compiler | ||||||
|---|---|---|---|---|---|---|
|