LV „Software Factories” Prof. Dr.-Ing. habil. H. Fritzsche Wintersemester 2015/16 Lösungen zum 9. Komplex Aufgabe 1 Erzeugen des Xtext-Projektes: Der „Language-Name” entspricht dem Projektnamen mit einem selbst gewählten Zusatz, hier L1Dsl. Die gewählte Extensions-Angabe l1dsl wird bei der Erzeugung von Instanzen der DSL wieder benötigt. Beim Erstellen der Xtext-Grammatik müssen Linksrekursionen vermieden werden (der Parser arbeitet Top-down)! Über das Kontextmenü zur Datei Generatedslname.mwe2 → Run As → „MWE2 Workflow” ausführen. Ausgaben an der Console kontrollieren, bis ’Done.’ ausgegeben wird. Alternative Grammatik: L1Dsl: (x=X)? y=Y ’$’ ; X: ’a’ x=X | {X} ’a’ ; Y: ’b’ Y ’c’ | {Y} ’a’ ; Die Notation {X} stellt eine Action dar, die für die Erzeugung eines Objektes des entsprechenden Typs zuständig ist. Starten neue Eclipse-Instanz, neues Java-Projekt, neues File (hier L1_Beispiel.l1dsl) im src-Verzeichnis. In dieser Datei wird ein Programm erfasst. Ist die Datei leer oder enthält eine Zeichenfolge, die nicht Instanz von L1 ist, wird sie als fehlerhaft markiert. 2 Die jeweilige Auswahl wird bei Ctrl + Leertaste angeboten, aber nur, wenn in der XtextGrammatik Feature-Namen verwendet wurden. Aufgabe 2 3 Das gezeigte Wizard-Fenster ist nur ein Beispiel. Tatsächlich verwendete Einträge sind: • Projektname: de.htwdd.sf.pl0v4 • Languagename: de.htwdd.sf.pl0v4.PL0 • Erweiterung: pl0dsl 4 Die folgende outline-Darstellung enthält die Namen der Nichtterminale. Dafür sind Erweiterungen der Art public String text(Term ele){ return "Term"; } in der Datei PL0LabelProvider.java 5 vorzunehmen, die sich im Package de.htwdd.sf.pl0v4.ui.labeling befindet. im generierten Projekt de.htwdd.sf.pl0v4.ui Programmierung der Codeerzeugung mit Xtend: Im Projekt ist die xtend-Datei zu erweitern, die zunächst wie folgt generiert wird: Die Erweiterung umfasst 6 1. Die Erzeugung der Variablendeklarationen (Initialisierung mit 1, 2, 3 usw.), 2. Die Programmierung der Traversierung des Syntaxbaumes, 3. Das Erzeugen der JAva-Quellcode-Datei. 7 8