MontiCore: Agile Entwicklung von domänenspezifischen Sprachen ...
MontiCore: Agile Entwicklung von domänenspezifischen Sprachen ...
MontiCore: Agile Entwicklung von domänenspezifischen Sprachen ...
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
1.5 Der <strong>MontiCore</strong>-Ansatz 15<br />
Dagegen hat eine integrierte Sprachdefinition für abstrakte und konkrete Syntax die folgenden<br />
Vorteile:<br />
• Die abstrakte und die konkrete Syntax sind automatisch konsistent.<br />
• Semantisch ähnliche Elemente einer Sprache sollten sich auch für den Nutzer ähnlich<br />
darstellen, damit <strong>von</strong> der Eingabe leichter auf die Bedeutung eines Programms zu<br />
schließen ist (vgl. auch [Hoa73, Wir74]). Eine gemeinsame Spezifikation erzwingt<br />
dieses per Konstruktion.<br />
• Die Sprachdefinition kann effektiv als eine zentrale Dokumentation innerhalb einer<br />
agilen evolutionären <strong>Entwicklung</strong> dienen, so dass externe Dokumentation zweitrangig<br />
ist.<br />
• Es existiert automatisch eine konkrete Syntax, was die Verwendung der Sprache durch<br />
Nutzer und das Testen darauf basierender Werkzeuge durch Entwickler erleichtert,<br />
da diese nicht, wie bei Metamodellierung oft üblich, eine generische Repräsentation<br />
verwenden müssen.<br />
Die modellgetriebenen Ansätze zur Definition <strong>von</strong> Modellierungssprachen wie [BSM + 03,<br />
OMG06a] konzentrieren sich vor allem auf die abstrakte Syntax. Die konkrete Syntax<br />
wird, wenn sie überhaupt definiert wird, mittels einer zweiten Modellart definiert (vgl.<br />
z.B. [JBK06, MFF + 06]). Dieses ignoriert die Tatsache, dass Modelle auch direkt <strong>von</strong> den<br />
Entwicklern der DSL zum Testen der Generatoren erstellt werden müssen und daher eine<br />
komfortable konkrete Syntax die Qualitätssicherung erleichtert.<br />
Innerhalb einer DSL-basierten <strong>Entwicklung</strong> kann es vorkommen, dass dieselben Entwickler<br />
in unterschiedlichen Rollen einerseits Modelle erstellen und andererseits auch die<br />
Codegeneratoren auf Basis der abstrakten Syntax entwickeln. Eine starke Kopplung der<br />
abstrakten und der konkreten Syntax erleichtert hierbei das Verständnis der Sprache, weil<br />
die Eingaben direkt mit den Elementen der abstrakten Syntax korrespondieren und keine<br />
komplexe Abbildung zwischen beiden Artefakten möglich ist. Zusätzlich wird ein Wechsel<br />
zwischen den Rollen vereinfacht, weil mit einem Rollenwechsel trotzdem die für die Rolle<br />
relevante Struktur der Sprache ähnlich bleibt.<br />
Die existierenden Ansätze betrachten die Definition einer DSL meistens als eine atomare<br />
Einheit. Für eine ingenieurmäßige <strong>Sprachen</strong>twicklung [KLV05], die sich als Ziel setzt,<br />
systematisch neue DSLs zu entwickeln, sind jedoch Modularitätsmechanismen wichtig. Nur<br />
so kann die systematische Wiederverwendung <strong>von</strong> <strong>Sprachen</strong> erreicht werden. In dieser Arbeit<br />
werden Konzepte zur Modularisierung der Sprachdefinition erarbeitet. Weitergehend<br />
wird beschrieben, wie darauf aufbauende Artefakte wie Kontextbedingungen, Traversierung<br />
<strong>von</strong> Datenstrukturen und Codegenerierungen modular entwickelt werden können. Nur so<br />
lassen sich systematisch Bibliotheken etablieren, die Sprachfragmente und Generierungen<br />
enthalten, die es langfristig erlauben, durch Wiederverwendung den Aufwand für die <strong>Entwicklung</strong><br />
generativer Werkzeuge zu reduzieren. Ein Beispiel hierfür sind GPL-Fragmente,<br />
die häufig als eine Aktionssprache in Modellen zur Formulierung ausführbarer Anteile genutzt<br />
werden. Um eine Konsistenzprüfung für solche heterogenen Modelle zu realisieren,<br />
ist zumindest eine Repräsentation der GPL als Modell notwendig. Zur Amortisierung des<br />
<strong>Entwicklung</strong>saufwands werden daher im Folgenden Möglichkeiten dargestellt, Sprachfragmente<br />
in mehreren Modellarten nutzen zu können.<br />
Der <strong>MontiCore</strong>-Generator wird bei der Erstellung <strong>von</strong> Generatoren selbst eingesetzt,<br />
um aus der DSL-Definition Komponenten zur Sprachverarbeitung automatisch zu erzeugen.<br />
Dabei ist es insbesondere möglich, auf Bibliotheken zurückzugreifen, die bereits entwickelte