30.06.2014 Aufrufe

MontiCore: Agile Entwicklung von domänenspezifischen Sprachen ...

MontiCore: Agile Entwicklung von domänenspezifischen Sprachen ...

MontiCore: Agile Entwicklung von domänenspezifischen Sprachen ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!