Was ist der Unterschied zwischen Single Pass und Multipass Compiler?

Das Hauptunterschied zwischen Single Pass und Multipass Compiler ist das Ein Single-Pass-Compiler ist ein Compiler, der den Quellcode nur einmal durch jede Compilationseinheit durchlässt, während ein Multipass-Compiler die Kompilierung in mehrere Durchläufe unterteilt, wobei jeder Durchlauf mit dem Ergebnis des vorherigen Durchlaufs fortfahren würde.

Ein Computerprogramm ist eine Reihe von Anweisungen, mit denen der Computer eine bestimmte Aufgabe ausführen kann. Normalerweise schreiben Programmierer Programme in höheren Programmiersprachen. Der Computer versteht diese Anweisungen jedoch nicht. Daher ist es notwendig, den Quellcode in einen maschinenverständlichen Maschinencode umzuwandeln. Ein Compiler ist eine Software, die Quellcode in Maschinencode umwandelt, und Single-Pass- und Multipass-Compiler sind zwei Arten von Compilern.

Wichtige Bereiche

1. Was ist ein Single Pass Compiler?
     - Definition, Funktionalität
2. Was ist ein Multipass-Compiler?
     - Definition, Funktionalität
3. Was ist der Unterschied zwischen Single Pass und Multipass Compiler?
     - Vergleich der wichtigsten Unterschiede

Schlüsselbegriffe

Single-Pass-Compiler, Multipass-Compiler

Was ist ein Single Pass Compiler?

Der Kompilierungsprozess umfasst mehrere Stufen. Ein Compiler mit einem Durchlauf führt einen einzigen Durchlauf durch den Quelltext durch, analysiert, analysiert und generiert Code nur einmal. Mit anderen Worten, es erlaubt dem Quellcode, jede Kompilierungseinheit nur einmal zu durchlaufen. Es übersetzt sofort jeden Codeabschnitt in seinen endgültigen Maschinencode. 

Abbildung 1: Compiler

Hauptstufen des Single-Pass-Compilers sind die lexikalische Analyse, die syntaktische Analyse und der Code-Generator. Zuerst scannt die lexikalische Analyse den Quellcode und teilt ihn in Token auf. Jede Programmiersprache hat eine Grammatik. Es repräsentiert die Syntax und die rechtlichen Aussagen der Sprache. Die syntaktische Analyse bestimmt dann die von der Grammatik beschriebenen Sprachkonstrukte. Schließlich generiert der Codegenerator den Zielcode. Insgesamt optimiert der Single-Pass-Compiler den Code nicht. Darüber hinaus gibt es keine Zwischencodeerzeugung.  

Was ist Multipass-Compiler?

Ein Multipass-Compiler sorgt dafür, dass der Quellcode mehrfach analysiert, analysiert, generiert usw. wird, während nach jeder Stufe ein Zwischencode generiert wird. Es wandelt das Programm schrittweise zwischen Quellcode und Maschinencode in eine oder mehrere Zwischendarstellungen um. Es verarbeitet die gesamte Übersetzungseinheit in jedem sequentiellen Durchlauf erneut.

Jeder Durchlauf übernimmt das Ergebnis des vorherigen Durchlaufs als Eingabe und erstellt eine Zwischenausgabe. Ebenso verbessert sich der Code in jedem Durchlauf, bis der endgültige Durchlauf den endgültigen Code generiert. Ein Multipass-Compiler führt zusätzliche Aufgaben aus, wie z. B. die Erzeugung von Zwischencode, die maschinenabhängige Codeoptimierung und die maschinenunabhängige Codeoptimierung.

Abbildung 2: Multipass-Compiler

Multipass-Compiler bieten mehrere Vorteile. Sie sind maschinenunabhängig und sind modular aufgebaut. Die Codegenerierung entkoppelt von den anderen Schritten der Kompilierung. Daher können die Pässe für verschiedene Maschinen oder Hardware wiederverwendet werden. Darüber hinaus steht es für komplexere und ausdrucksstärkere Sprachen.

Unterschied zwischen Single Pass und Multipass Compiler

Definition

Ein Single-Pass-Compiler ist ein Compiler-Typ, der die Komponenten jeder Compilationseinheit nur einmal durchläuft und jeden Codeabschnitt sofort in seinen endgültigen Maschinencode übersetzt. Ein Multipass-Compiler ist ein Compiler-Typ, der den Quellcode oder den abstrakten Syntaxbaum eines Programms mehrmals verarbeitet. Daher erklären diese Definitionen den Hauptunterschied zwischen Single-Pass- und Multipass-Compiler.

Geschwindigkeit

Die Geschwindigkeit ist ein wesentlicher Unterschied zwischen Single Pass und Multipass Compiler. Ein Multipass-Compiler ist langsamer als der Single-Pass-Compiler, da jeder Durchgang eine Zwischendatei liest und schreibt.

Synonyme

Ein Single-Pass-Compiler wird auch als schmaler Compiler bezeichnet, während ein Multipass-Compiler als Wide-Compiler bezeichnet wird.

Umfang

Darüber hinaus hat ein Single-Pass-Compiler einen begrenzten Gültigkeitsbereich, während ein Multipass-Compiler einen größeren Geltungsbereich hat.

Code-Optimierung

Ein weiterer Unterschied zwischen Single-Pass- und Multipass-Compiler besteht darin, dass im Single-Pass-Compiler im Gegensatz zu Multipass-Compilern, die über eine Codeoptimierung verfügen, keine Codeoptimierung erfolgt.

Zwischencodes

Zwischencodes machen auch einen Unterschied zwischen Single-Pass- und Multipass-Compiler. In Single-Pass-Compilern gibt es keine Zwischencode-Generierung. Bei Multipass-Compilern gibt es jedoch eine Zwischencode-Generierung.

Kompilierungszeit

Darüber hinaus benötigt ein Compiler für einen einzigen Durchlauf im Vergleich zu einem Multipass-Compiler eine minimale Zeit zum Kompilieren.

Speicherverbrauch

Außerdem ist der Speicherverbrauch in einem Multipass-Compiler höher als der eines Single-Pass-Compilers. Dies ist also ein weiterer Unterschied zwischen Single-Pass- und Multipass-Compiler.

Programmiersprachen

Programmiersprachen wie Pascal können mit einem Single-Pass-Compiler implementiert werden, während Programmiersprachen wie Java mit einem Multipass-Compiler implementiert werden können. Dies ist also ein weiterer Unterschied zwischen Single-Pass- und Multipass-Compiler.

Fazit

Single-Pass- und Multipass-Compiler sind zwei Arten von Compilern. Der Unterschied zwischen Single-Pass- und Multipass-Compiler besteht darin, dass ein Single-Pass-Compiler ein Compiler ist, der den Quellcode nur einmal durch jede Kompilierungseinheit leitet, während ein Multipass-Compiler die Kompilierung in mehrere Durchläufe unterteilt, wobei jeder Durchlauf das Ergebnis des vorherigen Durchlaufs fortsetzen würde.

Referenz:

1. "pass1 And 2 Compiler". Scribd, Scribd, Hier erhältlich.
2. „One-Pass-Compiler“. Wikipedia, Wikimedia Foundation, 23. März 2018, hier verfügbar.
3. „Multi-Pass-Compiler“. Wikipedia, Wikimedia Foundation, 8. Februar 2018, hier verfügbar.

Bildhöflichkeit:

1. “Compiler” von I, Surachit (CC BY-SA 3.0) über Commons Wikimedia
2. “Multi-Passcompiler” von Kenstruys - Eigene Arbeit (Public Domain) über Commons Wikimedia