WikiDer > Interne Vertretung
EIN interne Vertretung (häufig Zwischendarstellung genannt), abgekürzt IR, ist ein Konzept aus dem Informatik. Mit einer internen Vertretung, einer internen und temporären Datenstruktur meinte das Computer Programm war mal Eingang speichern Sie es, bevor Sie es weiterverarbeiten.
Der Begriff wird hauptsächlich verwendet, wenn über gesprochen wird Compiler und Dolmetscher.
Im Compiler platzieren
Das Parser des Compilers parst die Quellcode (das Eingabeprogramm) und wandeln es in a . um abstrakte Syntax. Diese abstrakte Syntax wird dann in eine interne Darstellung umgewandelt[1] an denen dann verschiedene Operationen ausgeführt werden, bevor diese interne Darstellung in ein Ausgabeprogramm (die kompilierte Version des Eingabeprogramms) umgewandelt wird.
Das Konvertieren eines Eingabeprogramms in einen abstrakten Syntaxbaum und dann in einen IR erfolgt im Frontend vom Compiler. Die erzeugte IR wird dann an die mittleres Ende. Dann eine Reihe von Operationen (Optimierungen und Kontrollen), die am erzeugten IR durchgeführt werden. Danach wird die IR an die hinteres Ende, die die IR in umwandelt Maschinensprache und wenden Sie zusätzliche, maschinenabhängige Optimierungen an.
Es ist nicht ungewöhnlich, dass ein Compiler mehrere unterschiedliche IRs verwendet. Dabei wird die erste IR des zu kompilierenden Programms nach ihrer Analyse und Optimierung in eine zweite, andere IR umgewandelt. Diese wird dann ebenfalls optimiert, bevor sie in das Ausgabeprogramm oder wieder in eine dritte IR umgewandelt wird.
Dolmetscher
Auch die meisten Dolmetscher einen IR verwenden. Nachdem diese IR jedoch optimiert wurde, wird sie nicht wie bei Compilern an ein Back-End übergeben, das ein ausgeführtes Programm kompiliert. Stattdessen wird die IR direkt durchgeführt. Solche Interpreter sind im Grunde Compiler ohne Back-End und ihre IR liegt oft in Form von Maschinencode für a virtuelle Maschine.
Ziel
Es gibt zwei Gründe für die Verwendung einer IR in einem Compiler.
- Modularität
- Die Verwendung einer IR verbessert die Modularität des Compilers und erleichtert die Erweiterung des Compilers. Um dem Compiler ein neues zu geben Programmiersprache Um dies zu unterstützen, müssen Sie lediglich ein neues Frontend erstellen, das den Quellcode in dieser neuen Sprache in die IR des Compilers umwandelt. Das Middle-End und Back-End müssen nicht geändert werden. Oder wenn der Compiler eine neue Maschinenarchitektur unterstützen muss, muss er nur ein neues Backend erstellen, das die IR für diese neue Architektur in Maschinensprache umwandelt.
- Optimierung
- Die Form der IR (oder IRs), die ein Compiler verwendet so gewählt, dass dies Optimierungen die mit abstrakter Syntax oder dem finalen Maschinencode nicht möglich sind. In Compilern, die mehrere interne Darstellungen verwenden, sind dies häufig so so gewählt, dass sie jeweils unterschiedliche, zusätzliche Optimierungen ermöglichen.
Typen
Bilden
Generell lassen sich drei Arten von internen Repräsentationen unterscheiden:
- Baumstruktur
- Die interne Darstellung erfolgt in Form von Baum (oder Anzahl). EIN abstrakter Syntaxbaum ist ein Beispiel für eine IR mit einer Baumstruktur.
- Linear
- Die interne Repräsentation besteht aus einer Liste von Anweisungen (auch Pseudocode genannt) für eine abstrakte Maschine. Beispiele dafür sind Byte-Code und der drei Adresscodes die in vielen Compilern verwendet werden.
- Eine Zwischenform zwischen den beiden
- Ein Beispiel dafür ist ein IR, das linearen Pseudocode verwendet, um Blöcke von darzustellen Anleitung ohne Sprunganweisungen und platziert diese Blöcke in einer Baumstruktur, die die Kontrollfluss (und damit die Sprunganweisungen) des Programms.
In Compilern, die mehrere IRs verwenden, ist die erste IR normalerweise eine Baumstruktur und die letzte IR oft eine lineare IR mit Zwischenformen dazwischen.
Abstraktion
IRs können auch nach ihrem Grad an klassifiziert werden classified Abstraktion. Je abstrakter eine IR ist, desto weiter entfernt sie sich vom endgültigen Maschinencode, den der Compiler generiert, und den beteiligten hardwarespezifischen Details. Abstrakte IRs werden hohes Level und IRs, die näher am Maschinencode liegen, werden aufgerufen niedriges Niveau erwähnt. Selbstverständlich sind alle möglichen Zwischenformen möglich.
- hohes Level
- Wenn mehrere IRs verwendet werden, werden High-Level-IRs zu Beginn des Kompilierungsprozesses verwendet. Der abstrakte Syntaxbaum ist ein High-Level-IR. High-Level-IRs eignen sich unter anderem zur Analyse und Optimierung der optimizing Kontrollfluss eines kompilierten Programms.
- niedriges Niveau
- IRs niedriger Ebene haben oft eine fast eins-zu-eins-Beziehung mit dem zu erzeugenden Maschinencode: jeder Pseudobefehl (oder Knoten) in dem IR repräsentiert einen Maschinencodebefehl. Low-Level-IRs sind daher oft mehr oder weniger maschinenspezifisch. Ein Low-Level-IR eignet sich gut für maschinenspezifische Guckloch-Optimierungen.
Andere Anwendungen
Nicht nur Compiler und Interpreter verwenden interne Repräsentationen. Ein Beispiel für ein anderes Programm, das eine IR verwendet, ist das Webbrowser. Nach einem Browser de HTML und andere Inhalte von einer Webseite, wird sie in eine IR umgewandelt, bevor sie auf dem Bildschirm angezeigt wird.
Quellen, Anmerkungen und/oder Verweise
|
| Compiler | ||||||
|---|---|---|---|---|---|---|
|