Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Domänenspezifische Programmiersprachen

54 views

Published on

Course "Domain-specific programming languages" (http://dsl-course.org). Preliminary translation into German. Provided "as is", may require corrections.

Published in: Software
  • Be the first to comment

  • Be the first to like this

Domänenspezifische Programmiersprachen

  1. 1. Domänenspezifische Programmiersprachen Åbo Akademi University Mikhail Barash mikhail.barash@abo.fi http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  2. 2. Zoo von domänenspezifischen Sprachen http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  3. 3. HTML TextformatierungProgramm hat Struktur keine Schleifen keine Bedingungen Programmiersprache Domäne von Hypertext-markup http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  4. 4. Markdown Domäne Textformatierung keine Schleifen keine Bedingungen http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  5. 5. CSS http://sass-lang.comSASS CSS Programmiere ”Web-designer” CSS Programm gelesen geschrieben Domänenexperten deklarativ kein ”zuerst dies, dann das” zielgerichtete Rolle im Web-Ecosystem die gesamte App mit CSS verrückte Idee funktioniert mit verschiedenen anderen Sprachen Farben nennen und sich darauf beziehen nicht möglich Mangel an mathematischen Funktionen begrenzter Umgang mit Fehlern neues DSL! DSL als eine Schicht auf einer anderen DSL http://lesscss.org/LESS http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  6. 6. SQL Domäne relationale Datenbanken QUEL Anfragesprachen Ingres Datenbank deklarativ hat verfahrenstechnische Elemente Turing-vollständig PL/SQL SQL92 Standard ist nicht Turing-vollständig beschrieben von vielen als http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  7. 7. LaTeX Domäne Dokumenten Layout hat Schleifen hat Bedingungen foreach n in {Äpfel,Salat,Kuchen} {Lasst uns n essen.par} Lasst uns Äpfel essen. Lasst uns Salat essen. Lasst uns Kuchen essen. Turing-vollständig Macros de facto ein Standard für mathematische Paper http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  8. 8. Graphviz Domäne grafisches rendern keine Schleifen DOT Sprache keine Bedingungen rein deklarativ githubnidi3 graphviz-java @ Graph g = graph("example1") .directed() .with( node("a") .link( node("b") ) ); Methoden Verkettung flüssiges Interface internes DSL http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  9. 9. Logo Schildkröten Grafik Domäne Grafik http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  10. 10. Scratch-artige Sprachen der Code ist nicht in Textform Sprache = Text ? http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  11. 11. LEGO Mindstorms NXT Domäne Programmieren eines LEGO Robotes Scratch-artig textlos Bricx LEJOS C-basiert http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  12. 12. Sprache von Anwenderhandlungen eingegebener Wert hat die Schaltfläche angeklickt ein zulässiges Programm ChangedFirstName ChangedLastName Clicked Domäne Benutzerinteraktion mit dem System “beschreibende Sprache” http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  13. 13. DSL für Grafiken Kreis(10,20,blau,10) Quadrat(15,25,grün) Kreis(25,20,rot,8,15) Bilder als Daten abzuspeichern texturierte Darstellung des Bildes http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  14. 14. SVG XML-basiert eine eigene Sprache? oder immer noch XML? XML Sprache der Sprachen? ”Meta” Sprache? SVG Scalable Vector Graphics http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  15. 15. XAML Domäne Bedienerinterface Layout Designoberfläche Textdarstellung qualitativ Objekte strukturieren XML http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  16. 16. XML als DSL serienreife Datenstrukturen Liste von Zuweisungen Konfigurierungsdateien unklar geschaffen durch andere Tools nicht für Menschen gedacht lesbar von Menschen menschlicher Hauptansatz um mit dem System zu interagieren wenig syntaktische Struktur INI Dateien XML http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  17. 17. XML als DSL Natur der Sprache syntaktische Struktur ohne Semantik grundlegende Syntax von DSLs graphviz-java redundante Zeichen < Code ist schwieriger zu verstehen zerstört den Sinn von DSLs ”/> = XML wie ein Programm ausgeführt wird http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  18. 18. XML als DSL serienreife Datenstrukturen gebräuchlich DSLs inkonsistent XML Konfigurierungsdateien bietet einfaches Schema solide Umgang mit Fehlern XML-Prozessoren arbeiten perfekt überprüfen auf sinnvolles XML ohne es auszuführen XML Schema DTDs XSLT Domäne Veränderung von XML Dokumenten http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  19. 19. JSON YAML http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  20. 20. Build Sprachen cmd bash Vorgang Schleife Variable Make Mischung DSL ”übliche Programmiersprache” http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  21. 21. Build Sprachen Maven XML-basiert Übersetzung von Sprachen ”freie Syntax” Domäne Erschaffung von Software-builds http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  22. 22. Microsoft Excel Domäne ”Programmierung” Excel ist eine Universalsprache? Excel Programm Text Notation tabellarische Notation grafische Notation illustrative Programmierung Zellen zeigen was das Programm tut wenn es ausgeführt wird das Program selbst ist nicht zentral http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  23. 23. LISP Clojure Domäne Listen-Verarbeitung funktionale Sprache genutzt für interne DSLs http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  24. 24. AutoLisp Domäne technische Grafiksoftware Dialekt von LISP AutoCAD http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  25. 25. COBOL Domäne Geschäft Finanz am häufigsten genutzte Programmiersprache 200 Milliarden Codezeilen 80% des weltweiten Gewerbes nutzen es 5 Mlrd. Codezeilen werden jährlich geschrieben sehr langatmige Syntax 300+ Schlüsselwörter Java nur 53 COBOL ist eine Universalsprache http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  26. 26. Prolog Domäne beigelegte Logik deklarativ Prolog ist eine Universalsprache? http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  27. 27. Isabelle/HOL Domäne automatisches Beweisen interaktives automatisches Beweisen http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  28. 28. Actulus Modeling Language http://www.diku.dk/~grue/papers/aml/aml.pdf Domäne Lebensversicherung und Pensionsprodukte http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  29. 29. Business Rule Designer http://www.flexrule.com/products/designer/ Domäne Geschäftsprozesse http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  30. 30. Solidity Domäne smart contracts http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  31. 31. Alloy Domäne Softwareentwicklung deklarativ Ausdruck struktureller Grenzen und Verhaltensweisen http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  32. 32. R Domäne statistiches Verarbeiten Datenanalyse http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  33. 33. Matlab Domäne numerische Verarbeitung Standard Kontrollstrukturen eingebaute Matrizenberechnung http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  34. 34. Projectional editing source-basiertes Bearbeitungssystem projectional Bearbeitungssystem Programm definiert durch Textdarstellung Quellcode Hauptdarstellung des ProgrammesText Darstellung des zugrundeliegenden Modells Semantisches Modell Hauptdarstellung des Programmes kann in unterschiedlichen Darstellungen angezeigt werden Programm Text Diagramme Tabellen Formen kann durch ein Textverarbeitungsprogramm gelesen und editiert werden kann durch eine spezielle Umgebung gelesen und editiert werden http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  35. 35. Projectional editing Microsoft Access http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  36. 36. Projectional editing Microsoft Frontpage http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  37. 37. Mathcad Domäne Computeralgebra Text Notation grafische Notation verbesserte Darstellung von Kontrollstrukturen Programmiersprache http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  38. 38. mbeddr eingebettet C Domäne ”Programmierung von eingebauten Geräten” Text Notation Tabellen Notation http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  39. 39. mbeddr eingebettet C grafische Notation http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  40. 40. Esoterische Sprachen LOLCODE HAI 1.2 CAN HAS STDIO? PLZ OPEN FILE "LOLCATS.TXT"? AWSUM THX VISIBLE FILE O NOES INVISIBLE "ERROR!" KTHXBYE HAI 1.0 CAN HAS STDIO? I HAS A VAR IM IN YR LOOP UP VAR!!1 VISIBLE VAR IZ VAR BIGGER THAN 10? KTHX IM OUTTA YR LOOP KTHXBYE importieren einer Bibliothek Umgang mit Fehlern Variablen Benennung Schleifenbedingung Adam Lindsay (Lancaster University) Programmiersprache Turing-vollständig http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  41. 41. Printing language Microsoft Word 1;5;12-18;25- Domäne Aufzählung der Seitenzahlen http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  42. 42. Regular expressions Domäne Textmatching http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  43. 43. MRZ Maschinenlesbare Zone Domäne ”Dateiformat” Ist das immer noch ein DSL? http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  44. 44. DSLs: was, warum, wie? http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  45. 45. Was ist ein DSL? DSL Computerprogrammiersprache begrenzter Ausdruck besondere Domäne verwendet von Menschen um ein Computer anzuweisen Minimum an Funktionen das gesamte System kann nicht in einer DSL aufgebaut werden Klarheit der Sprache der Fokus auf eine Domäne macht einen begrenzten Ausdruck sinnvoll ausführbar von einem Computer Natur der Sprache http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  46. 46. Interne vs. externe DSLs interne DSL ein besonderer Weg eine Universalsprache zu nutzen eingebettet in die Universalsprache Skript im internen DSL zulässige Code in der Host-Universalsprache benutzt nur einen Teil der Funktionen der Universalsprache wirkt wie eine spezielle Sprache Ruby on Rails wird oft als eine Ansammlung an DSLs gesehen Graph g = graph("example1") .directed() .with( node("a") .link( node("b") ) ); im Gegensatz zur Host-Universalsprache http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  47. 47. Interne vs. externe DSLs externe DSL eine eigene Sprache hat eine spezielle Syntax Skript im externen DSL gegliedert mit Textverarbeitungtechniken Unix kleine Sprachen interne DSL ein besonderer Weg eine Universalsprache zu nutzen eingebettet in die Universalsprache http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  48. 48. Command-Query APIs Methode eines Objektes command query commands queries Zurückgeben eines Wertes Verändert nicht den Zustand des Systems verändert den Zustand des Systems soll keinen Wert zurückgeben hat keine Nebenwirkungen kann mehrfach aufgerufen werden in beliebiger Einfolge ohne die Ergebnisse zu verändern hat Nebenwirkungen sollen auch allein Sinn machenNamen der Methoden obj.getName() obj.removeAt(1) obj.toString() obj.setName(’a’) http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  49. 49. Command-Query APIs Vaadin Framework domäne rich Internet applications import com.vaadin.server.VaadinRequest; import com.vaadin.ui.UI; ... @Title("My UI") public class HelloWorld extends UI { @Override protected void init(VaadinRequest request) { // Create the content root layout for the UI VerticalLayout content = new VerticalLayout(); setContent(content); // Display the greeting content.addComponent(new Label("Hello World!")); // Have a clickable button content.addComponent(new Button("Push Me!", click -> Notification.show("Pushed!"))); } } semantisches Modell http://vaadin.com http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  50. 50. Vaadin-based language HelloWorld { Component content = VerticalLayout { Component myLabel = Label { String Label caption = “Hello world!”; } Component myButton = Button { String Button caption = “Push Me!”; Function changeCaption = () { caption = “Pushed!”; } listens to click; } } } HelloWorld { VerticalLayout { Label “Hello world!”; Button “Push Me!” { when click: caption = “Pushed”; } } } TouchScript (H. Westergård, 2013) layout vertically: label “Hello world!” button “Push Me!” as myButton events for myButton: click { caption = “Pushed”; } “Hello world!” [“Push Me!”] when click on [“Push Me!”] -> [“Pushed”] zahlreiche Möglichkeiten DSL zu definieren [ ] – repräsentiert eine Schaltfläche keine Namen für Komponenten “transformation operator” ähnlich zu REBOL Syntaxview layout [text "Hello world!" button "Quit" [quit]] http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  51. 51. Warum eine DSL nutzen? Tool mit begrenztem FokusDSL ein sehr spezifisches Tool für besondere Anforderungen typisches Project nutzt ein Dutzend an DSLs erhöht Produktivität von Entwicklungen Kommunikation mit Domänenexperten alternatives Berechnungsmodell bewegt die Logik von Compile-time zu Runtime http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  52. 52. Das Warum: Entwicklungsproduktivität ist es zu kommunizierenDie Absicht eines Teilsystems DSL ist leichter zu verstehenDSL vs. Command-Query API Ästhetiknicht nur Code ist leichter zu lesen leichter Fehler zu finden leichter das System zu modifizieren begrenzte Ausdruck es ist schwieriger falsche Dinge auszudrücken DSL verpackenmerkwürdige fremde Bibliothek http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  53. 53. Das Warum: Domänenexperten Domänenexperten Code lesen Code schreiben verstehen was das System tut Fehler erkennen effektiver mit Programmierern kommunizieren Fokus auf Codelesen nicht schreiben DSL soll nicht unbedingt implementiert werden sinnvoll das System zu beschreiben Kommunikationsprobleme Domänenexperten einzubeziehen ist schwierig zahlt sich aber sehr aus http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  54. 54. Das Warum: alternatives Berechnungsmodell mainstream programming imperativ was tun und in welcher Reinfolge Bedingungen SchleifenKontrollstruktur deklarativ was soll passieren anstatt wie soll es passieren Zustandsmaschine Entscheidungstabelle http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  55. 55. Probleme mit DSLs (1) “Sprachhölle” Baukosten Sprachen sind schwer zu lernen viel einfacher zu lernenDSL einfacher als GPL man ist nicht gewohnt DSLs zu bauen kosten einer DSL Modelle helfen über Modelle nachzudenken reduzieren BaukostenDSL zu viele DSLs schlechtes DSL gutes DSL adaptiert eine schlechte Bibliothek macht den Umgang leichter Verschwendung von Wartungsressourcen weitere kosten für http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  56. 56. Probleme mit DSLs (2) Ghettosprache begrenzte Abstraktion das ganze System auf einer DSL aufgebaut es ist eine GPL! DSL einer Universalspracheentwickelt sich eventuell zu DSL soll sich auf ein spezielles Problem beziehen idealerweise keine Merkmale die nicht zum Problem passen DSL bietet Abstraktion um über betreffendes Gebiet Verhalten der Domäne wird leichter ausgedrückt verglichen mit „Basiskonstruktionen“ die Welt passt in die Abstraktion anstatt umgekehrt DSL etwas sich entwickelndes unvollendet nachzudenken http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  57. 57. Interne DSLs http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  58. 58. APIs vs. interne DSLs interne DSLAPI Unterschiedevs. sind nicht immer klar Command-Query API flüssige Schnittstellen Objekte die Reihfolge der aufgerufenen Methoden eigene Ausdrücke Verkettung von aufgerufenen Methoden jede Methode gibt ein Objekt zurück nachfolgende Aufrufe dieses Objektes ein prägnanterer Code fordert eine zulässige Folge an Aufrufen von Methoden Graph g = graph("example1").directed().with(node("a").link(node("b"))); Java Codealleinstehend machen Methoden wenig Sinn http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  59. 59. Interne DSLs interne DSL als flüssige Schnittstellen keine Möglichkeit die Syntax von Methodenaufrufen zu verändern unflexible Syntaxregeln der Host-Universalsprache Host-Universalsprache mit flexibler Syntax DSLs sehen aus wie spezielle Sprachen IDE ist sich nicht der Bedingungen in internen DSLs bewusst nur Typesystem Überprüfungen weniger in dynamischen Host-Universalsprachen every 2.days, :at => ‘4:30 am’ do reboot end Ruby Code do_something 24.hours.from_now auch Ruby Code http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  60. 60. Nested functions Car car = new CarImpl(); car.setColor(Color.WHITE); Engine engine1 = new EngineImpl(); engine1.setType(EngineType.FUEL); engine1.setPower(50); car.addEngine(engine1); Engine engine2 = new EngineImpl(); engine2.setType(EngineType.ELECTRIC); engine2.setPower(75); car.addEngine(engine2); car( color(Color.WHITE), engine( type(EngineType.FUEL), power(50) ), engine( type(EngineType.ELECTRIC), power(75) ) ); Command-Query API Kontextvariablen nicht mehr nötig Argumente werden durch ihre Position definiert umgekehrte Reihenfolge der Auswertung hierarchische Struktur durch function nesting wiedergespiegelt Probleme mit unobligatorischen Argumenten http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  61. 61. Method chaining Car car = new CarImpl(); Car.setColor(Color.WHITE); Engine engine1 = new EngineImpl(); engine1.setType(EngineType.FUEL); engine1.setPower(50); car.addEngine(engine1); Engine engine2 = new EngineImpl(); engine2.setType(EngineType.ELECTRIC); engine2.setPower(75); car.addEngine(engine2); car() .color(Color.WHITE) .engine() .power(50) .type(EngineType.FUEL) .engine() .power(75) .end(); Annahme dass der Vorgabewert der “engine type” electric ist Methoden können in jeglicher Reihenfolge aufgerufen werden Hierarchie nur durch Einrückung definiert funktioniert mit optionalen Parametern modifizierende Methoden geben das Host-Objekt zurück multiple Methoden können in einem einzelnen Ausdruck aufgerufen werden http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  62. 62. Internal DSLs in Scala Money http://github.com/lambdista/money http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  63. 63. Externe DSLs http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  64. 64. Externe DSL: einfachstes Beispiel entity A { number n text t t = “Hello World” n = 5 print t print n } entity B extends A { number m m = n print m } Sprache von Entitäten Entität ähnlich zu Java Klasse Feld kann eine andere entity ausbauen Zuweisung Druckanweisung Vererbung von Feldern keine Ausdrücke können integer, string, Boolean sein um die Entwicklung zu vereinfachen Sichtweisen Dateitypen http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  65. 65. Crashkurs für Compilerbau entity A { number amount text hi hi = “Hello World” amount = 500 print hi print n } entity B extends A { number m m = amount print m } Quellcode Lexemes finden Konstruktionen finden Kontextbedingungen kontrollieren Konstruktionen zu neuem Code bilden amount ident{ openparen 500 number IntFieldDecl = “number” ident der genaue Name des Feldes ist egal alle Variablen deklariert IntFieldDecl(ident)  “int” ident keine doppelten Variablen Typen passen in Zuweisungen lexikalischer Scanner Syntaxanalyse semantische Analyse Codegenerierung Optimierung x:=0; x:=1; wird x:=1; interne Darstellung Symboltabelle http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  66. 66. Crashkurs für Compilerbau function foo($a) { // ... } Quellcode in PHP abstrakter Syntaxbaum (AST) Interne Darstellung Programmmodell brauchbarere Darstellung des Programms kann durch Traversierung des Baumes bearbeitet werden http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  67. 67. Semantisches Modell entity A { number amount text hi hi = “Hello World” amount = 500 print hi print n } entity B extends A { number m m = amount print m } semantisches Modell zeigt das gleiche was DSL beschreibt Beispiel Separation of Concerns zwischen Sprache und Semantik Objektmodell kann andere Formen annehmen A: amount like 0, hi like ’a’ hi is ‘Hello world’ amount is 500 @hi @amount (A)B: m like 0 m is amount @m mögliche andere Syntax für diese DSL Metamodell http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  68. 68. Semantisches Modell vs. AST semantisches Modell HelloWorld { Component content = VerticalLayout { Component myLabel = Label { String Label caption = “Hello world!”; } Component myButton = Button { String Button caption = “Push Me!”; Function changeCaption = () { caption = “Pushed!”; } listens to click; } } } TouchScript (H. Westergård, 2013) abstrakter Syntaxbaum (AST) http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  69. 69. Parsergenerators erzeugt automatisch den Zerteilter der Beschreibung der Grammatik entity A { number amount text hi hi = “Hello World” amount = 500 print hi print n } entity B extends A { number m m = amount print m } Entity  ‘entity’ ident [‘extends’ ident] ‘{‘ {FieldDeclaration} {Statement} ‘}’ FieldDeclaration  (‘number’ | ‘text’) ident Statement  Assignment | Print Assignment  ident ‘=‘ Expression Expression  integer_value | ident Print  ‘print’ Expression Grammatik [ ] – für optionale Teile { } – für Teile, die beliebig oft wiederholt werden ( ) – für gruppieren | – für Alternativen lex/yacc CoCo/R ANTLR http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  70. 70. Eine Grammatik schreiben Ohm Editor https://ohmlang.github.io/editor/ http://tinlizzie.org/~awarth/live2016/ abstrakter Syntaxbaum http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  71. 71. Implementierung von DSLs in der Praxis http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  72. 72. Was wird gebraucht? definiere Lexer und Parser benutze einen Parsergenerator transformiere abstrakter Syntaxbaum ziehe das Modell löse die Verweise entwickle Validation implementier ein Typsystem interpretiere oder kompiliere das Modell entwickle einen einfachen Editor für die Sprache ident = letter {letter} IfStmt = ”if” ”(” BoolExpr ”)” {Stmt} class If extends Stmt { int x=1; int y=x+5; bool x; if (x>5) { weight x = 15 mm; load x; load y; add; http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  73. 73. Codegenerierung Interpretation Befehle direkt ausgeführt Compilation in einer anderen Sprache Code generieren Transpilation source-to-source compiler nicht nötig die Maschinensprache zu kompilieren langsam die Maschinensprache Java  C# http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  74. 74. IDE Integration DSL soll mit dem DSL versandt werdenmächtiges IDE Akzeptanz & Erfolg von DSL Code lesen Code validieren Code ausführen IDE Syntax-erkennender Editor nicht der Fall für interne DSLs sofortiges Feedback Fehler werden gemeldet wenn sie entstehen stufenweises Syntax checken Code wird validiert wenn er geschrieben wird schlägt Korrektur vor quickfixes auto-completion http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  75. 75. http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  76. 76. Syntaxhervorhebung Programm farbig formatiert KommentareSchlüsselwörter Stringsnicht nur kosmetisch sofortiges Feedback von syntaktischer Richtigkeit was geschrieben wurde http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  77. 77. Hintergrund Validation Programm schreiben speichern Command Line Compiler ausführen neu schreibenFehler Fehler zu spät gefunden Programmierumgebung Ständiges Checken des Code wenn der Programmierer schreibt selbst wenn die aktuelle Datei nicht gespeichert ist Hervorheben von Fehlern im Hintergrund direkt im Editor     http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  78. 78. Content Assist macht Vorschläge wie die gesamte Anweisung vervollständigt werden muss automatischauf Abruf http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  79. 79. Hyperlinking und Hovering zwischen Referenzen navigieren besonders nützlich wenn die Deklaration in einer anderen Datei ist hovering: zeigt ein pop-up Fenster mit Info über die Elemente http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  80. 80. Quickfixes Testgetriebene Entwicklung einen Test, der die Methode aufruft, schreiben quickfix macht es der Test muss vor dem Code geschrieben werden http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  81. 81. Language Workbenches http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  82. 82. Language Workbenches die Umgebung schnelle Implementierung der Sprachen die gesamte Infrastruktur abgedeckt Parser Codegenerator Interpreter IDE support hilft neue DSLs erstellen high-quality tooling Erforderlich um diese DSLs effektiv zu nutzen wirksam language workbench externe http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  83. 83. Xtext Java-basiert textuelle Sprache http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  84. 84. Spoofax Stratego/XT textuelle Sprache akademisch http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  85. 85. MPS Meta Programming System kein Parsing erforderlich textuelle Sprache Tabellen Diagramme projectional workbench http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  86. 86. INTENTIONAL projectional http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  87. 87. INTENTIONAL projectional http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  88. 88. MetaEdit+ grafisch grafische Modellierung http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  89. 89. The Whole Platform projectional akademisch http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  90. 90. Cedalion akademischprojectional http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  91. 91. MontiCore akademisch textuelle Sprachen http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  92. 92. Tutorial on Xtext http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  93. 93. open-source generiert Parser generiert semantisches Modell für abstrakten Syntaxbaum Eclipse Modeling Framework generiert anpassungsfähiges Eclipse-basiert IDE benutzt ANTLR Syntaxhervorhebung Code Completion Outline View Code Navigation Hovering Code Folding Rename Refactoring Mehr über Xtext Support für IntelliJ IDEA http://www.jetbrains.com/idea DSL Editor für Web Java servlet http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  94. 94. Neues Xtext Projekt *.entities – Definition von Grammatik und UI-unabhängige Laufzeitkomponenten *.entities.ide – Eclipse-unabhängige UI-komponenten *.entities.tests – UI-unabhängige JUnit Tests *.entities.ui.tests – UI-abhängige JUnit Tests *.entities.ui – Eclipse-bezogene Komponenten http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  95. 95. Den Editor Ausprobieren http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  96. 96. Grammatik Schreiben darf Felder enthaltenEntität Feld hat ein Name * für beliebige viele Wiederholungen, auch 0 + für beliebige viele Wiederholungen, aber mindestens 1 Sammlung von Entitäten des Modells Sammlung von Felder einer Entität “Sprache der Entitäten” Name des Feldes übliche Terminals (wie ID, INT) soll mindestens eine Entität enthaltenModell Duplikate erlaubt – wird später berichtigt http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  97. 97. Grammatik Schreiben Entität Feld hat Typ (bestehende Entität ) kann Array sein [Notion] –wird auf eine existierende Instanz von Notion bezogen Lehrzeichen nicht erlaubt zwischen eckigen Klammern kein Lehrzeichen zwischen den Klammern (Notion)? – optional flag name – wird genutzt um Deklarationen zu überprüfen kann eine andere bestehende Entität ausdehnen http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  98. 98. Grammatik Schreiben Leerzeichen erlaubt Arrays sollen eine Länge haben Übliche Terminals ID INT STRING ML_COMMENT SL_COMMENT WS beginnt nicht mit einer Nummer Integer Wert einfache/doppelte Gänsefüßchen Java-style (mehrzeiliger) Java-style (einzeiliger) Leerzeichen, Tab, … http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  99. 99. Grammatik Schreiben Feld hat Typ vereinfacht, die Arrays weggelassen “einfacher Typ” “Entität Typ” entweder oder string integer Boolean bestehende Entität unterschiedliche Namen verwendet wegen des Beispiels ...|... – Alternativen (...) – Gruppierung http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  100. 100. Grammatik Schreiben kann Anweisungen enthaltenEntität druckt einen AusdruckAnweisung Ausdruck integer Konstante string Konstante Boolean Konstante Name des existierenden Feldes zuerst – alle Felder, dann alle Ausdrücke Expression: IntConstant | StringConstant | BoolConstant | FieldRef; IntConstant: value=INT; StringConstant: value=STRING; BoolConstant: value=(‘on’|’off’); FieldRef: field=[Field]; http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  101. 101. Grammatik Schreiben zuerst – alle Felder, dann alle Ausdrücke ZuweisungAnweisung zu einem bestehenden Feld http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  102. 102. Eclipse Modeling Framework EMF bietet Einrichtungen zum Code generieren um Applikationen zu bauen, die auf strukturierten Datenmodellen beruhen Modellspezifikation kann mit UML gemacht werden Xtext leitet ein EMF-Metamodell automatisch für DSL ab benutzt EMF um abstrakten Syntaxbaum zu erschaffen kann auch ein existierendes Metamodell benutzen & Grammatik erstellen müssen durch Static Factory kreiert werden Felder (Features) wird durch getters und setters initialisiert oder auf anderem Wege Instanzen von EMF-Klassen http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  103. 103. Ecore Modell Features Sammlung von Entitäten des Modells EMF-Analogie für string Referenz Referenz Feature name – beim Auflösen von Querverweisen, werden Objekte mit diesem Feature geprüft Klassenhierarchie Basistyp erweitert Basistyp BasicType, EntityType werden Subklassen von FieldType http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  104. 104. Ecore model IntConstant, StringConstant, BoolConstant, FieldRef werden Subklassen von Expression PrintStatement, AssignmentStatement werden Subklassen von Statement als string dargestellt wenn beide PrintStatement und AssignmentStatement Feature expression haben, dann hätte Statement einen Feld expression Feature expression Feature expr keine Felder http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  105. 105. Eclipse Modeling Framework entity A { } entity B extends A { n number number n } http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  106. 106. Validations http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  107. 107. Xtend statische Typisierung Java-artige Sprache Universalsprache ein besseres Java mit weniger “Störungen” kompatibel mit Java man kann Java Bibliotheken wiederverwenden Java Typsystem generics annotations prägnantere Syntax Typinferenz Erweiterungsmethode Multimethode Multiline Template Expressions Xtend Programme ins Java übersetzt Xtend Sprache mit Xtext implementiert kann auch unabhängig von Xtext benutzt werden http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  108. 108. Beispiel von Xtend Code weniger wortreich als Java optionale Strichpunkte Methode sind public vorgegeben http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  109. 109. Xtend Methode, Felder und Variablen keine Anweisungen alles ist ein Ausdruck der letzter Ausdruck ist return-AusdruckMethode wiedergegebener Typ kann weggelassen werden wenn man ihn ableiten kann Typen müssen immer spezifiziert werden Methodenparameter bedingungslos final (immutable)Methodendefinition: entweder def oder override mehrere Klassen können in einer Datei definiert werden private voreingestelltFeld http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  110. 110. Xtend Felder und Variabler val für final var für non-final == === vergleicht die Werte von Objekten ruft equals Methode auf object identifier equality in Java final Felder und Variablen müssen initialisiert werden o.getName()getters und setters o.name o.setName(...) o.name() = ... http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  111. 111. Xtend Erweiterungsmethode UFCS Uniform Function Call Syntax wie in der Programmiersprache D f(x) x.f() x.f f ist nicht in MyType definiert neue Methoden werden existierenden Typen hinzugefügt die Idee ist ähnlich von class helpers als ob f eine Methode von Klasse MyType wäre MyType x ... wie in Delphi Klammern weglassen http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  112. 112. Xtend Erweiterungsmethode Erweiterungsfeld von Type T in Klasse A – Methoden von T werden Erweiterungsmethoden in A Erweiterungsvariable – im Codeblock Erweiterungsparameter – im Methodenkörper Name ist optional Methoden, die in einer Xtend Klasse definiert werden, können als Erweiterungsmethoden benutzt werden http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  113. 113. Xtend Implizite Variable it class ItExamples { def func1(String it) { return toLowerCase // it.toLowerCase } def func2(String s) { var it = s toLowerCase // it.toLowerCase } } ähnlich von this alle Mitglieder von this sind in Instanzmethoden verfügbar alle Klassenmitglieder von it sind implizit verfügbar http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  114. 114. Xtend Verbesserte switch-Ausdrücke def String switchExample(Entity e, Entity specialEntity) { switch e { case e.name.length > 0: “has a name” case e.superType != null: “inherits some entity” case specialEntity: “equals to special entity” default: “nothing” } } switch Wert – jede Objektreferenz Boolean – trifft zu, wenn „true„ nicht Boolean – verglichen durch equals Boolean – trifft zu, wenn „true„ http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  115. 115. Xtend Verbesserte switch-Ausdrücke def toString(FieldType fieldType) { switch (fieldType) { BasicType : fieldType.typeName EntityType : fieldType.entity.name } } in Java geht durch alle zutreffenden Fälle keine Notwendigkeit für explizite break Anweisungen hat keine break AnweisungenXtend Type Guards die Fälle werden in Reihenfolge ausgewertet der Fall trifft nur zu, wenn switch-Werte mit dem Typ übereinstimmen nur der ausgewählte Fall wird ausgeführt http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  116. 116. Xtend Polymorphic method invocation method overloading statischer Mechanismus Auswahl der Methode laut dem statischen Typ von Argumenten Klassenhierarchie: Basisklasse AnyType zwei Klassen NumberType, TextType Methode typeToString ist in anderer Klasse definiert static overloading würde AnyType nutzen NumberType erwünscht – ist nur bekannt während der Laufzeit multiple dispatch Methode ausgewählt laut dem Laufzeittyp von Argumenten http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  117. 117. Xtend Lambda-Ausdrücke val l = [String s, int i | s + i] println(l.apply(“s”, 10)) val (String, int)=>String l = [String s, int i | s + i] val (String, int)=>String l = [s, i | s + i] def execute( (String, int)=>String f ) { f.apply(“s”, 10) } execute([s, i | s + i]) val list = newArrayList(“John”, “Mary”, “David”, “Alice”) Collections.sort(list, [arg0, arg1 | arg0.compareToIgnoreCase(arg1)]) Collections.sort(list) [arg0, arg1 | arg0.compareToIgnoreCase(arg1)] mystrings.findFirst[s | s.startsWith(“T”)] mystrings.findFirst[it.startsWith(“T”)] mystrings.findFirst[startsWith(“T”)] anonyme Funktion kann in einer Variable gespeichert werden kann an eine Methode übergeben werden Typen für lambda-Ausdrücke Typen können weggelassen werden wenn man sie ableiten kann SAM (Single Abstract Method) die in Java als functional interfaces bekannt ist http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  118. 118. Xtend With-Operator return eINSTANCE.createPerson => [ name = “John” surname = “Smith” ] val person = eINSTANCE.createPerson person.name = “John” person.surname = “Smith” return person bindet ein Objekt an den Bereich eines Lambda-Ausdrucks Ergebnis des with-Operators ist das Objekt selbst Lambda-Ausdruck mit einzelnem Parameter binärer Operator=> Ausdrucklinker Operand rechter Operand it kann weggelassen werden führt lambda mit linkerem Operand als Argument aus Ergebnis linker Operand nachdem lambda ausgeführt wurde http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  119. 119. Standard validators Datei GenerateEntities.mwe2 Lass den Kommentar weg, um den Validator zu nutzen http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  120. 120. Custom validator Hierarchiekreislauf Name der Methode ist irrelevant Type eines einzelnen Parameters ist wichtig @Check für jede Validationsmethode Fehlermeldung wird hier erscheinen entity_SuperType mehrere Validationsmethoden mit dem gleichen Parametertyp werden aufgerufen http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  121. 121. Custom validator Groß-/Kleinbuchstaben entity_Name field_Name Markerposition Markerposition http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  122. 122. Custom validator Name des Boolean-Felds beginnt mit ‘is’ field_Type Markerposition http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  123. 123. Textuelle Modifikation Groß-/Kleinbuchstaben Quickfix vor Quickfix nach Quickfix Name der Datei mit Icon lambda-Ausdruck, der die Transformation macht Typ automatisch abgeleitet immer diese Signatur Name der Methode ist irrelevant @Fix(Problemcode) http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  124. 124. Textuelle Modifikation Groß-/Kleinbuchstaben Quickfix @Fix(Problemcode) Problemcode – ein String Datei EntitiesValidator.xtend Datei EntitiesQuickfixProvider.xtend Problemcode – Array von Strings Problemcode – eindeutig identifiziert das Problem eine variable Anzahl von issue data Argumenten kann übertagen werden http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  125. 125. Modellmodifikation Groß-/Kleinbuchstaben Quickfix Quickfix manipuliert nur das Modell aber nicht den Inhalt des Editors http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  126. 126. Modellmodifikation „supertype entfernen“ Quickfix Typ automatisch abgeleitet vor Quickfix nach Quickfix http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  127. 127. Modellmodifikation vor Quickfix nach Quickfix b geändert zu isb – Referenz wird unzulässig „‘is’ zum Namen des Boolean Feldes anhängen“ Quickfix http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  128. 128. Modellmodifikation „fehlende Entität erschaffen“ Quickfix with-Operator die Entität, die das Fehlerelement enthält Container der Entität – ganzes Modell Problemcode von standard Xtext Validator issue data enthält nicht den Elementnamen – nutze issue offset um die Position zu finden, worauf sich der fehlende Elementname bezieht vor Quickfix nach Quickfix für getContainerOfType element – das Programmelement, das sich auf die fehlende Entität bezieht http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  129. 129. Modellmodifikation „fehlendes Feld erschaffen“ Quickfix vor Quickfix nach Quickfix private Methode http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  130. 130. Modellmodifikation „fehlendes Feld erschaffen“ Quickfix with-Operator with-Operator nach Quickfix nicht formatiert gewünschte Formatierung http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  131. 131. IDE Anpassungen benutzerdefinierte Formatierung Datei GenerateEntities.mwe2 füge formatter hinzu http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  132. 132. IDE Anpassungen benutzerdefinierte Formatierung Bezug auf ENTITY__NAME, ENTITY__SUPER_TYPE umgebe extends, Namen der Entitäten und supertypes der Entitäten mit einem Leerzeichen Rücke ein was zwischen { und } steht jedes Feld ist auf einer getrennten Zeile setNewLines(int minNewLines, int defaultNewLines, int maxNewLines) neuer Formatter http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  133. 133. Codegenerierung privates Feld mit getter und setterFeld durch getters und settersZuweisung Druckanweisung System.out.println    Java Klasse (eigene Datei) für jede Entität public KlasseEntität  generierter Code http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  134. 134. Codegenerierung “verwende” nur Entitäten des Inputs resource enthält EMF Model- Darstellung des Programms Dateipfad Dateiinhalt nicht nötig – Basistyp der Hierarchie, keine speziellen Eigenschaften nicht nötig compile – wird rekursiv aufgerufen werden http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  135. 135. Xtend Multiline template expressions // Visual Basic Dim unit As String // Delphi unit:String; // Delphi .NET @unit:String; // C++ // create 10 variables // each with one tab indentation String unit1; String unit2; String unit3; ... { und } kann weggelassen werden, wenn es der einzige Ausdruck im Methodenkörper ist guillemets  Shift + Ctrl + < or > Alt + q or Q Bedingung IF … ELSE … ENDIF Schleife FOR … ENDFOR jede Ausdruck in guillemets, eingeschlossen Aufrufen einer Methode http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  136. 136. Codegenerator in Xtend Einrücken wird von Xtend auf eine kluge Weise gelöst private n; public int getN() { return n; } public void setN(int value) { this.n = value; } Entität kompilieren http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  137. 137. Codegenerator in Xtend Stringtext  intnumber  booleantoggle  Typnamen Auswahl wird Laufzeittyp von fieldType nutzen polymorphic method overloading (dispatch methods) FieldType BasicType: FieldType EntityType: FieldType http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  138. 138. Codegenerator in Xtend Anweisungen und Ausdrücke integer Wert (umgewandelt in string) string Werte in Gänsefüßchen on  true off  false http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  139. 139. Typprüfung ein Fall für jeden möglichen Typ des Ausdrucks type guide switch integer string Booleantype of a field – either a basic type (number, text, toggle) or name of an existing entity Typ des Feldes – entweder einfacher Typ (number, text, toggle) oder Name einer existierenden Entität Datei ExpressionTypeComputer.xtend Stub-Klasse manuell erstellt abstrakt http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  140. 140. Typprüfung A x – wenn Typ von Feld x Entität A ist getter und setter für entityName wie zwei Entity_Type’s verglichen werden static – um Umschreibungen von mehreren ähnlichen "type objects" zu vermeiden, die zu einem späteren Zeitpunkt problematisch wären gewünschte Java Typen zu DSL Typen zuweisen erstelle ein Objekt, der den Namen der Entität enthält Datei ExpressionTypeComputer.xtend Endversion http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  141. 141. Typprüfung rechne rechne vergleiche Typ von linkerem Teil der Zuweisung Typ von rechterem Teil der Zuweisung injiziere ExpressionTypeComputer to typeFor als Erweiterungsmethode aufzurufen Datei EntitiesValidator.xtend Dependency Injection Pattern http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  142. 142. Scoping Vererbung und Mitgliedssichbarkeit Feld name soll sichtbar sein Datei EntitiesScopeProvider.xtend spezielle Bereichsregel wenn das Feld in Ausdruck oder auf linkerem Teil der Zuweisung bezogen wird gewünschtes Verhalten (keine Fehler) Entitäten Hierarchie Nicht abgedeckt Felder einer Entität und ihrer Superentität http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.
  143. 143. Scoping Vererbung und Mitgliedssichbarkeit Datei EntitiesModelUtils.xtend manuell erstellt alle Felder von allen Entitäten in der Hierarchie alle Felder von Superentität und von ihrer Superentitäten http://dsl-course.org by Mikhail Barash. Preliminary translation into German. Provided "as is", may require corrections.

×