11
 Xtext: Xtext: un framework per un framework per la creazione di DSL la creazione di DSL Federico Tomassetti Federico Tomassetti Meeting Marzo 2010 Meeting Marzo 2010

Xtext Un Framework Per La Creazione Di Dsl

Embed Size (px)

Citation preview

Page 1: Xtext   Un Framework Per La Creazione Di Dsl

   

Xtext: Xtext: un framework per un framework per la creazione di DSLla creazione di DSL

Federico TomassettiFederico Tomassetti

Meeting Marzo 2010Meeting Marzo 2010

Page 2: Xtext   Un Framework Per La Creazione Di Dsl

   

Federico Tomassetti – Meeting Marzo 2010Federico Tomassetti – Meeting Marzo 2010

1. DSL......................

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

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

MenuMenu

Page 3: Xtext   Un Framework Per La Creazione Di Dsl

   

Federico Tomassetti – Meeting Marzo 2010Federico Tomassetti – Meeting Marzo 2010

HTML CSS

V.I.D.*V.I.D.*

* V.I.D. = Very Important DSL* V.I.D. = Very Important DSL

Page 4: Xtext   Un Framework Per La Creazione Di Dsl

   

Federico Tomassetti – Meeting Marzo 2010Federico Tomassetti – Meeting Marzo 2010

DominioDominio

(Cosa)(Cosa)

DSLDSL

TecnologiaTecnologia

(Come)(Come)

Page 5: Xtext   Un Framework Per La Creazione Di Dsl

   

Federico Tomassetti – Meeting Marzo 2010Federico Tomassetti – Meeting Marzo 2010

DDOOMMIINNIIOO

TTEECCNNOOLLOOGGIIAA

No No DSLDSL

(COSA)(COSA) (COME)(COME)

Page 6: Xtext   Un Framework Per La Creazione Di Dsl

   

Federico Tomassetti – Meeting Marzo 2010Federico Tomassetti – Meeting Marzo 2010

TodoFile :(Category)* (Todo)*;

Category:'category' ID;

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

Priority:'low' |'medium'|'high';

MyDate:INT '/' INT '/' INT; 

ParserParser

EditorEditor

Page 7: Xtext   Un Framework Per La Creazione Di Dsl

   

Federico Tomassetti – Meeting Marzo 2010Federico Tomassetti – Meeting Marzo 2010

Validazione

Autocompletamento

Outline

diamo un'occhiata...

Page 8: Xtext   Un Framework Per La Creazione Di Dsl

   

Federico Tomassetti – Meeting Marzo 2010Federico Tomassetti – Meeting Marzo 2010

@Checkpublic 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);}

}

Page 9: Xtext   Un Framework Per La Creazione Di Dsl

   

Federico Tomassetti – Meeting Marzo 2010Federico 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);}

}

Page 10: Xtext   Un Framework Per La Creazione Di Dsl

   

Federico Tomassetti – Meeting Marzo 2010Federico 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;

}

Page 11: Xtext   Un Framework Per La Creazione Di Dsl

   

Federico Tomassetti – Meeting Marzo 2010Federico Tomassetti – Meeting Marzo 2010

Codegeneration 2008