13-04-20232
Outline
• O que é uma DSL?• Utilidade de uma DSL• Benefícios de uma DSL• Frameworks para construção de DSLs• Xtext• Interpretação• Geração de código– Xpand
• Exemplos do mundo real
13-04-20233
O que é uma DSL?
• “A Domain Specific Language (DSL) is a computer programming language of limited expressiveness focused on a particular domain. (…) Each DSL can only handle one specific aspect of a system.” (Martin Fowler)
• Exemplos conhecidos: Mathemathica, Graphviz (dot), SQL
13-04-20237
Benefícios de uma DSL?
• Abstracções de programação próxima dos conceitos do domínio.
• Tempo de aprendizagem reduzido
• Optimiza a resolução do problema
• Possibilita que especialistas do domínio especifiquem a solução do problema
13-04-20238
Frameworks para construção de DSLs
• Irony - http://irony.codeplex.com/• MPS - http://www.jetbrains.com/mps/index.html• Spoofax - http://strategoxt.org/Spoofax• XText /XPand- http://www.eclipse.org/Xtext/
13-04-20239
Xtext
Framework integrada com eclipsePermite:– Definir linguagem• Referências cruzadas• Validações semânticas• Sintaxe Concreta
– Gerar um editor para eclipse• Auto-complete• Outline• Validação sintáctica e semântica
13-04-202317
Comportamento
• Interpretação– Parser da linguagem gerado por Xtext (Java)– Árvore de execução obtida através do parser
• Geração de código– XPand
13-04-202319
Interpretador• Parser gerado
automaticamente (Xtext)– AST– Modelo
• Dividir o grande problema em pequenos problemas.– Cada nó corresponde a uma
das regras declaradas– Avaliamos apenas o
necessário a cada nó.
13-04-202320
Interpretador• Parser gerado
automaticamente (Xtext)– AST– Modelo
• Dividir o grande problema em pequenos problemas.– Cada nó corresponde a uma
das regras declaradas– Avaliamos apenas o
necessário a cada nó.
• Adaptação do algoritmo de busca em profundidade.
13-04-202321
Interpretador• Parser gerado
automaticamente– AST– Modelo
• Dividir o grande problema em pequenos problemas.– Cada nó corresponde a uma
das regras declaradas– Avaliamos apenas o necessário
a cada nó.
• Adaptação do algoritmo de busca em profundidade.
• Execução Lenta
13-04-202323
Compilador/Gerador de código
• Processo análogo ao Interpretador
• Recurso a ferramentas que percorram o modelo : Xpand
13-04-202324
Compilador/Gerador de código
• Processo análogo ao Interpretador
• Recurso a ferramentas que percorram o modelo : Xpand
• Execução rápida e optimizada
13-04-202325
Compilador/Gerador de código
• Processo análogo ao Interpretador
• Recurso a ferramentas que percorram o modelo : Xpand
• Execução rápida e optimizada
• Integração com outras tecnologias.
13-04-202329
XPand
• Ferramenta de templating.
• Crawling do modelo
• Sintaxe própria• Integração com a
framework Xtext