Domainspezifische Sprachen

Ähnliche Dokumente
Domänenspezifische Sprachen

Language Workbench. Aktuelle Themen der Softwaretechnologie. Vortrag von: Arthur Rehm Steven Cardoso. Betreut von: Prof. Dr.

Vorgetragen von. Sanaz Mostowfi Anna Polovets Mandy Neumann

DSLs mit Xtext entwerfen , A. Arnold

Definition von domänenspezifischen Sprachen mit Xtext: Einführung. 19. November 2014

Copyright 2014 Delta Software Technology GmbH. All Rights reserved.

Formale Sprachen und Grammatiken

Was ist ein Compiler?

Kapitel 4. Einführung in den Scannergenerator Flex. Einführung in den Scannergenerator Flex Wintersemester 2008/09 1 / 9

DSL Entwicklung und Modellierung

Algorithmen mit Python

SEW Übung EMFText. 1 Aufgabe. 2 Domänenbeschreibung. 3 Installation von Eclipse/EMFText. 4 Schritt-für-Schritt Anleitung. 4.

Unterrichtsmaterialien in digitaler und in gedruckter Form. Auszug aus:

0. Einführung. C und C++ (CPP)

HTML5. Wie funktioniert HTML5? Tags: Attribute:

Programmiersprachen und Übersetzer

Updatehinweise für die Version forma 5.5.5

Präsentation Von Laura Baake und Janina Schwemer

Fachdidaktik der Informatik Jörg Depner, Kathrin Gaißer

Anleitung zum Arbeiten mit Microsoft Visual Studio 2008 im Softwarepraktikum ET/IT

schnell und portofrei erhältlich bei beck-shop.de DIE FACHBUCHHANDLUNG mitp/bhv

Andreas Lux Verknüpfung unterschiedlicher Modellsprachen (BPMN, UML, DSL) zur Anforderungsanalyse

Visuelle DSLs Trends in der Softwaretechnik: Domänenspezifische Sprachen (Seminar WS 2010/11) Thorsten Arendt

Proseminar: Website-Managment-System. NetObjects Fusion. von Christoph Feller

Informationen zur Verwendung von Visual Studio und cmake

Grundbegriffe der Informatik

Übungen zur Softwaretechnik

Web-basierte Benutzerschnittstellen für Embedded Systeme: Eine Benutzerschnittstelle drei Sichtweisen

Klausurteilnehmer. Wichtige Hinweise. Note: Klausur Informatik Programmierung, Seite 1 von 8 HS OWL, FB 7, Malte Wattenberg.

How-to: Webserver NAT. Securepoint Security System Version 2007nx

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein.

Python SVN-Revision 12

Informatik I Tutorium WS 07/08

Fehler und Probleme bei Auswahl und Installation eines Dokumentenmanagement Systems

SSI WHITE PAPER Design einer mobilen App in wenigen Stunden

Anleitung BFV-Widget-Generator

10 Erweiterung und Portierung

Arbeiten mit UMLed und Delphi

SEMINAR Modifikation für die Nutzung des Community Builders

TYPO3 CMS 6.2 LTS. Die neue TYPO3- Version mit Langzeit- Support

SJ OFFICE - Update 3.0

Grammatiken. Einführung

Was meinen die Leute eigentlich mit: Grexit?

Individuelle Erweiterung des generierten Codes. 16. Januar 2013

A Domain Specific Language for Project Execution Models

Entwicklung des Dentalmarktes in 2010 und Papier versus Plastik.

ISA Einrichtung einer DFUE VErbindung - von Marc Grote

4. Jeder Knoten hat höchstens zwei Kinder, ein linkes und ein rechtes.

Einführung in PHP. (mit Aufgaben)

Die Lernumgebung des Projekts Informationskompetenz

Interaktive Medien Richtlinien für das Codieren Version vom 18. Juni 2014

Die Post hat eine Umfrage gemacht

Suche schlecht beschriftete Bilder mit Eigenen Abfragen

Übersicht. Eclipse Foundation. Eclipse Plugins & Projects. Eclipse Ganymede Simultaneous Release. Web Tools Platform Projekt. WSDL Editor.

Ein Blick voraus. des Autors von C++: Bjarne Stroustrup Conrad Kobsch

Einführung in Generatives Programmieren. Bastian Molkenthin

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom b

Abacus Formula Compiler (AFC)

Facebook I-Frame Tabs mit Papoo Plugin erstellen und verwalten

Kurzfassung der Studienarbeit

Software Engineering Klassendiagramme Assoziationen

WhiteStarUML Tutorial

Die Programmiersprache Java. Dr. Wolfgang Süß Thorsten Schlachter

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Motivation. Formale Grundlagen der Informatik 1 Kapitel 5 Kontextfreie Sprachen. Informales Beispiel. Informales Beispiel.

Comparing Software Factories and Software Product Lines

Version 0.3. Installation von MinGW und Eclipse CDT

Gambio GX2 FAQ. Inhaltsverzeichnis

Programmieren was ist das genau?

Klassenentwurf. Wie schreiben wir Klassen, die leicht zu verstehen, wartbar und wiederverwendbar sind? Objektorientierte Programmierung mit Java

TTS - TinyTimeSystem. Unterrichtsprojekt BIBI

Ordner Berechtigung vergeben Zugriffsrechte unter Windows einrichten

Wann ist eine Software in Medizinprodukte- Aufbereitungsabteilungen ein Medizinprodukt?

[Customer Service by KCS.net] KEEPING CUSTOMERS SUCCESSFUL

Praktikum Compilerbau

Integration mit. Wie AristaFlow Sie in Ihrem Unternehmen unterstützen kann, zeigen wir Ihnen am nachfolgenden Beispiel einer Support-Anfrage.

C++11 C++14 Kapitel Doppelseite Übungen Musterlösungen Anhang

Kompilieren und Linken

Willkommen zur Vorlesung. Objektorientierte Programmierung Vertiefung - Java

Java Entwicklung für Embedded Devices Best & Worst Practices!

SWT II Projekt. Chat - Anwendung. Pflichtenheft 2000 SWT

Internet Explorer Version 6

Was ist PDF? Portable Document Format, von Adobe Systems entwickelt Multiplattformfähigkeit,

1. Einführung. 2. Ändern oder Anlegen einer Zahlungsbedingung

Grundlagen der Informatik II. Teil I: Formale Modelle der Informatik

Anleitung Typo3-Extension - Raumbuchungssystem

Analyse und Toolevaluierung

Online Newsletter III

Ihre Interessentendatensätze bei inobroker. 1. Interessentendatensätze

Anleitung zum Extranet-Portal des BBZ Solothurn-Grenchen

Übung: Verwendung von Java-Threads

A1.7: Entropie natürlicher Texte

SharePoint Demonstration

Generatives Programmieren

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Anleitung - Archivierung

Comtarsia SignOn Familie

Anwendungsbeispiele Sign Live! Secure Mail Gateway

Wurzeln als Potenzen mit gebrochenen Exponenten. Vorkurs, Mathematik

Transkript:

Domainspezifische Sprachen Eine Einführung und Vertiefung am Beispiel des Eclipse Xtext Framework Mirko Heinold Institut für Informatik Christian-Albrechts-Universität zu Kiel Arbeitsgruppe Kommunikationssysteme 1. März 2012 1 / 37 Mirko Heinold Domainspezifische Sprachen

Übersicht Domänenspezifische Sprachen 1 Domänenspezifische Sprachen Was ist eine DSL Arten von DSLs Entwurfsziele Vor- und Nachteile 2 3 2 / 37 Mirko Heinold Domainspezifische Sprachen

Definition Domänenspezifische Sprachen Was ist eine DSL Arten von DSLs Entwurfsziele Vor- und Nachteile Domain Specific Language (noun) a computer programming language of limited expressiveness focused on a particular domain [Fowler, 2006] 3 / 37 Mirko Heinold Domainspezifische Sprachen

Was ist eine DSL Arten von DSLs Entwurfsziele Vor- und Nachteile Was ist eine Domänenspezifische Sprache (DSL) Eine Programmiersprache für eine Domäne Mit beschränkter Ausdrucksfähigkeit Nicht zwangsläufig Turing unvollständig Meist geringer Umfang Auf die Domäne und deren Problem und Eigenschaften zugeschnitten Lange Tradition beispielsweise in der Unix Welt 4 / 37 Mirko Heinold Domainspezifische Sprachen

Wo helfen uns DSLs Was ist eine DSL Arten von DSLs Entwurfsziele Vor- und Nachteile Beim Abstrahieren von Problemen einer Domäne Beispiel: Umschreibung von gültigen Konstrukten in Programmiersprachen Eine Gleitpunktkonstante besteht aus einen ganzzahligen Teil, einen Dezimalpunkt, einem Dezimalbruch, dem Zeichen e oder E, einem ganzzahligen Exponenten mit optionalen Vorzeichen und einem optionalen Typ-Suffix, nämlich einem der Buchstaben f, F, l oder L. Ganzzahligen Teil und Dezimalbruch sind Ziffernfolgen. Entweder der ganzzahlige Teil oder der Dezimalbruch kann fehlen (aber nicht beide); entweder der Dezimalpunkt oder der Exponent beginnend mit e kann fehlen (aber nicht beide). [Kernighan and Ritchie, 1990] 5 / 37 Mirko Heinold Domainspezifische Sprachen

EBNF als Beispiel einer DSL Was ist eine DSL Arten von DSLs Entwurfsziele Vor- und Nachteile Erweiterte Backus-Naur-Form (EBNF) ist eine Sprache für die Domäne der Darstellung von kontextfreien Grammatiken 1 float_lit = decimals "." [ decimals ] [ exponent ] 2 decimals exponent 3 "." decimals [ exponent ]. 4 5 decimals = decimal_digit { decimal_digit }. 6 7 exponent = ( "e" "E" ) [ "+" "-" ] decimals. 8 9 decimal_digit = "0"..."9". Beispiel: http://golang.org/doc/go_spec.html 6 / 37 Mirko Heinold Domainspezifische Sprachen

Was ist eine DSL Arten von DSLs Entwurfsziele Vor- und Nachteile Abgrenzung DSLs zu anderen Sprachen Weitere Beispiele für DSLs sind: SQL make HTML Reguläre Ausdrücke *.jpg Keine DSLs sind: General purpose Sprachen wie Java, C, Ruby, JavaScript... 7 / 37 Mirko Heinold Domainspezifische Sprachen

Externe DSLs Domänenspezifische Sprachen Was ist eine DSL Arten von DSLs Entwurfsziele Vor- und Nachteile Komplett eigenständige Sprache Eigene Syntax Ein vollständiger Parser wird geschrieben Meist mittels Parsergenarator Beispiele: EBNF, SQL... 8 / 37 Mirko Heinold Domainspezifische Sprachen

Interne (embedded) DSL Was ist eine DSL Arten von DSLs Entwurfsziele Vor- und Nachteile General purpose Sprache wird als Hostsprache verwendet DSL Code ist gültiger Code der Hostsprache Syntax der Hostsprache wird verwendet Dennoch ist die entstandene DSL eine eigene Sprache Kein neuer Standard Textparser für die Sprache nötig Weniger Freiheiten als bei externen DSLs Hostsprache DSL 9 / 37 Mirko Heinold Domainspezifische Sprachen

Was ist eine DSL Arten von DSLs Entwurfsziele Vor- und Nachteile Rake als Beispiel für eine Interne DSL Rake ist ein Make für Ruby Nutzt Ruby Syntax und ist gültiges Ruby Programm Hat eigenes typisches Aussehen und nutzt spezielle Bibliotheken 1 file main.o => ["main.c", "greet.h"] do 2 sh "cc -c -o main.o main.c" 3 end 4 5 file greet.o => [ greet.c ] do 6 sh "cc -c -o greet.o greet.c" 7 end 8 9 file "hello" => ["main.o", "greet.o"] do 10 sh "cc -o hello main.o greet.o" 11 end Beispiel: http://rake.rubyforge.org/ 10 / 37 Mirko Heinold Domainspezifische Sprachen

Ziele beim Entwurf einer DSL Was ist eine DSL Arten von DSLs Entwurfsziele Vor- und Nachteile Einfachheit Sich selbst dokumentierender Code Ideales Abbilden der zugehörigen Domäne Für Domänenexperten gut verständlich 11 / 37 Mirko Heinold Domainspezifische Sprachen

Vorteile Domänenspezifische Sprachen Was ist eine DSL Arten von DSLs Entwurfsziele Vor- und Nachteile Deckt sehr individuelle Anforderungen ab Steigert Effizienz Vermeidet Fehler bei Entwicklung Ermöglicht einfacheren Zugang zu einer Domäne Ermöglicht Abstraktionen von Problemen Für Domänenexperten beherrschbar Domänenspezifische Anforderungen können validiert werden 12 / 37 Mirko Heinold Domainspezifische Sprachen

Nachteile Domänenspezifische Sprachen Was ist eine DSL Arten von DSLs Entwurfsziele Vor- und Nachteile Die DSL muss teuer entwickelt werden Nur mit guter Tool-Unterstützung brauchbar Gefahr von Fehlentwicklungen und schlechtem Design Domäne muss genau verstanden sein Domänenexperten mit großer Erfahrung nötig Langfristig benötigte Eigenschaften müssen verstanden werden Geeignete Abstraktionen müssen gefunden werden Neue Sprache muss gelernt werden 13 / 37 Mirko Heinold Domainspezifische Sprachen

Nachteile Domänenspezifische Sprachen Was ist eine DSL Arten von DSLs Entwurfsziele Vor- und Nachteile Wenig Support Geringe Userbasis Geringe Codebasis/ kaum Beispiele vorhanden wenig Webhilfe kaum Dienstleister Gefahr der Hinentwicklung zu einer general purpose Programmiersprache Ausführbarer DSL-Code nicht performant Schwieriges Einbetten in andere Software und Sprachen 14 / 37 Mirko Heinold Domainspezifische Sprachen

15 / 37 Mirko Heinold Domainspezifische Sprachen

Was ist Xtext? Domänenspezifische Sprachen Ein Framework zum einfachen Entwickeln textueller DSLs Stellt mehrere DSLs dafür zur Verfügung Beinhaltet APIs dafür Eclipse Plug-in Erlaubt Erstellen von DSLs durch Definition einer Grammatik Erzeugt für erstellte DSL automatisch ein Editor als Eclipse-Instanz 16 / 37 Mirko Heinold Domainspezifische Sprachen

Ziele von Xtext Domänenspezifische Sprachen DSLs Entwickeln soll einfacher werden Entwicklungszeit und Kosten sollen reduziert werden Toolunterstützung für DSLs soll einfacher und besser werden 17 / 37 Mirko Heinold Domainspezifische Sprachen

Beispiel: DSL für Umfragen 18 / 37 Mirko Heinold Domainspezifische Sprachen

Aussehen unserer DSL für Umfragen 1 Poll "Evaluation" 2 3 Question "Geben Sie Ihren Namen ein" name 4 5 Question "Wie fanden Sie das Seminar?" bewertung 6 () "1 (Sehr Gut)" sehrgut 7 () "2 (Gut)" gut 8 () "3 (Befriedigend)" befriedigend 9 () "4 (Ausreichend)" ausreichend 10 () "5 (Mangelhaft)" mangelhaft 11 12 Question "Was kann verbessert werden?" verbesserungen 13 [] "Schrift" schrift 14 [] "Beamer" beamer 15 [] "Schokolade fuer alle" schokolade 19 / 37 Mirko Heinold Domainspezifische Sprachen

Was wir aus der Sprache generieren wollen 20 / 37 Mirko Heinold Domainspezifische Sprachen

Grammatik für diese Sprache (1) 1 grammar org.xtext.example.mydsl.simplepolldsl with org.eclipse. xtext.common.terminals 2 3 generate simplepolldsl "http://www.xtext.org/example/mydsl/ SimplePollDSL" 4 5 Poll: 6 "Poll" description=string 7 (questions+=question)* 8 ; 9 10 Question: 11 TextQuestion SingleChoiceQuestion MultipleChoiceQuestion 12 ; Beispiel von Peter Friese, itemis 21 / 37 Mirko Heinold Domainspezifische Sprachen

Grammatik für diese Sprache (2) 14 TextQuestion: 15 "Question" title=string name=id; 16 17 SingleChoiceQuestion: 18 "Question" title=string name=id 19 (options+=singlechoiceoption)+; 20 21 MultipleChoiceQuestion: 22 "Question" title=string name=id 23 (options+=multiplechoiceoption)+; 24 25 SingleChoiceOption: 26 "()" title=string name=id 27 ; 28 29 MultipleChoiceOption: 30 "[]" title=string name=id 31 ; 22 / 37 Mirko Heinold Domainspezifische Sprachen

Xtext Grammatik Domänenspezifische Sprachen Es gibt eine Xtext Grammar Language Diese erinnert an EBNF und reguläre Ausdrücke Ist selbst eine DSL Beschreibt die Syntax der Sprache Enthält auch Informationen zum vom Parser erzeugten Modell 23 / 37 Mirko Heinold Domainspezifische Sprachen

Livedemo 1 Domänenspezifische Sprachen Demo, um den generierten Code und Editor zu zeigen 24 / 37 Mirko Heinold Domainspezifische Sprachen

Editor Domänenspezifische Sprachen Wird Automatisch generiert Code Completion Syntax Highligthing Syntax Überprüfung Weiter Fehlererkennung möglich Outlining Referenzen über Dateigrenzen hinweg möglich Im hohen Maße anpassbar 25 / 37 Mirko Heinold Domainspezifische Sprachen

Zurück zum Thema Code Generierung 26 / 37 Mirko Heinold Domainspezifische Sprachen

Xtend-Code zur HTML-Code Generierung (1) 24 def tohtmlcode(poll p) 25 <html> 26 <head> 27 <title>poll</title> 28 </head> 29 <body> 30 <p> 31 <h2>«p.description»</h2> <br /> 32 «FOR question : p.questions» 33 <br /> 34 «question.generatecode» 35 «ENDFOR» 36 </p> 37 <p> 38 <input type="submit" value="submit" /> 39 </p> 40 </body> 41 </html> 42 27 / 37 Mirko Heinold Domainspezifische Sprachen

Xtend-Code zur HTML-Code Generierung (2) Auszug aus der Funktion generatecode(question question) 44 def generatecode(question question) { 45 if (question instanceof SingleChoiceQuestion){ 46 var String s 47 s = question.title + "<br />\n" 48 for(singlechoiceoption op: (question as SingleChoiceQuestion).options){ 49 s = s + "<input type=\"radio\" name=\"" + question.name 50 + "\" value=\"" + op.name + "\" />" + op.title + "<br />\n" 51 } 52 return s 53 }else if(question instanceof MultipleChoiceQuestion){ 28 / 37 Mirko Heinold Domainspezifische Sprachen

Livedemo 2: Generierung des Zielcodes 29 / 37 Mirko Heinold Domainspezifische Sprachen

Xtend Domänenspezifische Sprachen Funktionale Features Statisch getypt Stark an Java angelehnt Kompiliert zu lesbarem Java-Code Toolunterstützung durch Eclipse IDE Typ Inferenz 30 / 37 Mirko Heinold Domainspezifische Sprachen

Unterstützung zum Übersetzen und Interpretieren Graph bzw. Abstrakter Syntax Baum wird erzeugt Darstellung und Zugriff mit dem Eclipse Modeling Framework (EMF) Kann gesehen werden als mächtige Java Beans Variante Struktur und Objekte lassen sich in Grammatik festlegen Ausgangspunkt für Übersetzung und Interpreter Wir erhalten Parser und Serialisierer Übersetzung also bi-direktional von der Grammatik zum AST und andersrum 31 / 37 Mirko Heinold Domainspezifische Sprachen

Übersicht mit Xtext 32 / 37 Mirko Heinold Domainspezifische Sprachen

Weitere Tools zum DSL Entwurf (1) Lex und Yacc Helfen beim Schreiben eines Compilers für die DSL Parsen und Syntax Check wird auf Basis einer Grammatik durchgeführt Keine weiteren Tools und Unterstützungen MetaEdit+ Bietet mehr als einen Parser Kein automatisch erstellter Editor Kommerziell Unterstützt Entwicklung vom Modell zum Code 33 / 37 Mirko Heinold Domainspezifische Sprachen

Weitere Tools zum DSL Entwurf (2) MPS Meta Programming System Open-Source-Software Soll Erweitern von Sprachen vereinfachen DSL Entwurf auch möglich Konzept: Code wird nicht mehr als Text sondern als AST vorgehalten Microsoft DSL Tools Eingebettet in Visual Studio Erleichtert ebenfalls DSL Entwurf Generiert keinen Editor für erstellte DSL 34 / 37 Mirko Heinold Domainspezifische Sprachen

Domänenspezifische Sprachen hat sich mit Xtext deutlich weiterentwickelt Einfach und leicht zugänglich Hohe Qualität der erzeugten DSLs DSLs schneller realisierbar Automatisch erstellter Editor steigert Wert deutlich Aber... Gutes Sprachdesign ist kompliziert DSLs entwickeln bleibt zusätzlichen Aufwand Automatische Festlegung auf Java und Eclipse Technologie 35 / 37 Mirko Heinold Domainspezifische Sprachen

Gibt es Fragen? Domänenspezifische Sprachen Autor Comic: Randall Munroe, Quelle: http://xkcd.com/303/, CC-by-nc 36 / 37 Mirko Heinold Domainspezifische Sprachen

Funktionsdetails der Xtext Grammar Language Anzahl erlaubter Anwendungen der Grammatik Regeln:? 0 oder 1 mal + mindestens 1 mal * beliebig oft Weitere Regeln: Oder [] Referenz auf eine Regel der Grammatik {} Erzwingt Erstellung eines bestimmten Typs 37 / 37 Mirko Heinold Domainspezifische Sprachen

Fowler, M. (2006). Introducing domain specific languages. Kernighan, B. and Ritchie, D. (1990). Programmieren in C. Hanser Verlag. 37 / 37 Mirko Heinold Domainspezifische Sprachen