SlideShare ist ein Scribd-Unternehmen logo
...und was man damit anstellen kann.


               Heiko Behrens
              Eclipse DemoCamp 2009
                Hamburg 25.05.2009


   E-Mail   Heiko.Behrens@itemis.de
            Blog www.1160pm.net
Xtext?
 Xtext is a framework/tool for development of
              external textual DSLs.

       A domain-specific-language (DSL)
            in the context of modeling
        is a formal, processable language
   targeting at a specific viewpoint or aspect
               of a software system.
 Its semantics, flexibility and notation is designed
in order to support working with that viewpoint
                as good as possible.
Fuh in VU
 4. und 5.
“Wen hast Du
                 morgen in den
                 letzten beiden
                    Stunden?”


“   Fuh in VU
             ”
     4. und 5.
Aussagen von Phillipp:
Deutsch bei Müller montags in der 1. Stunde
                 kraft
     ch   Fa ehr       agL           deT          Stun
Meierrain Englisch in der 2.de
     k ft
  L
  ehr           ach     F un           St
Sport bei Sippft 3. unde 4.
  Fac
    h      e   L
            hrkr
                 a
                      d
                             S   tun

Sozi in der 5. de
 Fach        n
               Stu
Franz bei Meiert dienstags in der 2.
               kraf
  F cha    ehr L      ag          T         S   t unde

Deutsch 3. unde 4.
  Fac
    h        d
                   S   tun
Montag     Dienstag         Deutsch       Müller
   Deutsch                     Englisch       Meier
   Englisch    Franz
                                Sport         Sipp
    Sport     Deutsch
    Sport     Deutsch           Franz         Meier
     Sozi



  Protokoll          Aussage
Vorname            Lehrkraft                  Stunde
                 * Name                   * Wert
Name
                   Tag
Deutsch bei Müller montags in der 1. Stunde
Grammatik (ähnlich zu EBNF)
Protokoll :
!   quot;Aussagen vonquot; vorname=NAME nachname=NAME quot;:quot;
!   (aussagen+=Aussage)*;
!
Aussage:
!   lehrkraft=NAME quot;inquot; fach=NAME zeit=Zeit |
!   fach=NAME (quot;beiquot; lehrkraft=NAME)? zeit=Zeit;
!
Zeit:
!   (tag=Tag)? stunden+=Stunde ((quot;,quot; | quot;undquot;) stunden+=Stunde)*;
!
Stunde:
!   (quot;inquot; quot;derquot;|quot;zurquot;)? wert=INT quot;.quot; quot;Stundequot;?;
!
enum Tag:
!   unbekannt |
!   montags | dienstags | mittwochs |
!   donnerstags | freitags | samstags;
!
terminal NAME :
!   ('A'..'Z'|'Ä|'Ö'|'Ü') ('A'..'Z'|'Ä'|'Ö'|'Ü'|'-'|'a'..'z'|'ä'|'ö'|'Ü'|'ß')*;
ik
                                        at
Modell




                                      m
                                    m
                               ra
                              G

                         Superclass




                         Subclass              Class




 LL(*) Parser         ecore Metamodell                 Editor
         Xtext-Rahmenwerk (anpassbar mit Google Guice)
Demo


•   Modelldatei
•   Xtext Grammar für Aussagen zum Stundenplan
•   Java-Programm zum Laden und navigieren über Modell
•   Xpand-basierter Generator




© itemis AG 2009 – Alle Rechte vorbehalten               9
Entities (1/2)
@SuppressWarnings(quot;serialquot;)
@Entity
@Table(name = quot;CUSTOMER_INFOquot;)
public class CustomerInfo implements Serializable {

!   @Id
!   @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = quot;idSeqquot;)
!   @SequenceGenerator(name = quot;idSeqquot;, sequenceName = quot;CUST_SEQquot;, allocationSize = 1)
!   @Column(name = quot;CUST_IDquot;, nullable = false)
!   private String customerId;

!   public void setCustomerId(String customerId) {
!   !   this.customerId = customerId;
!   }

!   public String getCustomerId() {
!   !   return customerId;
!   }

!   @Column(name = quot;EMAILquot;, nullable = false, length = 128)
!   private String emailAddress;

!   public String getEmailAddress() {
!   !   return emailAddress;
!   }

!   public void setEmailAddress(String emailAddress) {
!   !   String oldValue = emailAddress;
!   !   this.emailAddress = emailAddress;
!   !   firePropertyChangedEvent(quot;emailAddressquot;, oldValue, this.emailAddress);
!   }
Entities (2/2)


entity CustomerInfo
! (id=CUST_ID, sequenceName=CUST_SEQ) {
!
! String emailAddress (notNull, length = 128)
!
}
DSLs in der Praxis
     Datenmodellierung
  Architekturbeschreibung
        Konfiguration
      Geschäftsregeln
      Dokumentation
          Mapping
Navigation auf Objektgraphen
         Constraints
        Strickmuster
              ...
Language development has never been so easy.
Xtext - und was man damit anstellen kann
Xtext - und was man damit anstellen kann
Demo
 Rezept:
 quot;Pizza mit Quark-Ölteigquot;

 Zuaten:
 1 Ei
 2el Öl
 4el Milch
 150g Quark
 260g Mehl
 1x Backpulver

 Arbeitsschritte:
 quot;Einfach alles in die Schüssel
 und umrühren, bis ein fester Teig entsteht.
 Ausrollen, auf Blech legen und belegen.quot;




© itemis AG 2009 – Alle Rechte vorbehalten     16
www.                           .org
       www.twitter.com/xtext

         Downloads
        Documentation
           Support


  Stable Version 0.7 im Juni 2009
    als Teil von Eclipse Galileo

Weitere ähnliche Inhalte

Xtext - und was man damit anstellen kann

  • 1. ...und was man damit anstellen kann. Heiko Behrens Eclipse DemoCamp 2009 Hamburg 25.05.2009 E-Mail Heiko.Behrens@itemis.de Blog www.1160pm.net
  • 2. Xtext? Xtext is a framework/tool for development of external textual DSLs. A domain-specific-language (DSL) in the context of modeling is a formal, processable language targeting at a specific viewpoint or aspect of a software system. Its semantics, flexibility and notation is designed in order to support working with that viewpoint as good as possible.
  • 3. Fuh in VU 4. und 5.
  • 4. “Wen hast Du morgen in den letzten beiden Stunden?” “ Fuh in VU ” 4. und 5.
  • 5. Aussagen von Phillipp: Deutsch bei Müller montags in der 1. Stunde kraft ch Fa ehr agL deT Stun Meierrain Englisch in der 2.de k ft L ehr ach F un St Sport bei Sippft 3. unde 4. Fac h e L hrkr a d S tun Sozi in der 5. de Fach n Stu Franz bei Meiert dienstags in der 2. kraf F cha ehr L ag T S t unde Deutsch 3. unde 4. Fac h d S tun
  • 6. Montag Dienstag Deutsch Müller Deutsch Englisch Meier Englisch Franz Sport Sipp Sport Deutsch Sport Deutsch Franz Meier Sozi Protokoll Aussage Vorname Lehrkraft Stunde * Name * Wert Name Tag
  • 7. Deutsch bei Müller montags in der 1. Stunde
  • 8. Grammatik (ähnlich zu EBNF) Protokoll : ! quot;Aussagen vonquot; vorname=NAME nachname=NAME quot;:quot; ! (aussagen+=Aussage)*; ! Aussage: ! lehrkraft=NAME quot;inquot; fach=NAME zeit=Zeit | ! fach=NAME (quot;beiquot; lehrkraft=NAME)? zeit=Zeit; ! Zeit: ! (tag=Tag)? stunden+=Stunde ((quot;,quot; | quot;undquot;) stunden+=Stunde)*; ! Stunde: ! (quot;inquot; quot;derquot;|quot;zurquot;)? wert=INT quot;.quot; quot;Stundequot;?; ! enum Tag: ! unbekannt | ! montags | dienstags | mittwochs | ! donnerstags | freitags | samstags; ! terminal NAME : ! ('A'..'Z'|'Ä|'Ö'|'Ü') ('A'..'Z'|'Ä'|'Ö'|'Ü'|'-'|'a'..'z'|'ä'|'ö'|'Ü'|'ß')*;
  • 9. ik at Modell m m ra G Superclass Subclass Class LL(*) Parser ecore Metamodell Editor Xtext-Rahmenwerk (anpassbar mit Google Guice)
  • 10. Demo • Modelldatei • Xtext Grammar für Aussagen zum Stundenplan • Java-Programm zum Laden und navigieren über Modell • Xpand-basierter Generator © itemis AG 2009 – Alle Rechte vorbehalten 9
  • 11. Entities (1/2) @SuppressWarnings(quot;serialquot;) @Entity @Table(name = quot;CUSTOMER_INFOquot;) public class CustomerInfo implements Serializable { ! @Id ! @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = quot;idSeqquot;) ! @SequenceGenerator(name = quot;idSeqquot;, sequenceName = quot;CUST_SEQquot;, allocationSize = 1) ! @Column(name = quot;CUST_IDquot;, nullable = false) ! private String customerId; ! public void setCustomerId(String customerId) { ! ! this.customerId = customerId; ! } ! public String getCustomerId() { ! ! return customerId; ! } ! @Column(name = quot;EMAILquot;, nullable = false, length = 128) ! private String emailAddress; ! public String getEmailAddress() { ! ! return emailAddress; ! } ! public void setEmailAddress(String emailAddress) { ! ! String oldValue = emailAddress; ! ! this.emailAddress = emailAddress; ! ! firePropertyChangedEvent(quot;emailAddressquot;, oldValue, this.emailAddress); ! }
  • 12. Entities (2/2) entity CustomerInfo ! (id=CUST_ID, sequenceName=CUST_SEQ) { ! ! String emailAddress (notNull, length = 128) ! }
  • 13. DSLs in der Praxis Datenmodellierung Architekturbeschreibung Konfiguration Geschäftsregeln Dokumentation Mapping Navigation auf Objektgraphen Constraints Strickmuster ...
  • 14. Language development has never been so easy.
  • 17. Demo Rezept: quot;Pizza mit Quark-Ölteigquot; Zuaten: 1 Ei 2el Öl 4el Milch 150g Quark 260g Mehl 1x Backpulver Arbeitsschritte: quot;Einfach alles in die Schüssel und umrühren, bis ein fester Teig entsteht. Ausrollen, auf Blech legen und belegen.quot; © itemis AG 2009 – Alle Rechte vorbehalten 16
  • 18. www. .org www.twitter.com/xtext Downloads Documentation Support Stable Version 0.7 im Juni 2009 als Teil von Eclipse Galileo