Wie funktioniert ein Interpreter / Compiler? Was ist der Unterschied zwischen Interpreter und Compiler?
Wie funktioniert ein Interpreter / Compiler? Was ist der Unterschied zwischen Interpreter und Compiler?
Antworten:
Compiler
Compiler waren die ersten Übersetzer, die geschrieben wurden. Die Idee ist einfach: Sie schreiben das Programm und übergeben es dem Compiler, der es übersetzt. Dann führen Sie das Ergebnis aus.
Dolmetscher
Ein Interpreter ist auch ein Programm, das eine Hochsprache in eine Niedrigsprache übersetzt, dies jedoch zum Zeitpunkt der Programmausführung. Sie schreiben das Programm mit einem Texteditor oder ähnlichem und weisen den Interpreter an, das Programm auszuführen. Es nimmt das Programm zeilenweise und übersetzt jede Zeile, bevor es ausgeführt wird: Es übersetzt die erste Zeile und führt sie aus, übersetzt dann die zweite Zeile und führt sie aus usw.
Compiler-Eigenschaften:
Dolmetschereigenschaften:
Ein S -> T-Übersetzer akzeptiert Code, der in der Ausgangssprache S ausgedrückt wird, und übersetzt ihn in äquivalenten Code, der in einer anderen (Ziel-) Sprache T ausgedrückt wird.
Beispiele für Übersetzer:
Ein S-Interpreter akzeptiert Code, der in der Sprache S ausgedrückt wird, und führt diesen Code sofort aus. Es funktioniert durch Abrufen, Analysieren und Ausführen jeweils eines Befehls.
Großartig, wenn der Benutzer Anweisungen interaktiv eingibt (denken Sie an Python) und die Ausgabe erhalten möchte, bevor Sie die nächste Anweisung eingeben. Auch nützlich, wenn das Programm nur einmal ausgeführt werden soll oder portabel sein muss.
Verhalten
Ein Compiler übersetzt Quellcode in Maschinencode, führt jedoch den Quell- oder Objektcode nicht aus.
Ein Interpreter führt den Quellcode einzeln aus, übersetzt den Quellcode jedoch nicht.
Performance
Interpretierende Compiler
Ein interpretierender Compiler ist ein guter Kompromiss zwischen Compilern und Interpreten. Es übersetzt das Quellprogramm in Code der virtuellen Maschine, der dann interpretiert wird.
Ein interpretierender Compiler kombiniert schnelle Übersetzung mit mäßig schneller Ausführung, vorausgesetzt:
Beispiel: JDK bietet einen interpretierenden Compiler für Java.
Der Compiler wandelt den Quellcode in einer Computersprache in eine andere um.
Der Interpreter führt den Quellcode direkt aus (normalerweise in seiner eigenen virtuellen Maschine).
(Quelle: answers.com )
Im Allgemeinen ist Dolmetscher leistungsintensiv.
Was ist der Unterschied zwischen Interpreter und Compiler?
Der Compiler scannt zuerst das gesamte Programm und übersetzt es dann in Maschinencode, der vom Computerprozessor ausgeführt wird.
Der Interpreter übersetzt eine Anweisung in die Maschinensprache, führt sie aus und fährt mit der nächsten Anweisung fort.
Beispiel: Der Compiler gibt fast alle Fehler auf einmal aus, aber der Interpreter wird ausgeführt, bis die Anweisung, die Sie falsch geschrieben haben, angezeigt wird
Wie funktioniert ein Interpreter / Compiler?
Der Unterschied zu ihrer Funktionsweise
F: Wofür werden Compiler und Interpreter verwendet?
A: Die meisten Programme sind in Hochsprachen (c #, java ...) geschrieben. Hochsprachen enthalten verständliche Wörter und Sätze. Auf der anderen Seite versteht der Computer (als ich diesen Artikel schrieb) den Maschinencode, der 0 und 1 ist, auch bekannt als Binär- / Maschinencode. Daher müssen wir den High-Level-Code in Quellcode konvertieren, der (Maschinencode / Binär) ist. Daher das Wort konvertieren.
Wir schließen daraus, dass ein Compiler / Interpreter-Job darin besteht, übergeordneten Code in Maschinencode zu übersetzen.
Beide haben jedoch unterschiedliche Möglichkeiten, den Code zu übersetzen
Unterschied:
Compiler:
konvertiert den Quellcode in eine Art Zwischenform. Bei statischer Sprache konvertiert ein Compiler normalerweise den Quellcode in eine 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 (Suffix .o oder .obj) gespeichert wird normalerweise), dann wird der Linker aufgerufen, um die Objektdatei (en) mit der ausführbaren Binärdatei zu verknüpfen. Es ist auch üblich, diesen gesamten Prozess des Kompilierens, Zusammenstellens und Verknüpfen als Kompilieren zu bezeichnen. Sie können gcc also als Compiler bezeichnen, aber es ruft tatsächlich cc1 auf, den zu kompilierenden Compiler, den zu montierenden Assembler und den zu verknüpfenden Linker.
Dolmetscher:
Sprache, die eine so genannte Bytecode-Zwischenform hat, der Quellcode wird zuerst in Bytecode konvertiert, dieser Prozess kann als Kompilieren bezeichnet werden, javac dient als Beispiel. Bytecode kann nicht auf Host-Computern ausgeführt werden. Es wird ein Programm benötigt, das aus Sicht des Betriebssystems der Prozess ist. Um den Bytecode auf dem Host-Computer zu interpretieren, wird dieses Programm als Interpreter bezeichnet. Denken Sie an Java. Einige Sprachen, wie z. B. Python, erledigen die Kompilierungs- und Interpretationsarbeit mit einer einzigen
- beide von: https://www.quora.com/Was- sind- die-Unterschiede- zwischen-einem- Compiler-einem-Interpreter-und-einem-Assembler-Bereitstellen von Beispielen
Vergleichen
Dolmetscher
- Die Analyse des Quellcodes nimmt weniger Zeit in Anspruch, die Gesamtausführungszeit ist jedoch langsamer.
- Es wird kein Zwischenobjektcode generiert, daher sind sie speichereffizient .
- Setzt die Übersetzung des Programms fort, bis der erste Fehler auftritt. In diesem Fall wird es gestoppt. Daher ist das Debuggen einfach.
Compiler
- Die Analyse des Quellcodes nimmt viel Zeit in Anspruch, die Gesamtausführungszeit ist jedoch vergleichsweise schneller.
- Erzeugt einen Zwischenobjektcode, der eine weitere 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 schwierig.
- von: https://www.programiz.com/article/difference-compiler-interpreter
Beispiele mit Sprachen
Interpretiert
zusammengestellt
Compiler - Ein Compiler übersetzt eine Ausgangssprache in eine Zielsprache. Dann nimmt die Zielsprache Eingabe und gibt Ausgabe.
Der Compiler erzeugt einen Zielcode durch Kompilieren des Quellcodes
dann nimmt der Zielcode die Eingabe entgegen und gibt die Ausgabe aus
Interpreter - Anstatt einen Zielcode zu generieren, scheint der Interpreter die Eingabe direkt zusammen mit dem Quellcode zu übernehmen und gibt die Ausgabe aus.
Der Interpreter ordnet die Eingabe der Ausgabe mit dem Quellprogramm zu
Dann ist das vom Compiler erstellte maschinensprachliche Programm viel schneller als der Interpreter beim Zuordnen von Eingaben zu Ausgaben. Da der Interpreter das Quellprogramm zeilenweise ausführt, bietet er eine bessere Fehlerdiagnose als der Compiler.
Referenz - Compiler: Prinzipien, Techniken und Werkzeuge von Aho alias das Drachenbuch
Was ist der Unterschied zwischen Interpreter und Compiler?
Um es direkt und intuitiv auszudrücken:
Der Compiler übersetzt den vom Menschen lesbaren Quellcode in Maschinencode, den der Computer lesen und ausführen kann.
Interpreter gibt vor, ein Computer zu sein oder simuliert ihn, um den Quellcode direkt zu lesen und auszuführen.
Schauen Sie sich das PLAI- Buch an, es ist das beste Intro zur Verwirklichung der dymanischen Sprache, das ich je gefunden habe:
Programmiersprachen: Anwendung und Interpretation (c) Shriram Krishnamurthi
In diesem Buch geht es darum, Interpreter für dynamische Sprache in Schema (dr.Racket) zu schreiben. Mit ihm können Sie Ihren eigenen Interpreter für jede Sprache schreiben und einige Tipps zu OOP von hinzufügen
und SmallTalk und SOM: Simple Object Machine:
Alle modernen Interpreter enthalten Compiler im Inneren: Kompilieren von Highlevel-Elementen in einfachen, aber portablen Bytecode oder Verwenden von JIT zum Kompilieren in Maschinencode in RAM.
PS: Wenn jemand ein SmallTalk-System auf Python schreiben möchte, notiere mich bitte.