SlideShare a Scribd company logo
1 of 32
DSL – Como construir uma linguagem em 5 minutos Fábio Neves e Ricardo Mateus 23-02-2011 1
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 23-02-2011 2
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) Exemplosconhecidos: Mathemathica, Graphviz (dot), SQL 23-02-2011 3
Utilidade de uma DSL? Porquê uma DSL e não uma GPL? 23-02-2011 4
Utilidade de uma DSL? Porquê uma DSL e não uma GPL? 23-02-2011 5
Utilidade de uma DSL? Porquê uma DSL e não uma GPL? 23-02-2011 6
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 23-02-2011 7
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/ 23-02-2011 8
Xtext Framework integrada com eclipse Permite:		 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 23-02-2011 9
Xtext Definir linguagem Gramática 23-02-2011 10
Xtext Definir linguagem Gramática 23-02-2011 11
Xtext Definir linguagem Gramática 23-02-2011 12
Xtext Definir linguagem Gramática Gerar editor eclipse Gerado automaticamente 23-02-2011 13
Xtext Definir linguagem Gramática Gerar editor eclipse Gerado automaticamente 23-02-2011 14
Xtext Definir linguagem Gramática Gerar editor eclipse Gerado automaticamente 23-02-2011 15
Ok, linguagem especificada..e depois? 23-02-2011 16
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 23-02-2011 17
Interpretador Parser gerado automaticamente (Xtext) AST Modelo 23-02-2011 18
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ó. 23-02-2011 19
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. 23-02-2011 20
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 23-02-2011 21
Compilador/Gerador de código Processo análogo ao Interpretador 23-02-2011 22
Compilador/Gerador de código Processo análogo ao Interpretador Recurso a ferramentas que percorram o modelo : Xpand 23-02-2011 23
Compilador/Gerador de código Processo análogo ao Interpretador Recurso a ferramentas que percorram o modelo : Xpand Execução rápida e optimizada 23-02-2011 24
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. 23-02-2011 25
XPand Ferramenta de templating. 23-02-2011 26
XPand Ferramenta de templating. Crawling do modelo 23-02-2011 27
XPand Ferramenta de templating. Crawling do modelo Sintaxe própria 23-02-2011 28
XPand Ferramenta de templating. Crawling do modelo Sintaxe própria Integração com a framework Xtext 23-02-2011 29
Exemplos Mundo Real - Lilypond 23-02-2011 30
Exemplos Mundo Real - Applause 23-02-2011 31
Questões? Obrigado 23-02-2011 32 Para Discussão e Documentação,  Grupo Facebook:  “DSL: Building with Xtext”

More Related Content

What's hot

Como Construir um Compilador cap-1
Como Construir um Compilador cap-1Como Construir um Compilador cap-1
Como Construir um Compilador cap-1
Maellson Marques
 

What's hot (20)

Delphi Conference 2012 - Controlando a Concorrência em Aplicações Multi-Thread
Delphi Conference 2012 - Controlando a Concorrência em Aplicações Multi-ThreadDelphi Conference 2012 - Controlando a Concorrência em Aplicações Multi-Thread
Delphi Conference 2012 - Controlando a Concorrência em Aplicações Multi-Thread
 
TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...
TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...
TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...
 
Como Construir um Compilador cap-1
Como Construir um Compilador cap-1Como Construir um Compilador cap-1
Como Construir um Compilador cap-1
 
Conhecendo a JSR 223: Scripting for the Java Platform
Conhecendo a JSR 223: Scripting for the Java PlatformConhecendo a JSR 223: Scripting for the Java Platform
Conhecendo a JSR 223: Scripting for the Java Platform
 
Introducao XP
Introducao XPIntroducao XP
Introducao XP
 
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...
 
BDD: Torne viva a documentação de seus sistemas
BDD: Torne viva a documentação de seus sistemasBDD: Torne viva a documentação de seus sistemas
BDD: Torne viva a documentação de seus sistemas
 
Processo de Desenvolvimento de Software - Linguagens Imperativas x Declarativas
Processo de Desenvolvimento de Software - Linguagens Imperativas x DeclarativasProcesso de Desenvolvimento de Software - Linguagens Imperativas x Declarativas
Processo de Desenvolvimento de Software - Linguagens Imperativas x Declarativas
 
TCP Assíncrono usando C++11 e Boost Asio
TCP Assíncrono usando C++11 e Boost AsioTCP Assíncrono usando C++11 e Boost Asio
TCP Assíncrono usando C++11 e Boost Asio
 
Entendendo a linkedição em C++
Entendendo a linkedição em C++Entendendo a linkedição em C++
Entendendo a linkedição em C++
 
Python 3k
Python 3kPython 3k
Python 3k
 
Processo de Desenvolvimento de Software - Programação
Processo de Desenvolvimento de Software - ProgramaçãoProcesso de Desenvolvimento de Software - Programação
Processo de Desenvolvimento de Software - Programação
 
Python para Programadores
Python para ProgramadoresPython para Programadores
Python para Programadores
 
Zephir
ZephirZephir
Zephir
 
gRPC: Por que você ainda usa REST?
gRPC: Por que você ainda usa REST?gRPC: Por que você ainda usa REST?
gRPC: Por que você ainda usa REST?
 
Acesso a área de trabalho remota
Acesso a área de trabalho remotaAcesso a área de trabalho remota
Acesso a área de trabalho remota
 
Xdebug seus problemas acabaram - tdc floripa 2017
Xdebug   seus problemas acabaram - tdc floripa 2017Xdebug   seus problemas acabaram - tdc floripa 2017
Xdebug seus problemas acabaram - tdc floripa 2017
 
Matando o Java e Mostrando o Python
Matando o Java e Mostrando o PythonMatando o Java e Mostrando o Python
Matando o Java e Mostrando o Python
 
O futuro do elephante: as promessas do php para 2019
O futuro do elephante: as promessas do php para 2019O futuro do elephante: as promessas do php para 2019
O futuro do elephante: as promessas do php para 2019
 
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
 

Viewers also liked

A linguagem do amor valter e cida
A linguagem do amor   valter e cidaA linguagem do amor   valter e cida
A linguagem do amor valter e cida
leniogravacoes
 
Construindo um framework CSS
Construindo um framework CSSConstruindo um framework CSS
Construindo um framework CSS
Diego Eis
 
Geração de código linguagem c
Geração de código   linguagem cGeração de código   linguagem c
Geração de código linguagem c
Jefferson Bessa
 

Viewers also liked (17)

Como criar seu próprio Framework
Como criar seu próprio FrameworkComo criar seu próprio Framework
Como criar seu próprio Framework
 
A linguagem do amor valter e cida
A linguagem do amor   valter e cidaA linguagem do amor   valter e cida
A linguagem do amor valter e cida
 
As cinco linguagens do amor pr. zaqueu
As cinco linguagens do amor   pr. zaqueuAs cinco linguagens do amor   pr. zaqueu
As cinco linguagens do amor pr. zaqueu
 
Falando de amor
Falando de amorFalando de amor
Falando de amor
 
Construindo um framework CSS
Construindo um framework CSSConstruindo um framework CSS
Construindo um framework CSS
 
Geração de código linguagem c
Geração de código   linguagem cGeração de código   linguagem c
Geração de código linguagem c
 
A importância do Amor
A importância do AmorA importância do Amor
A importância do Amor
 
Arquitetura do coprocessador Intel® Xeon Phi™ - Intel Software Conference 2013
Arquitetura do coprocessador Intel® Xeon Phi™ - Intel Software Conference 2013Arquitetura do coprocessador Intel® Xeon Phi™ - Intel Software Conference 2013
Arquitetura do coprocessador Intel® Xeon Phi™ - Intel Software Conference 2013
 
Linguagem do amor
Linguagem do amorLinguagem do amor
Linguagem do amor
 
Amor 5
Amor 5Amor 5
Amor 5
 
Relações Humanas - As cinco linguagens do amor
Relações Humanas - As cinco linguagens do amorRelações Humanas - As cinco linguagens do amor
Relações Humanas - As cinco linguagens do amor
 
Algoritmos - Pascal
Algoritmos - PascalAlgoritmos - Pascal
Algoritmos - Pascal
 
Linguagens do amor
Linguagens do amorLinguagens do amor
Linguagens do amor
 
C All 2008 7 22
C All 2008 7 22C All 2008 7 22
C All 2008 7 22
 
You are valuable
You are valuableYou are valuable
You are valuable
 
Csfpt ppcr mars 2017
Csfpt ppcr mars 2017Csfpt ppcr mars 2017
Csfpt ppcr mars 2017
 
Missing vin (1)
Missing vin (1)Missing vin (1)
Missing vin (1)
 

Similar to DSL - Como construir uma linguagem em 5 minutos

Tdc 2013 eric lemes - integracoes entre sistemas-2
Tdc 2013   eric lemes - integracoes entre sistemas-2Tdc 2013   eric lemes - integracoes entre sistemas-2
Tdc 2013 eric lemes - integracoes entre sistemas-2
Eric Lemes
 
Evolução do .NET Framework e do Visual Basic
Evolução do .NET Framework e do Visual BasicEvolução do .NET Framework e do Visual Basic
Evolução do .NET Framework e do Visual Basic
Ricardo Guerra Freitas
 
PHPMyadmin - Introdução
PHPMyadmin - IntroduçãoPHPMyadmin - Introdução
PHPMyadmin - Introdução
Marco Pinheiro
 
S2 B 2007 Infra Aula 01 V1.00
S2 B 2007   Infra   Aula 01 V1.00S2 B 2007   Infra   Aula 01 V1.00
S2 B 2007 Infra Aula 01 V1.00
doctorweb
 

Similar to DSL - Como construir uma linguagem em 5 minutos (20)

DDD - Step by Step
DDD - Step by StepDDD - Step by Step
DDD - Step by Step
 
Minicurso - Introdução ao LaTeX
Minicurso - Introdução ao LaTeXMinicurso - Introdução ao LaTeX
Minicurso - Introdução ao LaTeX
 
TradeTech Brazil 2011 - O Desafio Da Latencia
TradeTech Brazil 2011 - O Desafio Da LatenciaTradeTech Brazil 2011 - O Desafio Da Latencia
TradeTech Brazil 2011 - O Desafio Da Latencia
 
Introdução ao no sql e mongodb
Introdução ao no sql e mongodbIntrodução ao no sql e mongodb
Introdução ao no sql e mongodb
 
Conceitos Iniciais LP I
Conceitos Iniciais LP IConceitos Iniciais LP I
Conceitos Iniciais LP I
 
Apresentação - IT Specialist
Apresentação - IT SpecialistApresentação - IT Specialist
Apresentação - IT Specialist
 
Tdc 2013 eric lemes - integracoes entre sistemas-2
Tdc 2013   eric lemes - integracoes entre sistemas-2Tdc 2013   eric lemes - integracoes entre sistemas-2
Tdc 2013 eric lemes - integracoes entre sistemas-2
 
paradigmas_de_programacao.pdf
paradigmas_de_programacao.pdfparadigmas_de_programacao.pdf
paradigmas_de_programacao.pdf
 
paradigmas_de_programacao.pdf
paradigmas_de_programacao.pdfparadigmas_de_programacao.pdf
paradigmas_de_programacao.pdf
 
Escalando uma plataforma poliglota - QConSP 17
Escalando uma plataforma poliglota - QConSP 17Escalando uma plataforma poliglota - QConSP 17
Escalando uma plataforma poliglota - QConSP 17
 
Porque todo programador deve utilizar Sistema de Controle de Versão?
Porque todo programador deve utilizar Sistema de Controle de Versão?Porque todo programador deve utilizar Sistema de Controle de Versão?
Porque todo programador deve utilizar Sistema de Controle de Versão?
 
Ampliando os Horizontes dos Profissionais de Redes através do Python
Ampliando os Horizontes dos Profissionais de Redes através do PythonAmpliando os Horizontes dos Profissionais de Redes através do Python
Ampliando os Horizontes dos Profissionais de Redes através do Python
 
Evolução do .NET Framework e do Visual Basic
Evolução do .NET Framework e do Visual BasicEvolução do .NET Framework e do Visual Basic
Evolução do .NET Framework e do Visual Basic
 
Latex2e - guia rápido e básico
Latex2e - guia rápido e básicoLatex2e - guia rápido e básico
Latex2e - guia rápido e básico
 
Introdução ao Node.js - FATEC SP
Introdução ao Node.js - FATEC SPIntrodução ao Node.js - FATEC SP
Introdução ao Node.js - FATEC SP
 
PHPMyadmin - Introdução
PHPMyadmin - IntroduçãoPHPMyadmin - Introdução
PHPMyadmin - Introdução
 
S2 B 2007 Infra Aula 01 V1.00
S2 B 2007   Infra   Aula 01 V1.00S2 B 2007   Infra   Aula 01 V1.00
S2 B 2007 Infra Aula 01 V1.00
 
Escalabilidade via Software no ExpressoV3
Escalabilidade via Software no ExpressoV3Escalabilidade via Software no ExpressoV3
Escalabilidade via Software no ExpressoV3
 
paradigmas_de_programacao_1_X.pdf
paradigmas_de_programacao_1_X.pdfparadigmas_de_programacao_1_X.pdf
paradigmas_de_programacao_1_X.pdf
 
Fundamentos de VHDL em Lógica Programável v1.1
Fundamentos de VHDL em Lógica Programável v1.1Fundamentos de VHDL em Lógica Programável v1.1
Fundamentos de VHDL em Lógica Programável v1.1
 

DSL - Como construir uma linguagem em 5 minutos

  • 1. DSL – Como construir uma linguagem em 5 minutos Fábio Neves e Ricardo Mateus 23-02-2011 1
  • 2. 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 23-02-2011 2
  • 3. 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) Exemplosconhecidos: Mathemathica, Graphviz (dot), SQL 23-02-2011 3
  • 4. Utilidade de uma DSL? Porquê uma DSL e não uma GPL? 23-02-2011 4
  • 5. Utilidade de uma DSL? Porquê uma DSL e não uma GPL? 23-02-2011 5
  • 6. Utilidade de uma DSL? Porquê uma DSL e não uma GPL? 23-02-2011 6
  • 7. 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 23-02-2011 7
  • 8. 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/ 23-02-2011 8
  • 9. Xtext Framework integrada com eclipse Permite: 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 23-02-2011 9
  • 10. Xtext Definir linguagem Gramática 23-02-2011 10
  • 11. Xtext Definir linguagem Gramática 23-02-2011 11
  • 12. Xtext Definir linguagem Gramática 23-02-2011 12
  • 13. Xtext Definir linguagem Gramática Gerar editor eclipse Gerado automaticamente 23-02-2011 13
  • 14. Xtext Definir linguagem Gramática Gerar editor eclipse Gerado automaticamente 23-02-2011 14
  • 15. Xtext Definir linguagem Gramática Gerar editor eclipse Gerado automaticamente 23-02-2011 15
  • 16. Ok, linguagem especificada..e depois? 23-02-2011 16
  • 17. 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 23-02-2011 17
  • 18. Interpretador Parser gerado automaticamente (Xtext) AST Modelo 23-02-2011 18
  • 19. 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ó. 23-02-2011 19
  • 20. 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. 23-02-2011 20
  • 21. 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 23-02-2011 21
  • 22. Compilador/Gerador de código Processo análogo ao Interpretador 23-02-2011 22
  • 23. Compilador/Gerador de código Processo análogo ao Interpretador Recurso a ferramentas que percorram o modelo : Xpand 23-02-2011 23
  • 24. Compilador/Gerador de código Processo análogo ao Interpretador Recurso a ferramentas que percorram o modelo : Xpand Execução rápida e optimizada 23-02-2011 24
  • 25. 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. 23-02-2011 25
  • 26. XPand Ferramenta de templating. 23-02-2011 26
  • 27. XPand Ferramenta de templating. Crawling do modelo 23-02-2011 27
  • 28. XPand Ferramenta de templating. Crawling do modelo Sintaxe própria 23-02-2011 28
  • 29. XPand Ferramenta de templating. Crawling do modelo Sintaxe própria Integração com a framework Xtext 23-02-2011 29
  • 30. Exemplos Mundo Real - Lilypond 23-02-2011 30
  • 31. Exemplos Mundo Real - Applause 23-02-2011 31
  • 32. Questões? Obrigado 23-02-2011 32 Para Discussão e Documentação, Grupo Facebook: “DSL: Building with Xtext”

Editor's Notes

  1. Falar dos exemplos do mundo real.
  2. 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)
  3. Existe mesmo uma necessidade de uma DSL?
  4. 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?
  5. 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
  6. * Falar no SQL
  7. 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)
  8. 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.
  9. 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
  10. 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
  11. 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
  12. 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.
  13. 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.
  14. 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.
  15. 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...
  16. Uma das soluções é gerar um interpretador. O modelo gerado é uma árvore, uma AST.
  17. Cada nó corresponde a uma “regra” gramatical. Dividir para reinar.
  18. Adaptação do algoritmo DFS. Cada nó é avaliado e produz uma pequena acção
  19. Um linguagem interpretada é lenta.
  20. Necessitamos de eficiência em runtime? Se calhar é melhor compilar a nossa linguagem para um programa numa linguagem mais rápida.
  21. 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..
  22. 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.... =)
  23. Baseia-se em templates para cada regra.... Vários templates, gerações diferentes...tecnologias diferentes... =)
  24. Ferramenta já faz crawl do modelo autopmáticamente
  25. 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..)
  26. É 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!!!
  27. 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....