Xtext Webinar

10,833 views

Published on

Sven and I are going to classify Xtext compared to other concepts and frameworks and demonstrate its capabilities with a refined version of an example I presented in London the week before. After that we discuss the versatile possibilities for extending and customizing the framework and finish with an exciting outlook.

2 Comments
3 Likes
Statistics
Notes
No Downloads
Views
Total views
10,833
On SlideShare
0
From Embeds
0
Number of Embeds
219
Actions
Shares
0
Downloads
174
Comments
2
Likes
3
Embeds 0
No embeds

No notes for slide

Xtext Webinar

  1. 1. http://live.eclipse.org/node/705 Eclipse Live Webinar on Sven Efftinge, Heiko Behrens itemis
  2. 2. Agenda What is Xtext? DSLs - An Example Underlying Technology Advanced Topics Questions & Answers
  3. 3. ? What is
  4. 4. A Language Framework
  5. 5. Yet another Parser Generator? JavaCC
  6. 6. Yet another Parser Generator? t ha t! e th an smor No, it’ JavaCC
  7. 7. How does Xtext relate to ... IDE Meta-tooling Platform (IMP) Dynamic Language Toolkit (DLTK)
  8. 8. How does Xtext relate to ... IDE Meta-tooling Platform (IMP) ! at an th ore th is m X xt te Language Toolkit (DLTK) Dynamic
  9. 9. Is it a language workbench? JetBrains Meta Programming System Intentional Domain Workbench Microsoft Oslo
  10. 10. Is it a language workbench? le te ly m p rc e! it’s co s ou ut en JetBrains Meta Programming System ,b op Y es a nd as ed t ext-b Intentional Domain Workbench Microsoft Oslo
  11. 11. Xtext is a complete environment for development of textual - programming languages and - domain-specific languages. It is implemented in Java and is based on Eclipse, EMF, and Antlr.
  12. 12. Domain-Specific Language (DSL) A DSL 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.
  13. 13. Rd2-c2
  14. 14. “ Queen to c7. Check.” “ Rd2-c2 , rook at d2 moves to c2.”
  15. 15. Moves in Chess: !ook at a1 moves to a5. P iece S q uare A ction De stin ation "ishop at c8 captures knight at h3.n P iece S q uare io Action D es tinat # b1 x c3 Piece S qua re ction stination AD e $2 - g4 ation S A D quar e ction e stin
  16. 16. Rook a1 move a5 Bishop c8 capture h3 Knight Knight b1 capture c3 Queen Pawn g2 move g4 Game Move Source «enum» WhitePlayer * Destination Piece BlackPlayer Piece
  17. 17. "ishop at c8 captures knight at h3 " c8 x h3
  18. 18. Model (textfile) White: "Mayfield" Black: "Trinks" pawn at e2 moves to e4 pawn at f7 moves to g5 K b1 - c3 f7 - f5 queen at d1 moves to h5 // 1-0
  19. 19. DEMO
  20. 20. Underlying Technology
  21. 21. ar Model m m ra G Generator Runtime Superclass Subclass Class LL(*) Parser ecore meta model editor
  22. 22. Java Persistence API (JPA) package templates; import java.io.Serializable; import java.util.*; import javax.persistence.*; @SuppressWarnings("serial") @Entity public class Customer implements Serializable { ! private Long id; ! private String name; ! private Address address; ! private Set<Order> orders = new HashSet<Order>(); ! // No-arg constructor ! public Customer() { ! } ! @Id ! public Long getId() { entity Customer { ! ! return id; ! } ! property name : String ! public void setId(Long id) { ! property address : Address ! ! this.id = id; ! } ! property orders : Order[] ! public String getName() { ! ! return name; } ! } ! public void setName(String name) { ! ! this.name = name; ! } ! public Address getAddress() { ! ! return address; ! } ! public void setAddress(Address address) { ! ! this.address = address; ! } ! @OneToMany ! public Collection<Order> getOrders() { ! ! return orders; ! } ! public void setOrders(Set<Order> orders) { ! ! this.orders = orders; ! } }
  23. 23. DEMO
  24. 24. ar Model m m ra G Generator Fragments Generator Runtime Superclass Subclass Class LL(*) Parser ecore meta model editor
  25. 25. Composable Code Generator ! generator is composed of “fragments” ! fragments can contribute to: ! Manifest.MF ! plugin.xml ! Guice modules ! Add your own fragments
  26. 26. ar Model m m ra G Generator Runtime Google Guice Superclass Subclass Class LL(*) Parser ecore meta model editor
  27. 27. licensed by http://www.wordle.net/
  28. 28. MyCustomLabelProvider licensed by http://www.wordle.net/
  29. 29. Dependency Injection with Googlee !No dependency to concrete implementation !No explicit construction !Easy testing !Easy composition
  30. 30. Configuration of Components in Xtext /** * used to register components to be used within the IDE. */ public class DomainmodelUiModule ! ! extends GeneratedDomainmodelUiModule { ! ! @Override ! public Class<? extends ILabelProvider> bindILabelProvider() { ! ! return MySpecialLabelProvider.class; ! } }
  31. 31. DEMO
  32. 32. Advanced Topics
  33. 33. Integration with EMF eclipse Any EMF-based modeling Code Generator GMF Editor P R O J E C T Component <<abstract>> XMI XMIResource Resource XtextResource Text Parser Linker Serializer ValueConverter ScopeProvider Formatter
  34. 34. Working with Xtext // initialization and setup (only needed in standalone mode) new EntityStandaloneSetup().createInjectorAndDoEMFRegistration(); // standard EMF API usage ResourceSet resourceSet = new ResourceSet(); Resource resource = resourceSet.getResource(uriToModelFile, true); Model model = (Model) resource.getContents().get(0); // print the name of all types to the console for (Type type : model.getElements()) { System.out.println(type.getName()); }
  35. 35. Eclipse Helios •Model Index • Grammar Mixins • Base Language • UI Features
  36. 36. Questions & Answers

×