# Compiler / Interpreter



## geforceeee (20. November 2008)

Hallo zusammen,
ich weiß zwar nicht, ob ich hier mit dieser Frage richtig bin, aber ich habe kein besseres Forum der PCGH extreme gefunden. Kann mir jemand den Unterschied zwischen einem Compiler, einem Interpreter und einem Parser leicht erklären. Ich kapier nämlich mal google wieder nicht 

Vielen Dank
lg, geforceeee


----------



## dot (20. November 2008)

*AW: Complier / Interpreter*

Ein Compiler erzeugt ein Kompilat (fuer gewoehnlich) in Maschinencode, welches der Prozessor ausfuehren kann.

Ein Interpreter deutet/intepretiert einen Code, zumeist in einer Hochsprache die so der Prozessor nicht "ausfuehren" kann, bei jeder Laufzeit neu.

Bei einem Parser kommt es halt auf das Anwendungsgebiet an (-> Parser ? Wikipedia ).


----------



## Jack Carver (20. November 2008)

*AW: Complier / Interpreter*

Ein Compiler übersetzt n Programm in den Binärcode, beispiel ein Pascal-Compiler. Daraus wird dann die exe gebastelt. 
Das geschieht vor der Laufzeit des Programms und die exe läuft immer nur auf dem System für das sie kompiliert wurde, beispiel auf Windows.

Ein Interpreter macht das ganze erst zur Laufzeit des Progs, beispiel ein Java Interpreter. Vorteil is, dass dein Prog auf allen Systemen läuft, die die JVM am Laufen haben, Nachteil is, dass es dadurch etwas langsamer wird.

Parser scheint haupts. in der Webprogrammierung eingesetzt zu werden um den Quellcode übern Browser als Grafik darzustellen.


----------



## k-b (22. November 2008)

*AW: Complier / Interpreter*



Jack Carver schrieb:


> Ein Compiler übersetzt n Programm in den Binärcode,


Quatsch. Viel allgemeiner!

Ein *Compiler* übersetzt von einer Sprache in eine andere, ohne dass dabei Information verloren geht. Also 1:1. Total egal ob das jetzt von C in eine Assemblersprache ist, oder von Ruby in Scheme oder von C# in Java-Bytecode ist absolut egal. Ja, Java-Bytecode kann man auch tatsächlich mit anderen Sprachen wie Java generieren .. dazu gibt es ja eben Compiler.

Wir haben während dem Studium auch schon einen Compiler geschrieben der von einer selbst definierten Sprache (in ENBF definiert) einfach nur Code erzeugt hat der in Python ausführbar war. 

Maschinencode, was du wohl meinst, wird von "einem" *Assembler* (!) (es gibt nicht nur "den" Assembler, sondern ist ein allgemeiner Ausdruck wie Compiler oder Interpreter) erzeugt, nicht von einem Compiler.

Richtig ist aber, dass dies nur ein einziger Vorgang ist der danach abgeschlossen ist und alles zur Compilzeit übersetzt wird - was es an Variablen etc. gibt.

Ein *Interpreter* erstellt nichts sondern führt einfach nur aus, direkt aus dem Quellcode - zur Laufzeit.

Ein *Parser* ist bestandteil von Compiler und Interpreter. Beim parsen geht es nur darum Zeichenketten zu analysieren. Das müssen Compiler und Interpreter gleichermaßen machen, um danach einen Parsebaum zu haben. Aus dem Parsebaum wird ein Abstract Syntax Tree, darauf können noch Optimierungen angwendet werden (oder auch nicht), und auf dieser Basis kann dann das Programm ausgeführt werden (beim Interpreter) oder auch die Zielsprache generiert werden (beim Compiler). 

Sorry das ich so viel schrieb, aber ich musste diese Unklarheiten beseitigen .. außerdem hab ich erst am Donnerstag das im Unterricht aufgefrischt bekommen


----------



## Jack Carver (22. November 2008)

*AW: Complier / Interpreter*



k-b schrieb:


> Quatsch. Viel allgemeiner!
> 
> Ein *Compiler* übersetzt von einer Sprache in eine andere, ohne dass dabei Information verloren geht. Also 1:1. Total egal ob das jetzt von C in eine Assemblersprache ist, oder von Ruby in Scheme oder von C# in Java-Bytecode ist absolut egal. Ja, Java-Bytecode kann man auch tatsächlich mit anderen Sprachen wie Java generieren .. dazu gibt es ja eben Compiler.
> 
> ...




Naja Unklarheiten...Deine is best die korrektere, lehrbuchmäßige Definition, falsch is meine deswegen auch net nur nicht so umfangreich...aber ich denke doch mal, dass die Mehrzahl der Compiler in Maschinen- sprich Binärcode übersetzen.
Ich hab im Studium (Info) bisher Pascal, C++ und Java programmiert und bin noch nie in die Verlegenheit gekommen den C++-Code in Java oder sonst wieder ne andere Hochsprache zu übersetzen. Nen Compiler musste ich zum Glück bisher allerdings auch noch net basteln.
Ich finde zu verstehen, dass der Compiler letztlich dazu da is, dass man als Programmierer in ner verständlicheren Sprache als den reinen Binärcode programmieren kann und der Compiler das ganze dann in den Code übersetzt, den die Maschine versteht, reicht für den Normalbürger doch vollkommen aus.


Gruß Marcus


----------



## k-b (22. November 2008)

*AW: Complier / Interpreter*

Aber wenn hier jemand die Begriffe geklärt haben will, sollte man die auch erklären als nur anzudeuten finde ich.


----------

