Upload
federico-tomassetti
View
698
Download
0
Embed Size (px)
Citation preview
Xtext: Xtext: un framework per un framework per la creazione di DSLla creazione di DSL
Federico TomassettiFederico Tomassetti
Meeting Marzo 2010Meeting Marzo 2010
Federico Tomassetti – Meeting Marzo 2010Federico Tomassetti – Meeting Marzo 2010
1. DSL......................
2. Xtext: cosa..........
3. Xtext: come.........
MenuMenu
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
Federico Tomassetti – Meeting Marzo 2010Federico Tomassetti – Meeting Marzo 2010
DominioDominio
(Cosa)(Cosa)
DSLDSL
TecnologiaTecnologia
(Come)(Come)
Federico Tomassetti – Meeting Marzo 2010Federico Tomassetti – Meeting Marzo 2010
DDOOMMIINNIIOO
TTEECCNNOOLLOOGGIIAA
No No DSLDSL
(COSA)(COSA) (COME)(COME)
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
Federico Tomassetti – Meeting Marzo 2010Federico Tomassetti – Meeting Marzo 2010
Validazione
Autocompletamento
Outline
diamo un'occhiata...
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);}
}
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);}
}
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;
}
Federico Tomassetti – Meeting Marzo 2010Federico Tomassetti – Meeting Marzo 2010
Codegeneration 2008