Phase vs. Pass im Compiler
Im Allgemeinen ist Compiler ein Computerprogramm, das ein Programm liest, das in einer Sprache geschrieben ist, die als Ausgangssprache bezeichnet wird, und es in eine andere Sprache übersetzt, die als Zielsprache bezeichnet wird. Traditionell war die Quellsprache eine Hochsprache wie C ++ und die Zielsprache eine Niedrigsprache wie die Assembler. Compiler können also im Allgemeinen als Übersetzer angesehen werden, die von einer Sprache in eine andere übersetzen. Pass und Phase sind zwei Begriffe, die bei Compilern häufig verwendet werden. Die Anzahl der Durchläufe eines Compilers gibt an, wie oft er über die Quelle (oder eine bestimmte Darstellungsform) geht. Ein Compiler ist zur Vereinfachung der Konstruktion in Teile zerlegt. Phase wird oft verwendet, um einen solchen unabhängigen Teil eines Compilers aufzurufen.
Was ist ein Pass in einem Compiler??
Eine Standardmethode zur Klassifizierung von Compilern ist die Anzahl der Durchläufe. Normalerweise ist das Kompilieren ein relativ ressourcenintensiver Prozess, und anfangs hatten Computer nicht genügend Speicher, um ein solches Programm zu speichern, das die gesamte Arbeit erledigte. Aufgrund dieser Einschränkung der Hardwareressourcen in frühen Computern wurden Compiler in kleinere Unterprogramme unterteilt, die ihre Teilaufgaben erledigten, indem sie den Quellcode durchgingen (den Quellcode oder eine andere Form davon "durchlaufen") und eine Analyse durchführen , Transformationen und Übersetzungsaufgaben getrennt. Abhängig von dieser Klassifizierung werden Compiler daher als One-Pass- oder Multi-Pass-Compiler bezeichnet.
Wie der Name vermuten lässt, kompilieren One-Pass-Compiler in einem einzigen Pass. Es ist einfacher, einen One-Pass-Compiler zu schreiben und sie sind schneller als Multipass-Compiler. Daher wurden Sprachen auch zu dem Zeitpunkt, als Sie Ressourceneinschränkungen hatten, so konzipiert, dass sie in einem Durchlauf (z. B. Pascal) kompiliert werden können. Andererseits besteht ein typischer Multipass-Compiler aus mehreren Hauptstufen. Die erste Stufe ist der Scanner (auch als lexikalischer Analysator bekannt). Der Scanner liest das Programm und konvertiert es in eine Zeichenfolge. Die zweite Stufe ist der Parser. Die Zeichenfolge wird in einen Parser-Baum (oder einen abstrakten Syntaxbaum) umgewandelt, der die syntaktische Struktur des Programms erfasst. Die nächste Stufe ist die Interpretation der Semantik der syntaktischen Struktur. Daran schließen sich die Stufen der Codeoptimierung und die abschließende Codegenerierung an.
Was ist eine Phase in einem Compiler?
Die Begriffsphase tritt häufig auf, wenn Sie über Compilerbau sprechen. Ursprünglich waren Compiler nur einfache Teile einer einzigen monolithischen Software, die von einer Person für die Erstellung einer einfachen Sprache geschrieben wurden. Wenn der Quellcode der zu übersetzenden Sprache jedoch komplex und umfangreich wird, wurde der Compiler in mehrere (relativ unabhängige) Phasen unterteilt. Der Vorteil unterschiedlicher Phasen besteht darin, dass die Entwicklung des Compilers auf ein Entwicklerteam verteilt werden kann. Darüber hinaus verbessert es die Modularität und Wiederverwendung, indem es ermöglicht wird, Phasen durch verbesserte oder zusätzliche Phasen (wie weitere Optimierungen) zum Compiler hinzuzufügen. Die Aufteilung der Kompilierung in Phasen wurde vom PQCC (Production Quality Compiler-Compiler-Projekt) der Carnegie Melon University eingeführt. Sie führten die Begriffe Front End, Middle End und Back End ein. Die meisten Compiler haben mindestens zwei Phasen. Normalerweise kapseln das Backend und das Frontend diese Phasen.
Was ist der Unterschied zwischen Phase und Pass in Compiler??
Phase und Pass sind zwei Begriffe, die im Bereich der Compiler verwendet werden. Ein Durchlauf ist ein einziges Mal, wenn der Compiler den Quellcode oder eine andere Darstellung davon durchläuft (durchläuft). In der Regel haben die meisten Compiler mindestens zwei Phasen, die als Front-End und Back-End bezeichnet werden, während sie entweder einen oder mehrere Durchgänge haben können. Phase wird verwendet, um Compiler nach der Konstruktion zu klassifizieren, während Pass verwendet wird, um Compiler nach ihrer Funktionsweise zu klassifizieren.