wake-up-neo.net

Wie funktioniert ein Interpreter/Compiler?

Wie funktioniert ein Interpreter/Compiler? Was ist der Unterschied zwischen Interpreter und Compiler?.

65
developer

Compiler

Compiler waren die erste Art von Übersetzerprogramm, das geschrieben wurde. Das Idee ist einfach: Sie schreiben das Programm, dann übergeben Sie es dem Compiler, der übersetzt es. Dann führen Sie das Ergebnis .__ aus.

Dolmetscher

Ein Interpreter ist auch ein Programm, das übersetzt eine Hochsprache in eine untergeordnete Ebene, aber es tut es am Sobald das Programm ausgeführt wird. Du schreibst das Programm mit einem Texteditor oder etwas ähnliches und dann anweisen der Interpreter, um das Programm auszuführen. Es Nimmt das Programm jeweils eine Zeile Und übersetzt jede Zeile, bevor Es ausgeführt wird: Es übersetzt die erste Zeile und führt sie aus, dann übersetzt sie die Zweite Zeile und führt sie aus es etc.

Compiler-Eigenschaften:

  • verbringt viel Zeit damit, das Programm zu analysieren und zu bearbeiten
  • die resultierende ausführbare Datei ist eine Form .__ des maschinenspezifischen Binärcodes
  • die Computerhardware interpretiert .__ (führt den resultierenden Code aus)
  • die Programmausführung ist schnell

Dolmetschermerkmale:

  • es wird relativ wenig Zeit aufgewendet. __ das Programm zu analysieren und zu bearbeiten
  • der resultierende Code ist eine Art Zwischencode
  • der resultierende Code wird von einem anderen Programm interpretiert
  • die Programmausführung ist relativ langsam
53
Adriaan Stander

Was ist ein Übersetzer?

Ein S -> T translator akzeptiert in Quellsprache S ausgedrückten Code und übersetzt ihn in äquivalenten Code, der in einer anderen (Ziel-) Sprache T ausgedrückt wird.

Beispiele für Übersetzer:

  • Compiler - übersetzt Code auf hoher Ebene in Code auf niedriger Ebene, z. Java -> JVM
  • Assembler - übersetzt Assembler-Code in Maschinencode, z. x86as -> x86
  • High-Level-Übersetzer - übersetzt Code von einem PL in einen anderen, z. Java -> C
  • Decompiler - übersetzt Code auf niedriger Ebene in Code auf hoher Ebene, z. Java JVM-Bytecode -> Java

Was ist ein Dolmetscher?

Ein S-Interpreter akzeptiert in Sprache S ausgedrückten Code und führt diesen Code sofort aus. Dazu werden jeweils eine Anweisung abgerufen, analysiert und ausgeführt.

Großartig, wenn der Benutzer interaktiv Anweisungen eingibt (denken Sie an Python) und die Ausgabe erhalten möchten, bevor Sie die nächste Anweisung eingeben. Auch nützlich, wenn das Programm nur einmal ausgeführt werden soll oder tragbar sein muss. 

  • Das Interpretieren eines Programms ist viel langsamer als das Ausführen von nativem Maschinencode
  • Das Interpretieren einer Hochsprache ist ~ 100 Mal langsamer
  • Das Interpretieren einer Sprache auf mittlerem Niveau (wie JVM-Bytecode) ist ~ 10 langsamer
  • Wird ein Befehl wiederholt aufgerufen, wird er wiederholt analysiert - zeitaufwendig!
  • Code muss nicht kompiliert werden

Unterschiede

Verhalten

  • Ein Compiler übersetzt Quellcode in Maschinencode, führt jedoch nicht den Quell- oder Objektcode aus.

  • Ein Interpreter führt den Quellcode jeweils einzeln aus, übersetzt den Quellcode jedoch nicht.

Leistung

  • Ein Compiler benötigt ziemlich viel Zeit, um das Quellprogramm in nativen Maschinencode zu übersetzen, die anschließende Ausführung ist jedoch schnell
  • Ein Interpreter beginnt sofort mit der Ausführung des Quellprogramms, die Ausführung ist jedoch langsam

Interpretive Compiler

Ein interpretierender Compiler ist ein guter Kompromiss zwischen Compilern und Dolmetschern. Es übersetzt das Quellprogramm in den Code der virtuellen Maschine, der dann interpretiert wird.

Ein interpretierender Compiler kombiniert schnelle Übersetzung mit mäßig schneller Ausführung, vorausgesetzt dass:

  • VM-Code ist niedriger als die Quellsprache, jedoch höher als der native Maschinencode
  • VM-Anweisungen haben einfache Formate (können schnell von einem Interpreter analysiert werden)

Beispiel: JDK bietet einen interpretativen Compiler für Java.

30
martynas

Compiler , wandelt Quellcode von einer Computersprache in eine andere um. 

Interpreter führt den Quellcode direkt aus (normalerweise innerhalb der eigenen virtuellen Maschine).

alt text http://content.answers.com/main/content/img/CDE/COMPILE.GIF

Im Allgemeinen ist ein Dolmetscher eine kostenintensive Leistung.

19
KMån

Was ist der Unterschied zwischen Interpreter und Compiler?

 enter image description here

Der Compiler scannt zuerst das gesamte Programm und übersetzt es anschließend in Maschinencode, der vom Computerprozessor ausgeführt wird. 

Der Interpreters übersetzt eine Anweisung in Maschinensprache, führt sie aus und fährt mit der nächsten Anweisung fort.

Wie funktioniert ein Interpreter/Compiler? 

 enter image description here

  • Im Gegensatz zu kompilierten Sprachen, die vorab in Maschinensprache übersetzt werden (rechts). 
  • Interpretierte Sprachen werden zur Laufzeit übersetzt. 
  • dBASE und BASIC Interpreter (Mitte) übersetzen den ursprünglichen Quellcode. 
  • Java und Visual Basic (links) Interpreter übersetzen Bytecode, eine Zwischensprache, die aus dem ursprünglichen Quellcode kompiliert wurde. 

Quelle

16
Premraj

Der Unterschied zu der Funktionsweise 

F: _ ​​Wofür werden Compiler und Interpreter verwendet?

A: Die meisten Programme sind in Hochsprachen (c #, Java ...) geschrieben. Hochsprachen sind verständliche Wörter und Ausdrücke. Andererseits verstehen Computer (zum Zeitpunkt, als ich diesen Artikel geschrieben habe) Maschinencode, der aus 0 und 1 besteht, der einzige aka Binary/Machine Code. Daher müssen wir den High-Level-Code in den Quellcode (Maschinencode/Binär) konvertieren. Daher das Wort konvertieren.

Wir schließen daraus, dass ein Compiler/Interpreter-Job darin besteht, Code auf hoher Ebene in Maschinencode zu übersetzen. 

Beide haben jedoch eine andere Art, den Code zu "übersetzen"

Unterschied: 

Compiler:

konvertiert den Quellcode in eine Art Zwischenform. Bei einer statischen Sprache konvertiert ein Compiler den Quellcode normalerweise in Assembly, die normalerweise nicht auf der Festplatte gespeichert wurde. Anschließend wird der Assembler aufgerufen, um die Assembly in Binärcode zu konvertieren, der normalerweise als Objektdatei (.o oder .obj-Suffix) gespeichert wird normalerweise), dann wird der Linker aufgerufen, um die Objektdatei (en) mit der binären ausführbaren Datei zu verknüpfen. Es ist auch üblich, sich auf diesen gesamten Prozess des Kompilierens, Assemblierens und Verlinkens als Kompilieren zu beziehen. Sie können gcc also einen Compiler nennen, aber es ruft tatsächlich cc1 auf, das ist der Compiler zum Kompilieren, da der Assembler der Assembler ist, ld der Linker, der verlinkt werden soll.

Dolmetscher:

sprache, die ein sogenanntes Bytecode-Zwischenformat hat, wird der Quellcode zuerst in Bytecode konvertiert. Dieser Prozess kann als Kompilieren bezeichnet werden, javac dient als Beispiel . Bytecode kann nicht auf Host-Rechnern ausgeführt werden, er benötigt ein Programm, das aus Sicht des Betriebssystems tatsächlich der Prozess ist, um den Bytecode auf dem Host-Rechner zu interpretieren. Dieses Programm wird als Interpreter bezeichnet, denken Sie an Java. Einige Sprachen wie Python erledigen die Kompilierung und Interpretation mit einer einzigen

- beide von: https://www.quora.com/Was-eine-die-unterschiede-von-a-compiler-unddolmetscher-und-montagetool-zugeben-Beispiele

Vergleichen

Dolmetscher

  • Die Analyse des Quellcodes erfordert weniger Zeit, die Gesamtausführungszeit ist jedoch langsamer.
  • Es wird kein Zwischenobjektcode generiert, daher sind memory effizient.
  • Setzt das Programm so lange weiter, bis der erste Fehler erkannt wird. In diesem Fall wird es angehalten. Daher ist das Debuggen einfach.

Compiler 

  • Die Analyse des Quellcodes erfordert viel Zeit, die Gesamtausführungszeit ist jedoch vergleichsweise schneller.
  • Erzeugt einen Zwischenobjektcode, der außerdem eine Verknüpfung erfordert und daher mehr Speicher benötigt.
  • Die Fehlermeldung wird erst nach dem Scannen des gesamten Programms generiert. Daher ist das Debuggen vergleichsweise schwer.

- von: https://www.programiz.com/article/difference-compiler-interpreter

Beispiele mit Sprachen

Interpretiert

  • Python 
  • Rubin 
  • PHP
  • Java (der Allmächtige)
  • Perl 
  • R
  • Power Shell

kompiliert 

  • C
  • C++
  • C #
  • Ziel c
  • Schnell
  • Fortran 
7
user 451

Compiler - Ein Compiler übersetzt eine Quellsprache in eine Zielsprache. Dann übernimmt die Zielsprache die Eingabe und gibt die Ausgabe aus.

Compiler erzeugt einen Zielcode durch Kompilieren des Quellcodes

dann nimmt der Zielcode die Eingabe und gibt die Ausgabe aus

Dolmetscher - Anstatt einen Zielcode zu generieren, scheint der Interpreter die Eingabe direkt mit dem Quellcode aufzunehmen und gibt die Ausgabe aus.

Der Interpreter ordnet die Eingabe mithilfe des Quellprogramms der Ausgabe zu

Das vom Compiler erzeugte, auf die Maschinensprache bezogene Programm ist dann viel schneller als der Interpreter beim Zuordnen von Eingaben zu Ausgaben. Da der Interpreter jedoch das Quellprogramm Zeile für Zeile ausführt, ist die Fehlerdiagnose besser als der Compiler. 

Referenz - Compiler: Prinzipien, Techniken und Tools von Aho aka das Drachenbuch

0
vaibhaw.vipul

Was ist der Unterschied zwischen Interpreter und Compiler?.

Um es direkt und intuitiv auszudrücken:

  • Compiler übersetzt den von Menschen lesbaren Quellcode in Maschinencode, den der Computer lesen und ausführen kann. 

  • Interpreter ist das, was vorgibt zu sein oder simuliert einen Computer, um den Quellcode direkt zu lesen und auszuführen.

0
JawSaw