Fragenkatalog Was sind DSLs? o Definition o Teil von Softwaresprachen / formale Sprachen o Domäne o Abgrenzung zu GPLs / Unterschiede o Interne / externe DSLs o Architektur: Sprache, Execution Engine, Plattform o Konkrete / abstrakte Syntax o Konkreter Syntax liegt kontextfreie Grammatik zugrunde o Interpreter / Generator / Transformation o Werkzeugunterstützung Nennen Sie Beispiele für DSLs und GPLs. o GPLs nicht nur für eine Problemklasse geeignet o GPLs lassen Verwendung in mehreren Bereichen zu Wodurch unterscheiden sie sich? Was sind interne bzw. externe DSLs? o Interne DSLs verwenden Host-Sprache o Externe DSLs sind eigenständige Programmiersprachen Worin besteht der Unterschied zwischen Interpreter, Generator und Transformationen? Welche Gründe gibt es für die Nutzung von DSLs? o Vorteile aufzählen o 9 Vorteile Gibt es auch Nachteile? o Nachteile aufzählen o 8 Nachteile Wo kann man DSLs einsetzen? o Anwendungsgebiete aufzählen o 7 Anwendungsgebiete Erklären Sie den Unterschied zwischen konkreter und abstrakter Syntax. Welche Datenstruktur verwendet man für die abstrakte Syntax? o Abstract Syntax Tree o Graph mit Querverweisen Wie sieht der AST von "var x: int = 2 * 42" aus? Ist die konkrete Syntax immer textuell? Welche Formen gibt es noch? Kann man sie zusammen verwenden? Was ist eine kontextfreie Grammatik? Es gibt Parser-basierte Editoren und projektionale Editoren für DSLs. Erklären Sie den Unterschied zwischen beiden. Welche Vor- und Nachteile habe beide Ansätze? o Komposition von Sprachen o Interaktion mit Editoren o Werkzeugunterstützung 1 In projektionalen Editoren kann die Eingabe von "2+3*4" zum Ergebnis "20" führen. Wie ist dies zu erklären? Für den Entwurf von DSLs haben sich verschiedene Entwurfsrichtlinien entwickelt. Welche sind das? Beschreiben Sie sie. o 7 Entwurfsrichtlinien Was sind sprachliche Abstraktionen und was sind sprachinterne Abstraktionen? Es gibt statische und dynamische Semantik. Was umfassen sie? o Statisch: Typsystem, Constraints o Dynamisch: Execution Engine, d.h. Interpreter, Generator, Transformation Erzählen Sie etwas über Constraints und geben sie ein paar Beispiele. o Meist ungerichtet o Constraint-Systeme o Constraint-Solver Welche Vor- und Nachteile ergeben sich bei Interpretern und Transformationen/Generatoren? Sprachen und können durch Komposition wiederverwendet werden. Welche Arten von Sprachkompositionen gibt es? Beschreiben Sie die Unterschiede. o Wiederverwendung o Einbettung o Referenzierung o Erweiterung Welche Konsequenzen ergeben sich daraus für die konkrete Syntax, die Generatoren / Transformationen und Typsysteme? Welche gemeinsamen Paradigmen hinsichtlich der Struktur von DSLs existieren? o 7 Paradigmen Listen sie die aus dem Kurs bekannten Verhaltensparadigmen auf und erläutern Sie sie kurz. Welche Auswirkungen hat die Wahl des Paradigmas auf die Analysierbarkeit und das Debugging? o 6 Paradigmen Was sind definite Klauselgrammatiken? Bei der Verwendung von Parsern werden Grammatiken für die Definition der konkreten Syntax eingesetzt. Welche Probleme können einige Grammatiken verursachen? o Nicht alle Grammatikklassen sind von allen Parsern übersetzbar o Linksrekursive Grammatiken können nicht von LL(k) Parsern übersetzt werden o Mehrdeutigkeit (Unterschiedliche ASTs möglich; Operator-Präzedenz) o Komposition von eindeutigen Grammatiken kann zu Mehrdeutigkeiten führen Wie kann man diese Probleme beheben? o Linksrekursion durch Linksfaktorisierung beseitigen o Mehrdeutigkeit durch Ändern der Produktionsregeln beseitigen (ggf. neue Produktionsregeln einführen) Erklären Sie Attributgrammatiken. Was versteht man unter Scoping und Linking? Gibt es da Unterschiede zwischen Parser-basierten und projektionalen Editoren? Wie sind Scopes üblicherweise aufgebaut? 2 Was sind Typsysteme und wofür werden sie benutzt? o 4 Aufgaben von Typsystemen Auf welche Arten können Typen berechnet werden? Beschreiben Sie sie. o Rekursion o Unifikation o Pattern Matching Für die Generierung von Code aus DSLs wird bei XText eine Template Sprache eingesetzt. Was ist das besondere an einer Template Sprache? Welche Möglichkeiten sollte eine Template Sprache MPS verwendet einen anderen Ansatz für die Generierung. Worin besteht der Unterschied, wie funktioniert er und welche Vor- und Nachteile bringt der Ansatz mit sich? Expressions und Statements sind grundlegende Elemente von DSLs. Wie sieht hier der übliche Ansatz bei der Implementierung eines Interpreters aus? Worin unterscheiden sich Expressions und Statements? o Rekursive Methodenaufrufe o Überladene Methoden Wie werden z. B. Funktionsaufrufe in DSLs in Interpretern implementiert? o Environments o Call Stacks Für eine produktive Nutzung von DSLs werden IDEs eingesetzt, die verschiedene Dienste / Hilfsmittel zur Verfügung stellen. Welche Hilfsmittel sind das? Die Korrektur von Syntaxfehlern und die Vervollständigung von Sätzen in Prolog basieren auf der Verwendung von (Gleichheits-)Constraints. Welche Idee liegt dem zugrunde? Welche Bestandteile von DSLs können wie getestet werden? o Syntax o Constraints o Semantik o IDE Services Das Testen der Syntax in MPS macht eigentlich keinen Sinn. Warum nicht? Wann könnten dennoch Syntaxfehler auftreten? Welche Ansätze gibt es, um die Execution Engine (dynamische Semantik) zu testen? o Unit Tests auf GPL-Ebene o Unit Tests auf DSL-Ebene Wie unterscheidet sich das Debugging zwischen Interpreter, Debugger und Source-LevelDebugger? Welche Mehrdeutigkeiten können bei Spracherweiterungen auftreten und wie löst MPS diese Konflikte? o 3 Fälle 3