O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

DSL - Como construir uma linguagem em 5 minutos

3.669 visualizações

Publicada em

Apresentação sobre o que é uma DSL, quais as suas aplicações, e como é possívelo desenvolver uma via XText

Publicada em: Tecnologia, Negócios
  • Seja o primeiro a comentar

DSL - Como construir uma linguagem em 5 minutos

  1. 1. DSL – Como construir uma linguagem em 5 minutos<br />Fábio Neves e Ricardo Mateus<br />23-02-2011<br />1<br />
  2. 2. Outline<br />O que é uma DSL?<br />Utilidade de uma DSL<br />Benefícios de uma DSL<br />Frameworks para construção de DSLs<br />Xtext<br />Interpretação<br />Geração de código<br />Xpand<br />Exemplos do mundo real<br />23-02-2011<br />2<br />
  3. 3. O que é uma DSL?<br />“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)<br />Exemplosconhecidos: Mathemathica, Graphviz (dot), SQL<br />23-02-2011<br />3<br />
  4. 4. Utilidade de uma DSL?<br />Porquê uma DSL e não uma GPL?<br />23-02-2011<br />4<br />
  5. 5. Utilidade de uma DSL?<br />Porquê uma DSL e não uma GPL?<br />23-02-2011<br />5<br />
  6. 6. Utilidade de uma DSL?<br />Porquê uma DSL e não uma GPL?<br />23-02-2011<br />6<br />
  7. 7. Benefícios de uma DSL?<br />Abstracções de programação próxima dos conceitos do domínio.<br />Tempo de aprendizagem reduzido<br />Optimiza a resolução do problema<br />Possibilita que especialistas do domínio especifiquem a solução do problema<br />23-02-2011<br />7<br />
  8. 8. Frameworks para construção de DSLs<br />Irony - http://irony.codeplex.com/<br />MPS - http://www.jetbrains.com/mps/index.html<br />Spoofax - http://strategoxt.org/Spoofax<br />XText /XPand- http://www.eclipse.org/Xtext/<br />23-02-2011<br />8<br />
  9. 9. Xtext<br />Framework integrada com eclipse<br />Permite: <br />Definir linguagem<br />Referências cruzadas<br />Validações semânticas<br />Sintaxe Concreta<br />Gerar um editor para eclipse<br />Auto-complete<br />Outline<br />Validação sintáctica e semântica<br />23-02-2011<br />9<br />
  10. 10. Xtext<br />Definir linguagem<br />Gramática<br />23-02-2011<br />10<br />
  11. 11. Xtext<br />Definir linguagem<br />Gramática<br />23-02-2011<br />11<br />
  12. 12. Xtext<br />Definir linguagem<br />Gramática<br />23-02-2011<br />12<br />
  13. 13. Xtext<br />Definir linguagem<br />Gramática<br />Gerar editor eclipse<br />Gerado automaticamente<br />23-02-2011<br />13<br />
  14. 14. Xtext<br />Definir linguagem<br />Gramática<br />Gerar editor eclipse<br />Gerado automaticamente<br />23-02-2011<br />14<br />
  15. 15. Xtext<br />Definir linguagem<br />Gramática<br />Gerar editor eclipse<br />Gerado automaticamente<br />23-02-2011<br />15<br />
  16. 16. Ok, linguagem especificada..e depois?<br />23-02-2011<br />16<br />
  17. 17. Comportamento<br />Interpretação<br />Parser da linguagem gerado por Xtext (Java)<br />Árvore de execução obtida através do parser<br />Geração de código<br />XPand<br />23-02-2011<br />17<br />
  18. 18. Interpretador<br />Parser gerado automaticamente (Xtext)<br />AST<br />Modelo<br />23-02-2011<br />18<br />
  19. 19. Interpretador<br />Parser gerado automaticamente (Xtext)<br />AST<br />Modelo<br />Dividir o grande problema em pequenos problemas.<br />Cada nó corresponde a uma das regras declaradas<br />Avaliamos apenas o necessário a cada nó.<br />23-02-2011<br />19<br />
  20. 20. Interpretador<br />Parser gerado automaticamente (Xtext)<br />AST<br />Modelo<br />Dividir o grande problema em pequenos problemas.<br />Cada nó corresponde a uma das regras declaradas<br />Avaliamos apenas o necessário a cada nó.<br />Adaptação do algoritmo de busca em profundidade.<br />23-02-2011<br />20<br />
  21. 21. Interpretador<br />Parser gerado automaticamente<br />AST<br />Modelo<br />Dividir o grande problema em pequenos problemas.<br />Cada nó corresponde a uma das regras declaradas<br />Avaliamos apenas o necessário a cada nó.<br />Adaptação do algoritmo de busca em profundidade.<br />Execução Lenta<br />23-02-2011<br />21<br />
  22. 22. Compilador/Gerador de código<br />Processo análogo ao Interpretador<br />23-02-2011<br />22<br />
  23. 23. Compilador/Gerador de código<br />Processo análogo ao Interpretador<br />Recurso a ferramentas que percorram o modelo : Xpand<br />23-02-2011<br />23<br />
  24. 24. Compilador/Gerador de código<br />Processo análogo ao Interpretador<br />Recurso a ferramentas que percorram o modelo : Xpand<br />Execução rápida e optimizada<br />23-02-2011<br />24<br />
  25. 25. Compilador/Gerador de código<br />Processo análogo ao Interpretador<br />Recurso a ferramentas que percorram o modelo : Xpand<br />Execução rápida e optimizada<br />Integração com outras tecnologias.<br />23-02-2011<br />25<br />
  26. 26. XPand<br />Ferramenta de templating.<br />23-02-2011<br />26<br />
  27. 27. XPand<br />Ferramenta de templating.<br />Crawling do modelo<br />23-02-2011<br />27<br />
  28. 28. XPand<br />Ferramenta de templating.<br />Crawling do modelo<br />Sintaxe própria<br />23-02-2011<br />28<br />
  29. 29. XPand<br />Ferramenta de templating.<br />Crawling do modelo<br />Sintaxe própria<br />Integração com a framework Xtext<br />23-02-2011<br />29<br />
  30. 30. Exemplos Mundo Real - Lilypond<br />23-02-2011<br />30<br />
  31. 31. Exemplos Mundo Real - Applause<br />23-02-2011<br />31<br />
  32. 32. Questões?<br />Obrigado<br />23-02-2011<br />32<br />Para Discussão e Documentação, <br />Grupo Facebook: <br />“DSL: Building with Xtext”<br />

×