it-swarm.dev

Wie funktioniert ein Compiler?

Hinweis: Ich bin überrascht, dass dies noch nicht gefragt wurde, und wenn ja, konnte ich es bei einer Suche nicht finden.

Ich war auf unzähligen Websites, habe unzählige Artikel gelesen und unzählige Erklärungen gehört. Die meisten von ihnen waren gut, aber sie waren alle entweder zu breit oder zu kompliziert oder einfach nur schlecht. Meine Frage ist also, wie funktioniert ein Compiler?

Wenn dies eine schwierige, umfassende Frage ist, sagen Sie es mir bitte. Wenn nicht, beantworten Sie bitte die Frage.

17
Dynamic

Ein Compiler ist ein Programm, das den Quellcode für ein anderes Programm aus einer Programmiersprache in ausführbaren Code übersetzt.

Der Quellcode ist normalerweise in einer höheren Programmiersprache (z. B. Pascal, C, C++, Java, Perl, C # usw.). Der ausführbare Code kann eine Folge von Maschinenbefehlen sein, die direkt von der CPU ausgeführt werden können, oder es kann sich um eine Zwischendarstellung handeln, die von einer virtuellen Maschine interpretiert wird (z. B. Java Bytecode).

Kurz gesagt, ein Compiler konvertiert ein Programm von einem lesbaren Format in ein maschinenlesbares Format.

Die Funktionsweise eines Compilers ist in der Tat kompliziert. Es gibt Bücher und Universitätskurse zu diesem Thema. Ich werde versuchen, die Hauptphasen des Prozesses kurz zu skizzieren, aber dies wird eine sehr flüchtige Übersicht sein.

  1. Lexing - Teilen Sie den Text des Programms in "Token" auf. Die Token sind die "Wörter" der Programmiersprache, z. B. Bezeichner (Schlüsselwörter, Variablennamen, Funktionsnamen usw.) oder Operatoren (=, *, & usw.).
  2. Parsing - Konvertiert die Folge von Token in einen Analysebaum, bei dem es sich um eine Datenstruktur handelt, die verschiedene Sprachkonstrukte darstellt: Typdeklarationen, Variablendeklarationen, Funktionsdefinitionen, Schleifen, Bedingungen, Ausdrücke usw.
  3. Optimierung - Auswerten konstanter Ausdrücke, Optimieren nicht verwendeter Variablen oder nicht erreichbaren Codes, Abrollen von Schleifen, wenn möglich usw.
  4. Übersetzen Sie den Analysebaum in Maschinenanweisungen (oder JVM-Bytecode).

Ich betone noch einmal, dass dies eine sehr kurze Beschreibung ist. Moderne Compiler sind sehr intelligent und folglich sehr kompliziert.

24
Dima

Ein Compiler ist ein Computerprogramm (oder eine Reihe von Anweisungen), das in einer Programmiersprache (der Quellsprache) geschriebenen Quellcode in eine andere Computersprache (die Zielsprache, die häufig eine als Objektcode bekannte binäre Form aufweist) umwandelt. Der häufigste Grund für die Umwandlung von Quellcode ist die Erstellung eines ausführbaren Programms.

Compiler verbinden Quellprogramme in Hochsprachen mit der zugrunde liegenden Hardware. Ein Compiler benötigt:

  1. Feststellung der Richtigkeit der Syntax von Programmen
  2. Generieren des richtigen und effizienten Objektcodes
  3. Laufzeitorganisation
  4. Formatieren der Ausgabe gemäß Assembler- und/oder Linker-Konventionen.
5
Mario Stylianou