DSL - Como construir uma linguagem em 5 minutos

3.374 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
0 comentários
3 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
3.374
No SlideShare
0
A partir de incorporações
0
Número de incorporações
2
Ações
Compartilhamentos
0
Downloads
63
Comentários
0
Gostaram
3
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide
  • Falar dos exemplos do mundo real.
  • Martin Fowler – Trabalha na ThoughWorks e gosta mt de falar de DSLs DSL pretende atacar um objectivo específico de forma a maximizar a eficiência na resolução desse objectivo. Linguagem tem um conjunto restrito ao nível da expressividade Não é suficiente para a implementação de um sistema inteiro mas sim resolve um problema específico do sistema Não substitui uma GPL. É uma “ferramenta” mais especializada para o programador. Mathematica – resolução de problemas matemáticos (fácil especificação) Graphviz – Definição simples de grafos com correcta disposição dos nós. SQL – linguagem de acesso a dados (usada tradicionalmente sobre um SGBD)
  • Existe mesmo uma necessidade de uma DSL?
  • Existe mesmo uma necessidade de uma DSL? Não, mas será que um cirugião fazia o seu trabalho da melhor forma com este tipo de ferramentas? Uma DSL não irá introduzir um conjunto acrescido de erros, vindo da própria implementação da DSL?
  • Precisão/Eficiência - Um cirugião com um bisturi consegue ser mais preciso na resolução do seu problema. Acréscimo de ponto de falha? - Um bisturi é mais afiado, corta melhor, mas também não introduz novos perigos em relação a uma outra ferramenta menos aguçada? Mas é mais eficiente não é? A responsabilidade está sempre em quem utiliza a ferramenta
  • * Falar no SQL
  • Construir uma linguagem é sempre complicado. Podemos sempre programar tudo à mão, criar o parser, os modelos a trabalhar em memória... A não ser que já exista algum tipo de trabalho pré-realizado e que nos facilite o nosso trabalho... Existem algumas frameworks que já tratam de gerar parsers e modelos em memória. Irony – solução em .NET MPS – solução implementada sobre o IDE IntelliJ Spoofax – Solução para eclipse.( concorrente directo do Xtext) XText – framework para eclipse. Robusta. Oferece um editor customizável para além do parser e modelos. ( mais robusto que o Spoofax)
  • Xtext é uma Ferramenta que permite definir a linguagem Gramática definida via sintaxe própria (adaptação da sintaxe standard EBNF) Permite definir referências cruzadas e com isso automatizar a geração de auto-complete como validações sintáticas (podemos extrapolar para validações semânticas logo). Gera um parser da linguagem definida. Gera uma AST (modelo de beans) a trabalhar em memória. Gera um editor tradicional de eclipse bastante configurável, desde o nível de validação sintática/semântica, a escopo de variáveis, a apresentação visual (fontes, cores, etc...) Xpand é outra tecnologia que se integra com Xtext e que permite definir o comportamento da linguagem.
  • EBNF Parser ANTLR por base – Gerador de parser/ast com base na gramática. Um dos mais reputados e utilizados A própria sintaxe para definição da linguagem/gramática é uma DSL O plugin Xtext tem ele próprio o habitual nos IDEs ao desenvolvermos um programa numa GPL, auto-complete, outline, Code-highlighting
  • EBNF Parser ANTLR por base – Gerador de parser/ast com base na gramática. Um dos mais reputados e utilizados A própria sintaxe para definição da linguagem/gramática é uma DSL O plugin Xtext tem ele próprio o habitual nos IDEs ao desenvolvermos um programa numa GPL, auto-complete, outline, Code-highlighting
  • EBNF Parser ANTLR por base – Gerador de parser/ast com base na gramática. Um dos mais reputados e utilizados A própria sintaxe para definição da linguagem/gramática é uma DSL O plugin Xtext tem ele próprio o habitual nos IDEs ao desenvolvermos um programa numa GPL, auto-complete, outline, Code-highlighting
  • Definindo a gramática e carregando num simples botão...temos um editor tradicional eclipse da nossa linguagem!! Tudo automáticamente Se a gramática for bem desenhada pouco vamos ter de nos proecupar em implementar validações semânticas/sintáticas e melhorias au auto-complete.
  • Definindo a gramática e carregando num simples botão...temos um editor tradicional eclipse da nossa linguagem!! Tudo automáticamente Se a gramática for bem desenhada pouco vamos ter de nos proecupar em implementar validações semânticas/sintáticas e melhorias au auto-complete.
  • Definindo a gramática e carregando num simples botão...temos um editor tradicional eclipse da nossa linguagem!! Tudo automáticamente Se a gramática for bem desenhada pouco vamos ter de nos proecupar em implementar validações semânticas/sintáticas e melhorias au auto-complete.
  • Temos um editor...temos uma linguagem...mas serve-nos de alguma coisa neste momento? Se alguém falar em linguagem gestual com alguém que não perceba nada dos símbolos entende alguma coisa? Humm... Se calhar é preciso saber interpretar... definir a linguagem é só metade da solução...
  • Uma das soluções é gerar um interpretador. O modelo gerado é uma árvore, uma AST.
  • Cada nó corresponde a uma “regra” gramatical. Dividir para reinar.
  • Adaptação do algoritmo DFS. Cada nó é avaliado e produz uma pequena acção
  • Um linguagem interpretada é lenta.
  • Necessitamos de eficiência em runtime? Se calhar é melhor compilar a nossa linguagem para um programa numa linguagem mais rápida.
  • Para este processo podemos utilizar um processo análogo ao interpretador e gerar código a cada nó... Podemos utilizar uma ferramenta Xpand que integra com Xtext e já executa isto por nós..
  • Podemos gerar para um qualquer tipo de tecnologias, para vários tipo de linguagem de programação... Podemos gerar código...mas podemos gerar também documentação automaticamente.... =)
  • Baseia-se em templates para cada regra.... Vários templates, gerações diferentes...tecnologias diferentes... =)
  • Ferramenta já faz crawl do modelo autopmáticamente
  • Tem uma sintaxe própria...mas com um conjunto de operadores muito reduzido...fácil de aprender portanto. Extensões a estes operadores pode ser feito em Java (métodos auxiliares..)
  • É tudo muito giro...mas será que alguém usa algo disto? Xtext claro...o SQL toda a gente usa Sistema que permite compôr pautas de música. Tipo latex. Gera mesmo uma pauta!!!
  • E definir interfaces para Android/Iphone...da mesma forma.... Applause faz isto. DSL que permite definir menus, navegação, e gerar código para as duas plataformas. Quem já desenvolveu mobile sabe que dá bastante trabalho definir toda a navegação....
  • 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 />

    ×