MontiCore: Agile Entwicklung von domänenspezifischen Sprachen ...
MontiCore: Agile Entwicklung von domänenspezifischen Sprachen ...
MontiCore: Agile Entwicklung von domänenspezifischen Sprachen ...
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
34 Kapitel 2 – Entwurf und Einsatz <strong>von</strong> DSLs in der Softwareentwicklung<br />
Erweiterbare Compiler erlauben die Erweiterung <strong>von</strong> GPLs ähnlich zu eingebetteten<br />
DSLs, wobei jedoch komplexe Codegenerierungen eingebunden werden können, da<br />
keine direkte Reduktion auf die GPL notwendig ist.<br />
Erweiterbare Modellierungssprachen wie die UML mit ihrer Profilbildung erlauben<br />
in begrenztem Umfang, domänenspezifische Varianten vorhandener Elemente durch<br />
Spezialisierung zum Sprachumfang hinzuzufügen.<br />
Eigenständige DSL-Definitionen bezeichnen die Realisierung <strong>von</strong> DSLs, ohne dass eine<br />
direkte vorhandene Programmiersprache als Umgebung genutzt wird.<br />
Die Methoden besitzen jeweils verschiedene Vor- und Nachteile, die bei der Auswahl einer<br />
Methodik zur Realisierung einer DSL gegeneinander abgewogen werden müssen, was insbesondere<br />
den Aufwand für die Realisierung mit einschließt. In der vorliegenden Arbeit liegt<br />
der Fokus auf der eigenständigen DSL-Definition. Die wesentlichen Gründe hierfür sind:<br />
• Die eigenständige DSL-Definition erlaubt völlige Freiheit in der Gestaltung der Sprache<br />
und so eine optimale Annäherung an die Konzepte der Domäne. Dies lässt sich<br />
mit Profilbildung, eingebetteten DSLs oder erweiterbaren Compilern oft nur schwer<br />
erreichen, weil meistens die Elemente der Basissprache noch zur Verfügung stehen<br />
und die Syntax sich nur bedingt anpassen lässt.<br />
• Eingebettete DSLs werden direkt in eine ausführbare Form innerhalb einer GPL überführt.<br />
Dadurch ergeben sich verschiedene Einschränkungen, die einen DSL-Einsatz<br />
erschweren. Erstens ist nur eine einzige Verwendungsform möglich und die Modelle<br />
können nicht, wie in Kapitel 1 dargestellt, die Grundlage für mehrere Codegenerierungen<br />
sein. Zweitens ist eine Erzeugung <strong>von</strong> Dokumentation und Analysen auf<br />
diesem Weg kaum möglich, da sich diese nicht als ausführbarer Programmcode darstellen<br />
lassen. Drittens ist die Programmierung komplexer Codegenerierungen, deren<br />
Ergebnis sich aus mehreren Dateien der Hostsprache zusammensetzt, meistens nur<br />
sehr umständlich zu realisieren.<br />
• Die Evolution eines Systems, das mit eingebetteten DSLs realisiert ist, beinhaltet<br />
keine klare Trennung <strong>von</strong> Domänenmodellen und technischer Realisierung innerhalb<br />
des Produkts im Sinne einer Trennung in plattformspezifische und plattformunabhängige<br />
Anteile (vergleiche auch [OMG03]). Dadurch lässt sich beispielsweise die<br />
Zielplattform oder Hostsprache nicht einfach austauschen, da die Modelle meistens<br />
eine Mischung aus Hostsprache und DSL sind.<br />
• Die Verwendung <strong>von</strong> Makros eignet sich nicht für die Implementierung komplexer Codegenerierungen<br />
und bietet keine Analyse vor der Verarbeitung, um den Entwickler<br />
mit erklärenden Fehlermeldungen bei fehlerhaften Eingaben zu unterstützen.<br />
• Die Realisierung zusammengesetzter Modellierungssprachen ist mit eingebetteten<br />
DSLs kaum möglich, weil keine geeignete Hostsprache verfügbar ist. Sollen zum Beispiel<br />
Klassendiagramme um Invarianten der OCL ergänzt werden, können diese nicht<br />
auf Elemente des Klassendiagramms zurückgeführt werden, weil die Invarianten genau<br />
die Defizite in der Ausdrucksmächtigkeit der Klassendiagramme kompensieren<br />
sollen. Die Rückführung ist aber ein essentielles Merkmal eingebetteter DSLs.