Kommentare

  • Zu breit, zumindest die " Wie funktioniert es " Teil. Zu diesem Thema sind ganze Bücher geschrieben.
  • en.wikipedia.org/wiki/Compiler wäre der Wikipedia-Link, der trivial ist Finden Sie, was genau fragen Sie sich? Die Frage ist breit genug, dass ich ' versucht wäre, die intelligente Antwort von " zu geben. Compiler übersetzen Code von einer Sprache in eine andere , ", da dies die allgemeine Idee ist, die viele Nuancen enthält, sobald man sich anschaut, was das wirklich bedeutet.
  • Ja und ich denke Es wurde ziemlich gut beantwortet.
  • Jede Erklärung, wie ein Compiler funktioniert, ist entweder zu umfassend oder zu kompliziert. ' ist ein kompliziertes Thema, und die Compiler-Kurse waren die schwierigsten Computer-Kurse, die ich je besucht habe.
  • @David Natürlich sind Compiler kompliziert, und Sie können nicht Erklären Sie hier alle Details, wie sie funktionieren. Ich bin mir jedoch sicher, dass Sie vor dem Besuch Ihres Compilerkurses ein grundlegendes Verständnis darüber hatten, was ein Compiler ist oder wie er funktioniert.

Antwort

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 (zB 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 für Menschen 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 erneut, dass dies eine sehr kurze Beschreibung ist. Moderne Compiler sind sehr intelligent und folglich sehr kompliziert.

Kommentare

  • Tatsächlich transformiert es eine Sprache in eine andere. Der frühe C ++ – Compiler wurde nach C kompiliert. Gleiches gilt für den Vala-Compiler. Der Java-Compiler wird in Bytecode kompiliert, der nicht ' ohne JVM ' s JIT-Compiler ausführbar ist.
  • @deadalnix IMHO Der Punkt ist, dass Sie von nicht ausführbarem Code zu ausführbarem Code wechseln. Ich würde argumentieren, dass C-Front kein Compiler war, sondern ein Front-End für den C-Compiler. Oder eine Phase im Kompilierungsprozess, wenn Sie so wollen. Virtuelle Maschinen verwischen die Grenze zwischen " ausführbarer Datei " und " nicht ausführbarer " natürlich. Hier würde ich einfach ausführbaren Code als das betrachten, was in die virtuelle Maschine eingeht, wie den Bytecode, und alles, was in der VM vor sich geht, wie JIT, abstrahieren.
  • @Dima, es ist nicht ' muss nicht von nicht ausführbarem Code zu ausführbarem Code sein. Beispielsweise können Sie JVM-Bytecode nicht direkt auf Windows-Computern ausführen.
  • @Thorbj ø rn Ravn Andersen: Der Bytecode kann jedoch von der JVM ausgeführt werden. Ist ' nicht der springende Punkt einer " virtuellen Maschine ", um wie eine echte auszusehen Maschine zum Programmierer?
  • Ich würde argumentieren, dass traditionell ein Compiler ein Programm von einem für Menschen lesbaren Format in ein maschinenlesbares Format konvertierte, genau wie Dima sagte. Variationen wie Cfront-Konvertierung von C ++ in C oder Javac-Konvertierung von Java in Bytecode sind fortgeschrittenere Themen, die wahrscheinlich erst nach der Erläuterung des grundlegenden, traditionellen Konzepts für jemanden, der mit diesem Thema nicht vertraut ist, belassen werden sollten h2> Antwort

    Ein Compiler ist ein Computerprogramm (oder eine Reihe von Anweisungen), das in einer Programmiersprache (der Quellsprache) geschriebenen Quellcode in eine andere Computersprache (die Zielsprache, häufig mit einer binären Form (Objektcode). 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. Bestimmen 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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.