01888 - DSL - EA - ML - KE1 - Kurseinheiten PDF

Title 01888 - DSL - EA - ML - KE1 - Kurseinheiten
Course Domänenspezifische Sprachen
Institution FernUniversität in Hagen
Pages 7
File Size 258.2 KB
File Type PDF
Total Downloads 2
Total Views 165

Summary

Kurseinheiten...


Description

Lehrgebiet Programmiersysteme Univ.-Prof. Dr. Friedrich Steimann

Lösungsvorschläge zu den Einsendeaufgaben zum Kurs Domänenspezifische Sprachen (1888) Kurseinheit 1

Inhalt Lösungsvorschlag zu Aufgabe 1 - Addition von succ-Termen in Prolog................................1 Lösungsvorschlag zu Aufgabe 2 - DSL-Beispiele..................................................................2 Lösungsvorschlag zu Aufgabe 3 - Vor- und Nachteile von DSLs...........................................3 Lösungsvorschlag zu Aufgabe 4 - Interne und externe DSL.................................................5 Lösungsvorschlag zu Aufgabe 5 - Konkrete und abstrakte Syntax.......................................6

Lehrgebiet Programmiersysteme Univ.-Prof. Dr. Friedrich Steimann

Lösungsvorschlag zu Aufgabe 1 - Addition von succ-Termen in Prolog addiere(0, 0, 0). addiere(succ(X), 0, succ(Z)) :- addiere(X, 0, Z). addiere(0, succ(Y), succ(Z)) :- addiere(0, Y, Z). addiere(succ(X), succ(Y), succ(succ(Z))) :- addiere(X, Y, Z).

Alles ist möglich. Allerdings wird für manche Aufgabenstellungen viel Backtracking benötigt, was ein Hinweis darauf ist, dass die Lösung nur durch Suchen gefunden wird. Prolog erlaubt also offenbar, eine durch ein Programm vorgegebene Berechnungsvorschrift (Abbildung von Eingaben auf Ausgaben) umzukehren, ohne dafür eine gesonderte Vorschrift (eine explizite Umkehrung) angeben zu müssen. Es werden dann einfach die Eingaben gesucht, die zur eigentlichen Ausgabe (die ja nun Eingabe ist) führen würden, und diese als Ausgabe ausgegeben.

1888 - LV zu EA1

1

Lehrgebiet Programmiersysteme Univ.-Prof. Dr. Friedrich Steimann

Lösungsvorschlag zu Aufgabe 2 - DSL-Beispiele a) Beispiele für domain-spezifische Sprachen: 



BNF / EBNF - Backus-Naur Form / (Extended) Backus-Naur Form Eine DSL zur Beschreibung von Grammatiken BNF

EBNF

Expr ::= Expr "+" Term | Term Term ::= Term "*" Factor | Factor Factor ::= INT | "(" Expr ")"

Expr ::= Term ("+" Term)* Term ::= Factor ("*" Factor)* Factor ::= INT | "(" Expr ")"

SQL – Structured Query Language Eine DSL zur Definition von Datenbankabfragen und zur Manipulation von Daten in relationalen Datenbanken SELECT vorname, name FROM Person WHERE age > 25



Reguläre Ausdrücke Eine DSL zur Verarbeitung von Texten oder Daten. Eine zentrale Anwendung regulärer Ausdrücke besteht im Auffinden eines Textteiles anhand eines vorgegebenen Musters in einem Eingabetext. ^[a-zA-Z0-9]\d{2}[a-zA-Z0-9](-\d{3}){2}[A-Za-z0-9]$

Das obige Beispiel zeigt eine Zeichenkette für ein Muster zur Prüfung von Artikelnummern. Die Artikelnummer „1298-673-4192“ wäre damit gültig, „12345-KKA-1230“ 

nicht. Weitere Beispiele für DSLs CSS, LINQ, Ant, Make, Hibernate Query Language, …

b) Beispiele für GPLs sind C++, C#, und JAVA. General Purpose Languages (GPLs) – allgemeine Programmiersprachen – sind definitionsgemäß keine DSLs. Die Abgrenzung besteht darin, dass GPLs nicht nur für ein bestimmtes konkretes Problem einer Domäne geeignet sind und daher der zur Verfügung stehende Funktionsumfang eine Verwendung in mehreren Bereichen zulässt.

1888 - LV zu EA1

2

Lehrgebiet Programmiersysteme Univ.-Prof. Dr. Friedrich Steimann

Lösungsvorschlag zu Aufgabe 3 - Vor- und Nachteile von DSLs a) ●

Produktivität  DSLs bieten die Möglichkeit, umfangreichen GPL-Quelltext durch wenige Zeilen DSLQuelltext bei gleicher semantischer Ausssagekraft zu ersetzen.  DSLs bieten im Vergleich zu Frameworks oder Bibliotheken besser angepasste Syntax, die Möglichkeit zur Durchführung statischer Analysen und eine engere/sinnvollere Integration in Entwicklungswerkzeuge.



Qualität Weniger Fehler, Einhaltung architektonischer Vorgaben und erhöhte Wartbarkeit durch  das Entfallen potentieller Fehlerquellen durch die auf das Wesentliche beschränkte Syntax von DSLs,  das Vermeiden von Quelltextduplikaten und 

die konsistente Automatisierung sich wiederholender Vorgänge durch die Execution Engine.



Validierung und Verifikation Gegenüber GPL-Programmen besitzen DSL-Programme eine höhere semantische Aussagekraft. Entsprechende Analysen können daher einfacher implementiert werden. Beispielsweise können Fehlermeldungen durch Rückgriff auf Konzepte der Domäne deutlich aussagekräftiger formuliert werden.



Langlebigkeit Ein Model beschreibt relevante Konzepte der Domäne und ist bei korrekter Umsetzung unabhängig von spezifischen Techniken der Implementierung. Das Model kann so bei Bedarf ohne großen Migrationsaufwand in eine andere Repräsentation transformiert werden.



Teamkommunikation und Einbinden von Domänenexperten Das Fehlen unnötiger Implementierungsdetails erleichtert allen Beteiligten die Kommunikation und das Verständnis der Domäne und ermöglicht die Beteiligung von Domänenexperten.



Produktivitätswerkzeuge Externe DSLs können in Entwicklungswerkzeuge eingebunden werden und bieten ein brei-

1888 - LV zu EA1

3

Lehrgebiet Programmiersysteme Univ.-Prof. Dr. Friedrich Steimann

tes Spektrum von unterstützenden Entwicklungswerkzeugen, wie beispielsweise statischer Analyse, Code Completion, Visualisierungen, Debugger, Simulatoren, … ●

Effizienz Das Generieren von Quelltext aus einem DSL-Programm bietet die Möglichkeit der Optimierung durch den Generator.



Plattformunabhängigkeit Das Austauschen der Execution Engine ermöglicht die Ausführung auf einer anderen Plattform.

b) ●

Aufwand Je nach Ausrichtung einer DSL und dem daraus resultierenden Potential für Wiederverwendung ergeben sich unterschiedliche Kostenaufwände. So kann beispielsweise eine technische DSL häufiger wiederverwendet werden als eine auf eine bestimmte Anwendungsdomäne abgestimmte DSL.



Erfahrungsbedarf Das Erstellen eines guten DSL-Designs benötigt langjährige Erfahrung.



Prozessanforderungen Die Interaktion von DSL-Benutzern, DSL-Entwicklern und Domänenexperten erfordert ggf. die Einführung eines speziellen Prozesses.



Weiterentwicklung und Wartungsaufwand Eine durch fehlende Weiterentwicklung und/oder Wartung veraltete DSL kann zur Belastung werden.



Gefahr einer „DSL-Hölle“ Der Begriff lehnt sich an den der „DLL-Hölle“ an und beschreibt die Gefahr einer (großen) Menge halbfertiger, sich womöglich überschneidender DSLs, die ähnliche Domänen abdecken.

1888 - LV zu EA1

4

Lehrgebiet Programmiersysteme Univ.-Prof. Dr. Friedrich Steimann

Lösungsvorschlag zu Aufgabe 4 - Interne und externe DSL Eine interne DSL ist in eine GPL-Programmiersprache (Hostsprache) eingebettet und kann ihre Funktionalitäten und Konstrukte nutzen; insbesondere wird kein eigener Compiler oder Interpreter entwickelt. Programme einer internen DSL sind immer auch gültige Programme ihrer Hostsprache. Es wird allerdings nur eine Teilmenge der Sprachmöglichkeiten ausgenutzt, nämlich jene, die für den zu behandelnden Teilaspekt des Gesamtsystems von Interesse sind. Da die existierende Werkzeugpalette wiederverwendet werden kann, setzt sich die Zielgruppe in der Regel aus Entwicklern zusammen, die auch die Hostsprache beherrschen. Die Implementierung der DSL basiert üblicherweise auf Metaprogrammierung. Metaprogramme sind Programme, die sich selbst und andere Programme zur Ein- und Ausgabe benutzen. In dieser Hinsicht ist JAVA als Hostsprache eher schwach, da das Erstellen einer eigenen Syntax über die bekannten Konstrukte hinaus nicht möglich ist. Um dennoch die Lesbarkeit von JAVA-Quelltext zu verbessern (Reduzierung des sog. syntactic noise), bieten sich Muster wie beispielsweise fluent interfaces an, bei der Methodenaufrufe so verkettet werden, dass sie dem natürlichen Sprachfluss folgen. Während die Hostsprache meist durch ein umfangreiches Werkzeugangebot unterstützt wird, ist die IDE-Integration der internen DSL meist nicht vorhanden. Beispiele: Rails als interne DSL von Ruby, Lisp. Eine externe DSL ist eine eigenständige Programmiersprache, bei der die Syntax von Grund auf frei definiert werden kann und die somit die Domäne auf einfachste Weise optimal beschreibt. Aufgrund des hohen Abstraktionsgrades gibt es kaum Unterstützung durch Werkzeuge der Zielsprache. Dafür können externe DSLs mit eigens dafür vorgesehenen Entwicklungswerkzeugen erstellt werden, die diese Lücke schließen. Die Entwicklung einer externen DSL erfordert allerdings auch zusätzliche Arbeitsschritte wie beispielsweise das Erstellen einer Grammatik und eines Generators. Beispiel: SQL

1888 - LV zu EA1

5

Lehrgebiet Programmiersysteme Univ.-Prof. Dr. Friedrich Steimann

Lösungsvorschlag zu Aufgabe 5 - Konkrete und abstrakte Syntax Konkrete Syntax Definiert die Notation, mit der DSL-Programme vom Benutzer formuliert werden. DSL-Programme können sowohl in textueller, grafischer oder tabellarischer Form als auch durch Mischformen dieser ausgedrückt werden. Abstrakte Syntax Eine Datenstruktur, die die semantisch relevante Information eines DSL-Programms repräsentiert. Diese Datenstruktur – typischerweise ein Baum oder ein Graph – ist dabei frei von Aspekten der konkreten Formulierung des Programms: die abstrakte Syntax enthält beispielsweise im Falle eines DSL-Programms in textueller Form keinerlei Schlüsselwörter, Symbole oder Zwischenraumzeichen (Whitespace).

1888 - LV zu EA1

6...


Similar Free PDFs