© Excellent backgrounds/Shutterstock.com
Java Magazin
Teil 1: Theoretische Grundlagen des Compilerbaus

Ich verstehe und mache, was du sagst


Das Thema Compilerbau hat überraschend viele Anwendungen in der Programmierpraxis. Das Verständnis ist nicht ganz einfach, aber hochinteressant. In einer zweiteiligen Serie stellen wir Theorie und Praxis vor. Neben dem Verständnis der Grundlagen ist es das Ziel, einen eigenen Parser als Kernelement eines Compilers zu erstellen.

Artikelserie

Teil 1: Theoretische Grundlagen des Compilerbaus

Teil 2: Parser für mathematische Ausdrücke in Java

Um Programme in einer höheren Programmiersprache auf einem Rechner auszuführen, muss man sie in die Maschinensprache des jeweiligen Prozessors übersetzen. Dazu gibt es zwei grundsätzliche Optionen: über den Compiler und über einen Interpreter. Beim Compiler erfolgt die Übersetzung des Quellcodes in ein ausführbares Programm zum Zeitpunkt der Programmentwicklung. Beim Interpreter übersetzt der Quellcode das Programm erst zur Laufzeit in die ausführbare Maschinensprache. Beide Ansätze sind in den Konzepten der heutigen modernen Programmiersprachen anzutreffen und haben ihre Vor- und Nachteile. Auch eine Mischung beider Ansätze findet sich z. B. in Form von virtuellen Maschinen (Java) oder verwalteten Code (.NET-Plattform) wieder. Eine solche virtuelle Maschine (VM) agiert dann gewissermaßen als Zwischenschicht. Der Ablauf ist wie folgt: Zunächst erfolgt eine Übersetzung des Quellprogramms in ein Programm für die VM mittels Compiler, und dann ist die VM ein Interpreter für das durch den Compiler (Schritt 1) erzeugte Programm. Damit wird das Programm letztendlich in der VM auf dem Zielsystem ausgeführt. Die Programmiersprache Java ist ein sehr gutes Beispiel für die Umsetzung dieses Konzepts. Dieses Vorgehen bietet eine Reihe von Vorteilen:

  • Unabhängigkeit: Die Implementierung der VM auf den einzelnen Zielsystemen ist unabhängig von der Entwicklung des Compilers.

  • Plattformübergreifende Entwicklung: Der Entwickler programmiert gegen den Befehlssatz der VM. Die konkrete Ausgestaltung des Zielsystems tritt dabei in den Hintergrund. Damit wird die Basis für eine plattformübergreifende Programmentwicklung gelegt.

  • Sicherheit: Die Programmausführung ist sicherer, da sie in der VM erfolgt (Prinzip Sandbox). Kommt es während der Programmausführung zu einem größeren Problem, muss in der Regel maximal die betreffende VM beendet und neu gestartet werden. Auswirkungen auf das Gesamtsystem sind meist zu vermeiden.

  • Sprachenvielfalt: Die VM kann theoretisch mithilfe unterschiedlicher Programmiersprachen angesprochen werden.

Das Herz ein...

Java Magazin
Teil 1: Theoretische Grundlagen des Compilerbaus

Ich verstehe und mache, was du sagst

Das Thema Compilerbau hat überraschend viele Anwendungen in der Programmierpraxis. Das Verständnis ist nicht ganz einfach, aber hochinteressant. In einer zweiteiligen Serie stellen wir Theorie und Praxis vor. Neben dem Verständnis der Grundlagen ist es das Ziel, einen eigenen Parser als Kernelement eines Compilers zu erstellen.

Veikko Krypczyk, Elena Bochkor


Das Thema Compilerbau hat überraschend viele Anwendungen in der Programmierpraxis. Das Verständnis ist nicht ganz einfach, aber hochinteressant. In einer zweiteiligen Serie stellen wir Theorie und Praxis vor. Neben dem Verständnis der Grundlagen ist es das Ziel, einen eigenen Parser als Kernelement eines Compilers zu erstellen.

Artikelserie

Teil 1: Theoretische Grundlagen des Compilerbaus

Teil 2: Parser für mathematische Ausdrücke in Java

Um Programme in einer höheren Programmiersprache auf einem Rechner auszuführen, muss man sie in die Maschinensprache des jeweiligen Prozessors übersetzen. Dazu gibt es zwei grundsätzliche Optionen: über den Compiler und über einen Interpreter. Beim Compiler erfolgt die Übersetzung des Quellcodes in ein ausführbares Programm zum Zeitpunkt der Programmentwicklung. Beim Interpreter übersetzt der Quellcode das Programm erst zur Laufzeit in die ausführbare Maschinensprache. Beide Ansätze sind in den Konzepten der heutigen modernen Programmiersprachen anzutreffen und haben ihre Vor- und Nachteile. Auch eine Mischung beider Ansätze findet sich z. B. in Form von virtuellen Maschinen (Java) oder verwalteten Code (.NET-Plattform) wieder. Eine solche virtuelle Maschine (VM) agiert dann gewissermaßen als Zwischenschicht. Der Ablauf ist wie folgt: Zunächst erfolgt eine Übersetzung des Quellprogramms in ein Programm für die VM mittels Compiler, und dann ist die VM ein Interpreter für das durch den Compiler (Schritt 1) erzeugte Programm. Damit wird das Programm letztendlich in der VM auf dem Zielsystem ausgeführt. Die Programmiersprache Java ist ein sehr gutes Beispiel für die Umsetzung dieses Konzepts. Dieses Vorgehen bietet eine Reihe von Vorteilen:

  • Unabhängigkeit: Die Implementierung der VM auf den einzelnen Zielsystemen ist unabhängig von der Entwicklung des Compilers.

  • Plattformübergreifende Entwicklung: Der Entwickler programmiert gegen den Befehlssatz der VM. Die konkrete Ausgestaltung des Zielsystems tritt dabei in den Hintergrund. Damit wird die Basis für eine plattformübergreifende Programmentwicklung gelegt.

  • Sicherheit: Die Programmausführung ist sicherer, da sie in der VM erfolgt (Prinzip Sandbox). Kommt es während der Programmausführung zu einem größeren Problem, muss in der Regel maximal die betreffende VM beendet und neu gestartet werden. Auswirkungen auf das Gesamtsystem sind meist zu vermeiden.

  • Sprachenvielfalt: Die VM kann theoretisch mithilfe unterschiedlicher Programmiersprachen angesprochen werden.

Das Herz ein...

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang