Phase vs Pass im Compiler
Im Allgemeinen ist der Compiler ein Computerprogramm, das ein in einer Sprache geschriebenes Programm, das als Ausgangssprache bezeichnet wird, liest und in eine andere Sprache übersetzt, die als Zielsprache bezeichnet wird. Traditionell war die Ausgangssprache eine Hochsprache wie C ++ und die Zielsprache eine Niedrigsprache wie Assemblersprache. Im Allgemeinen können Compiler als Übersetzer angesehen werden, die von einer Sprache in eine andere übersetzen. Pass und Phase sind zwei Begriffe, die häufig bei Compilern verwendet werden. Die Anzahl der Durchgänge eines Compilers gibt an, wie oft er die Quelle (oder eine Form der Darstellung davon) durchläuft. Ein Compiler wird zur Vereinfachung der Konstruktion in Teile zerlegt. Phase wird häufig verwendet, um einen solchen einzelnen unabhängigen Teil eines Compilers aufzurufen.
Was ist ein Pass in einem Compiler?
Eine Standardmethode zum Klassifizieren von Compilern ist die Anzahl der "Durchgänge". Normalerweise ist das Kompilieren ein relativ ressourcenintensiver Prozess, und anfangs hatten die Computer nicht genügend Speicher, um ein solches Programm aufzunehmen, das die gesamte Aufgabe erledigt hat. Aufgrund dieser Einschränkung der Hardwareressourcen in frühen Computern wurden Compiler in kleinere Unterprogramme unterteilt, die ihre Teilaufgabe erledigten, indem sie den Quellcode durchgingen (die Quelle oder eine andere Form davon „passierten“) und eine Analyse durchführten, Transformationen und Übersetzungsaufgaben getrennt. Abhängig von dieser Klassifizierung werden Compiler als One-Pass- oder Multi-Pass-Compiler identifiziert.
Wie der Name schon sagt, werden One-Pass-Compiler in einem einzigen Durchgang kompiliert. Es ist einfacher, einen One-Pass-Compiler zu schreiben, und sie arbeiten auch schneller als Multi-Pass-Compiler. Daher wurden Sprachen auch zu der Zeit, als Sie Ressourcenbeschränkungen hatten, so konzipiert, dass sie in einem Durchgang kompiliert werden konnten (z. B. Pascal). Andererseits besteht ein typischer Multi-Pass-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. Es konvertiert die Token-Zeichenfolge in einen Analysebaum (oder einen abstrakten Syntaxbaum), der die syntaktische Struktur des Programms erfasst. Die nächste Stufe ist die, die die Semantik der syntaktischen Struktur interpretiert. Darauf folgen die Phasen der Codeoptimierung und die letzte Phase der Codegenerierung.
Was ist eine Phase in einem Compiler?
Der Begriff Phase taucht häufig auf, wenn Sie über die Compilerkonstruktion sprechen. Anfänglich waren Compiler alle einfachen Teile einer einzelnen monolithischen Software, die von einer Person für die Zusammenstellung einer einfachen Sprache geschrieben wurde. Wenn der Quellcode der zu übersetzenden Sprache jedoch komplex und umfangreich 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 wird die Modularität und Wiederverwendung verbessert, indem Phasen durch verbesserte ersetzt oder zusätzliche Phasen (z. B. weitere Optimierungen) zum Compiler hinzugefügt werden können. Der Prozess der Aufteilung der Zusammenstellung in Phasen wurde vom PQCC (Production Quality Compiler-Compiler Project) an der Carnegie Melon University eingeführt. Sie führten die Begriffe Frontend, Middle End und Backend ein. Die meisten Compiler haben mindestens zwei Phasen. Normalerweise kapseln Backend und Frontend diese Phasen.
Was ist der Unterschied zwischen Phase und Pass im Compiler?
Phase und Pass sind zwei Begriffe, die im Bereich der Compiler verwendet werden. Ein Pass ist ein einzelnes Mal, wenn der Compiler den Quellcode oder eine andere Darstellung davon durchläuft (durchläuft). Normalerweise haben die meisten Compiler mindestens zwei Phasen, die als Front-End und Back-End bezeichnet werden, während sie entweder One-Pass oder Multi-Pass sein können. Phase wird verwendet, um Compiler gemäß der Konstruktion zu klassifizieren, während Pass verwendet wird, um Compiler nach ihrer Funktionsweise zu klassifizieren.