Meeting Marzo 2010




Xtext: 
un framework per 
la creazione di DSL



                      
             Federico Tomassetti
Menu
        1. DSL......................

        2. Xtext: cosa..........

        3. Xtext: come.........
                                            

Federico Tomassetti – Meeting Marzo 2010
V.I.D.*

    HTML                                       CSS


 * V.I.D. = Very Important DSL
                                            

Federico Tomassetti – Meeting Marzo 2010
Dominio                               Tecnologia

              (Cosa)                              (Come)

                                           DSL


                                             

Federico Tomassetti – Meeting Marzo 2010
T
                                                          E
   D                                                      C
   O
   M      (COSA)
                                           No    (COME)
                                                          N
                                                          O
   I
   N
                                           DSL            L
                                                          O
   I                                                      G
   O                                                      I
                                                          A
                                            

Federico Tomassetti – Meeting Marzo 2010
TodoFile :
    (Category)* (Todo)*;

 Category:                                     Parser
    'category' ID;

 Todo:
    'todo' STRING ('in' ID)? 
    (Priority)? ('due' MyDate)?;

 Priority:
     'low' |'medium'|'high';                   Editor
 MyDate:
    INT '/' INT '/' INT;                    

Federico Tomassetti – Meeting Marzo 2010
Validazione


                                               Autocompletamento


                                               Outline



     
                             diamo un'occhiata...
                                            

Federico Tomassetti – Meeting Marzo 2010
@Check
           public void checkTextLength(Todo todo) {
              if (todo.getText().length() == 0) {
                 error("Todo text should be not   void",
                    TodoDslPackage.TODO__TEXT);
              } else if (todo.getText().length() < 5) {
                 warning("Todo text should be at least 5
           characters long",
                 TodoDslPackage.TODO__TEXT);
              }
           }




                                            

Federico Tomassetti – Meeting Marzo 2010
public void completeTodo_CategoryId(Todo model,
        Assignment assignment, ContentAssistContext context,
        ICompletionProposalAcceptor acceptor)
  {
     TodoFile todoFile = (TodoFile)model.eContainer();
     for (Category category : todoFile.getCategories()){
        String proposal = category.getId();
        ICompletionProposal completionProposal =
           createCompletionProposal(
           proposal, context);
        acceptor.accept(completionProposal);
     }
  }



                                            

Federico Tomassetti – Meeting Marzo 2010
private ContentOutlineNode createUncategorizedNode(
          TodoFile todoFile,
          ContentOutlineNode parentNode)
    {
       ContentOutlineNode node = new ContentOutlineNode();
       node.setLabel("<Uncategorized>");
       for (Todo todo : todoFile.getTodos()) {
          if (todo.getCategoryId() == null) {
             ContentOutlineNode childNode =
                   super.newOutlineNode(todo, node);
          }
       }
       return node;
    }

                                            

Federico Tomassetti – Meeting Marzo 2010
                                           
                                           Codegeneration 2008
Federico Tomassetti – Meeting Marzo 2010

Xtext Un Framework Per La Creazione Di Dsl

  • 1.
  • 2.
    Menu 1. DSL...................... 2. Xtext: cosa.......... 3. Xtext: come.........     Federico Tomassetti – Meeting Marzo 2010
  • 3.
    V.I.D.* HTML CSS * V.I.D. = Very Important DSL     Federico Tomassetti – Meeting Marzo 2010
  • 4.
    Dominio Tecnologia (Cosa) (Come) DSL     Federico Tomassetti – Meeting Marzo 2010
  • 5.
    T E D C O M (COSA) No  (COME) N O I N DSL L O I G O I A     Federico Tomassetti – Meeting Marzo 2010
  • 6.
    TodoFile : (Category)* (Todo)*; Category: Parser 'category' ID; Todo: 'todo' STRING ('in' ID)?  (Priority)? ('due' MyDate)?; Priority: 'low' |'medium'|'high'; Editor MyDate:   INT '/' INT '/' INT;    Federico Tomassetti – Meeting Marzo 2010
  • 7.
    Validazione Autocompletamento Outline   diamo un'occhiata...   Federico Tomassetti – Meeting Marzo 2010
  • 8.
    @Check public void checkTextLength(Todo todo) { if (todo.getText().length() == 0) { error("Todo text should be not void", TodoDslPackage.TODO__TEXT); } else if (todo.getText().length() < 5) { warning("Todo text should be at least 5 characters long", TodoDslPackage.TODO__TEXT); } }     Federico Tomassetti – Meeting Marzo 2010
  • 9.
    public void completeTodo_CategoryId(Todomodel, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { TodoFile todoFile = (TodoFile)model.eContainer(); for (Category category : todoFile.getCategories()){ String proposal = category.getId(); ICompletionProposal completionProposal = createCompletionProposal( proposal, context); acceptor.accept(completionProposal); } }     Federico Tomassetti – Meeting Marzo 2010
  • 10.
    private ContentOutlineNode createUncategorizedNode( TodoFile todoFile, ContentOutlineNode parentNode) { ContentOutlineNode node = new ContentOutlineNode(); node.setLabel("<Uncategorized>"); for (Todo todo : todoFile.getTodos()) { if (todo.getCategoryId() == null) { ContentOutlineNode childNode = super.newOutlineNode(todo, node); } } return node; }     Federico Tomassetti – Meeting Marzo 2010
  • 11.
        Codegeneration 2008 Federico Tomassetti – Meeting Marzo 2010