Unterschied zwischen Phase und Pass im Compiler

Anonim

Phase vs Pass im Compiler

Im Allgemeinen ist der Compiler ein Computerprogramm, Programm, das in einer Sprache geschrieben ist, die als Quellsprache bezeichnet wird, und übersetzt sie in eine andere Sprache, die als Zielsprache bezeichnet wird. Herkömmlicherweise war Quellsprache eine Hochsprache wie C ++, und die Zielsprache war eine Niedrigsprache wie die Assemblersprache. So können Compiler generell als Übersetzer gesehen werden, die von einer Sprache in eine andere übersetzen. Pass und Phase sind zwei Begriffe, die oft mit Compilern verwendet werden. Die Anzahl der Durchläufe eines Compilers ist die Anzahl der Übergänge über die Quelle (oder irgendeine Darstellungsform davon). Ein Compiler wird zur Erleichterung der Konstruktion in Teile zerlegt. Die Phase wird oft verwendet, um solch einen einzelnen 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 halten, das den kompletten Job erledigt hat. Aufgrund dieser Beschränkung der Hardwareressourcen in frühen Computern wurden die Compiler in kleinere Unterprogramme zerlegt, die ihren Teiljob durchlaufen haben, indem sie den Quellcode überschritten (über die Quelle oder eine andere Form davon übergeben) und eine Analyse durchgeführt haben, Transformationen und Übersetzungsaufgaben getrennt. Abhängig von dieser Klassifizierung werden Compiler als Ein-Durchlauf- oder Mehrfach-Durchlauf-Compiler identifiziert.

Wie der Name schon sagt, werden Compiler mit einem Durchgang in einem einzigen Durchgang kompiliert. Es ist einfacher, einen Ein-Pass-Compiler zu schreiben, und sie führen auch schneller als Mehrfach-Compiler durch. Daher wurden die Sprachen so gestaltet, dass sie in einem Ein-Durchlauf (zum Beispiel Pascal) kompiliert werden konnten, selbst wenn Ressourcenbeschränkungen vorhanden waren. Auf der anderen Seite besteht ein typischer Multipass-Compiler aus mehreren Hauptstufen. Die erste Stufe ist der Scanner (auch bekannt als der lexikalische Analysator). Scanner liest das Programm und konvertiert es in eine Zeichenfolge von Tokens. Die zweite Stufe ist der Parser. Es konvertiert die Zeichenkette in einen Syntaxbaum (oder einen abstrakten Syntaxbaum), der die syntaktische Struktur des Programms erfasst. Die nächste Stufe ist die, die die Semantik der syntaktischen Struktur interpretiert. Die Codeoptimierungsstufen und die endgültige Codeerzeugungsstufe folgen diesem.

Was ist eine Phase in einem Compiler?

Der Begriff Phase kommt oft vor, wenn Sie über den Compileraufbau sprechen. Zunächst waren Compiler alle einfachen Teile einer einzigen monolithischen Software, die von einer Person für die Zusammenstellung einer einfachen Sprache geschrieben wurde. Wenn jedoch der Quellcode der zu übersetzenden Sprache komplex und groß wird, wurde der Compiler in mehrere (relativ unabhängige) Phasen unterteilt.Der Vorteil verschiedener 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 etwa weitere Optimierungen) zu ersetzen, die dem Compiler hinzugefügt werden sollen. Der Prozess der Aufteilung der Kompilierung in Phasen wurde vom PQCC (Production Quality Compiler-Compiler-Projekt) an der Carnegie Melon University eingeführt. Sie führten die Begriffe Vorderende, Mittelende und Hinterende ein. Die meisten Compiler haben mindestens zwei Phasen. Normalerweise kapseln Back-End und Front-End diese Phasen ein.

Was ist der Unterschied zwischen Phase und Pass im Compiler?

Phase und Pass sind zwei Begriffe, die im Compilerbereich verwendet werden. Ein Durchlauf ist ein einziger Zeitpunkt, zu dem der Compiler den Quellcode oder eine andere Repräsentation davon übergibt (durchläuft). Normalerweise haben die meisten Compiler mindestens zwei Phasen, die Front-End und Back-End genannt werden, während sie entweder ein-pass oder multi-pass sein könnten. Phase wird verwendet, um Compiler entsprechend der Konstruktion zu klassifizieren, während Pass verwendet wird, um Compiler entsprechend ihrer Funktionsweise zu klassifizieren.