Unterschied zwischen Phase und Pass im Compiler

Unterschied zwischen Phase und Pass im Compiler

Phase vs Pass in Compiler

Im Allgemeinen ist Compiler ein Computerprogramm, das ein in einer Sprache geschriebenes Programm liest, das als Quellsprache bezeichnet wird und es in eine andere Sprache übersetzt, die als Zielsprache bezeichnet wird. Traditionell war Quellsprache eine Sprache auf hoher Ebene wie C ++ und Zielsprache war eine Sprache auf niedriger Ebene wie die Versammlungssprache. Im Allgemeinen können Compiler als Übersetzer angesehen werden, die von einer Sprache in eine andere übersetzt werden. Pass und Phase sind zwei Begriffe, die häufig mit Compilern verwendet werden. Anzahl der Durchgänge eines Compiler ist die Häufigkeit, mit der er über die Quelle geht (oder eine Form der Darstellung davon). Ein Compiler wird ausgebaut. Die Phase wird oft verwendet, um einen so unabhängigen Teil eines Compilers zu bezeichnen.

Was ist ein Pass in einem Compiler??

Eine Standardmethode zur Klassifizierung von Compilern ist die Anzahl der „Pässe“. Normalerweise ist das Kompilieren ein relativ ressourcenintensiver Prozess, und zunächst hatten Computer nicht genügend Speicher, um ein solches Programm zu halten, das den vollständigen Job gemacht hat. Aufgrund dieser Begrenzung von Hardware -Ressourcen in frühen Computern wurden Compiler in kleinere Sub -Programme unterteilt, die seinen teilweisen Auftrag durch den Quellcode (ein „Durchgang“ über die Quelle oder eine andere Form des IT erstellt haben) und eine Analyse durchgeführt , Transformationen und Übersetzungsaufgaben getrennt. Abhängig von dieser Klassifizierung werden Compiler als Einpass- oder Multi-Pass-Compiler eingeleitet.

Wie der Name schon sagt, kompilieren Ein-Pass-Compiler in einem einzigen Pass. Es ist einfacher, einen Ein-Pass-Compiler zu schreiben, und sie funktionieren auch schneller als Multi-Pass-Compiler. Daher wurden auch zu der Zeit, als Sie Ressourcenbeschränkungen hatten, Sprachen so konzipiert, dass sie in einem Eingang zusammengestellt werden konnten (e.G. Pascal). Andererseits besteht ein typischer Mehrkassen-Compiler aus mehreren Hauptstadien. Die erste Stufe ist der Scanner (auch als Lexikalanalysator bekannt). Der Scanner liest das Programm und wandelt es in eine Reihe von Token um. Die zweite Stufe ist der Parser. Es wandelt die Tokenkette in einen Parsebaum (oder einen abstrakten Syntaxbaum) um, der die syntaktische Struktur des Programms erfasst. In der nächsten Stufe interpretiert die Semantik der syntaktischen Struktur. Die Code -Optimierungen und die Phase der endgültigen Codegenerierung folgen diesem.

Was ist eine Phase in einem Compiler?

Die Begriffsphase erscheint oft, wenn Sie über Compiler Construction sprechen. Zunächst waren Compiler alle einfachen einzelnen, monolithischen Software, die von einer Person zur Zusammenstellung einer einfachen Sprache geschrieben wurden. Wenn der Quellcode der zu übersetzenden Sprache komplex und groß wird, wurde der Compiler in mehrere (relativ unabhängige) Phasen unterteilt. Der Vorteil unterschiedlicher Phasen besteht darin, dass die Entwicklung des Compilers auf ein Team von Entwicklern verteilt werden kann. Darüber hinaus verbessert es die Modularität und Wiederverwendung, indem Phasen durch verbesserte oder zusätzliche Phasen (z. B. weitere Optimierungen) dem Compiler hinzugefügt werden können. Der Prozess der Aufteilung der Zusammenstellung in Phasen wurde vom PQCC (Produktionsqualität Compiler-Compiler-Projekt) an der Carnegie Melon University eingeführt. Sie stellten die Begriffe vor dem Frontend, das Mittelende und das hintere Ende ein. Die meisten Compiler haben mindestens zwei Phasen. Aber normalerweise verkapulieren das hintere Ende und das Frontend diese Phasen.

Was ist der Unterschied zwischen Phase und Pass im Compiler?

Phase und Pass sind zwei Begriffe, die im Bereich von Compilern verwendet werden. Ein Pass ist ein einzelnes Mal, dass der Compiler den Quellencode oder eine andere Darstellung davon übergeht. In der Regel haben die meisten Compiler mindestens zwei Phasen, die als Frontend- und hinterher-Ende bezeichnet werden, während sie entweder ein Pass oder ein Multi-Pass sein könnten. Phase wird verwendet, um Compiler nach dem Bau zu klassifizieren, während Pass verwendet wird, um Compiler nach ihrer Arbeit zu klassifizieren.