Applikationsgeneratoren

Applikationsgeneratoren sind auf bestimmte Problembereiche spezialisierte Compiler mit eigenen anwendungsabhängigen Beschreibungssprachen. Im Unterschied zu den allgemeinen Hochsprachen existieren hier viele, vom Anwendungsfall abhängige, komplexe Konstrukte. Ein Anwendungsgenerator ist daher nur für diesen speziellen Bereich einsetzbar. Nach Charles W. Krueger [Krueger, 1992, S. 156] ist der Einsatz von Applikationsgeneratoren sinnvoll, wenn mindestens einer der folgenden Faktoren zutrifft:

Es existieren viele Spezifikationsvarianten für Applikationsgeneratoren. Sie kann z.B. in textueller Form ähnlich wie in einer Hochsprache, in graphischer Form oder auch in einer interaktiven Eingabeform erfolgen. Je nach Anwendungsgebiet werden die unterschiedlichen Spezifikationsarten ausgewählt. Anwendungsgebiete für Applikationsgeneratoren sind z.B. das Datenbankmanagement, das Erzeugen von Expertensystemen und die Parsergeneratoren. Abbildung 8 zeigt ein Beispiel für eine textuelle Spezifikation für den Parsergenerator Yacc .

stmt : IF '(' cond ')' stmt
| IF '(' cond ')' stmt ELSE stmt

Abbildung: 8: Bedingungsanweisung einer imperativen Programmiersprache in Yacc

Gegenstand der Wiederverwendung bei Applikationsgeneratoren sind Algorithmen, Datenstrukturen und Kontrollanweisungen höherer Ebene, d.h.solche, die in Hochsprachen meist nicht realisiert sind. Gegenüber den Software-Schemata werden diese hier vollständig automatisch ausgewählt. Im Rahmen der Möglichkeiten, die ein Anwendungsgenerator bietet, gibt der Softwareentwickler an, was das System zu leisten hat, nicht wie. Sofern bei der übersetzung kein Zwischencode entsteht, z.B. in einer Hochsprache, ist die Implementierung bei dieser Form der Programmierung vollkommen verborgen. Die Syntax von Anwendungsgeneratoren ist, wie bei den Hochsprachen, formal spezifiziert, so daß die übersetzung in lauffähigen Code automatisch geschehen kann.

Ein Nachteil eines Programmgenerators ist die Spezialisierung auf ein einzelnes Anwendungsgebiet. Ein weiteres Problem ist die Vollständigkeit, d.h.die Funktionalität von Anwendungsgeneratoren so zu definieren, daß alle erdenklichen Problemstellungen des Anwendungsgebiets abgedeckt werden können. Außerdem gibt es nicht für alle Probleme passende Applikationsgeneratoren.