SlideShare uma empresa Scribd logo
1 de 36
Baixar para ler offline
Uma linguagem para chamar de minha:
Criando DSLs no dia a dia
Jacqueline Abreu Lopes
Developer
Acredita que todas as tecnologias tem algo positivo
Mamãe do Miguel @JacAbreu
Objetivo:
Contribuir para que todos
construam as suas DSLs
Domain Specific Language
“DSLs are small languages, focused on a
particular aspect of a software system.
You can't build a whole program with a DSL,
but you often use multiple DSLs in a system
mainly written in a general purpose language.”
Martin Fowler
CSS
LaTeX
Yaml
SQL
Algumas DSLs
DSLs possuem features que são utilizadas
apenas para um domínio específico, não
permitindo reutilização de outras formas.
DSL x General-purpose language
DSLs são linguagens
O que diferencia DSLs e linguagens de propósito
geral é a função, e não a forma.
Análise Lexica
Análise Semântica
Código Fonte
Análise Sintática
Codegen ou
Interpretação
if (x > 3.1) { print(x); }
Análise Lexica
Quais são e o que significam os
símbolos da linguagem?
if (x > 3.1) { print(x); }
Análise Lexica
Quais são e o que significam os
símbolos da linguagem?
if (x > 3.1) { print(x); }
Análise Lexica
Quais são e o que significam os
símbolos da linguagem?
ifkeyw
ord
leftparenthesis
identifier
operatorgt
num
ber
rightparenthesis
leftcurly-braces
identifier
leftparenthesis
identifier
rightparenthesis
sem
icolon
rightcurly-braces
if (x > 3.1) { print(x); }
Análise Lexica
Quais são e o que significam os
símbolos da linguagem?
ifkeyw
ord
leftparenthesis
identifier
operatorgt
num
ber
rightparenthesis
leftcurly-braces
identifier
leftparenthesis
identifier
rightparenthesis
sem
icolon
rightcurly-braces
function call
if-stmt
then-stmtcondition
binary op
Como os símbolos se organizam
seguindo a sintaxe?
Análise Sintática
if (x > 3.1) { print(x); }
Como os símbolos se organizam
seguindo a sintaxe?
Análise Sintática
if
> print
xx 3.1
Análise SintáticaAnálise Semântica
if
> print
xx 3.1
float float float
boolean void
void
1 arg
O que significa cada nó da AST? Qual o
tipo de cada expressão?
Análise Sintática
if
> print
xx 3.1
float float float
boolean void
void
1 arg
E qual o resultado disso tudo?Codegen
0122: ...
0123: LOAD_VAR x
0124: LOAD_FLOAT 3.1
0125: GT
0126: JUMP_IF_FALSE 0129
0127: LOAD_VAR x
0128: CALL print
0129: ...
Como construir uma
Domain Specific Language
+ + ...
Como Construir a sua Linguagem
➔ Construir a linguagem na mão (e aproveitar e fazer em assembly)
➔ Usar um parser generator
(ou parser combinator, respeitamos a diversidade aqui)
Parsers Generators
JavaCC
Ragel
JFlex
ANTLR4
Por que ANTLR 4
➔ Porque ele não é o ANTLR 3
➔ Facilidade
➔ Muito material online
➔ Compila para Java, C#, Python e Javascript
https://theantlrguy.atlassian.
net/wiki/display/ANTLR4/ANTLR+4+Docume
ntation
Gramática é um conjunto de regras
que definem a construção de strings
de uma linguagem formal.
Não Terminais: símbolos que não fazem
parte da línguagem.
Estes serão substituídos para alcançar uma
sequência de caracteres válida para a línguagem.
Terminais: símbolos que fazem parte da
línguagem.
Estes substituírão não terminais - de acordo com a
gramática - para tentar alcançar uma sequência de
caracteres aceita pela linguagem.
Representação de Gramática
S → T
S → S
T → W
T → ε
Representação de Gramática em
ANTLR4
S : T | S;
T : W?;
https://github.com/JacAbreu/QConRio2015
https://github.com/JacAbreu/QConRio2015
Bibliografia
https://www.youtube.com/watch?v=i1KVwoE3n28
http://blog.caelum.com.br/domain-specific-languages-em-acao/
http://www.slideshare.net/karreiro/tdc-2015-dsls-em-ruby
https://github.com/JetBrains/MPS
http://www.cin.ufpe.br/~tg/2010-1/macfx.pdf
http://stackoverflow.com/questions/809574/what-is-domain-specific-language-anybody-using-it-and-in-what-way
http://www.slideshare.net/VasimPathan/spr-ch05compilers
http://martinfowler.com/bliki/LanguageWorkbench.html
http://stackoverflow.com/questions/tagged/antlr
http://stackoverflow.com/questions/tagged/antlr4
http://www.booksllc.net/sw2.cfm?q=Formal_grammar
https://pt.wikipedia.org/wiki/JavaCC
https://github.com/juanplopes/pyrex/blob/master/monograph/regex.pdf
http://www.linfo.org/compiler.html
https://en.wikipedia.org/wiki/Statement_(computer_science)
http://www.codeproject.com/Articles/13896/OpenC-A-C-Metacompiler-and-Introspection-Library
https://en.wikipedia.org/wiki/Backus%E2%80%93Naur_Form
https://theantlrguy.atlassian.net/wiki/display/ANTLR4/Runtime+Libraries+and+Code+Generation+Targets

Mais conteúdo relacionado

Mais procurados

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çãoNatanael Simões
 
Dicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHPDicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHPDouglas V. Pasqua
 
Programando em Elixir
Programando em ElixirProgramando em Elixir
Programando em ElixirAdolfo Neto
 
Palestra: Introdução à TypeScript & Features Ts 2.x
Palestra: Introdução à TypeScript & Features Ts 2.x Palestra: Introdução à TypeScript & Features Ts 2.x
Palestra: Introdução à TypeScript & Features Ts 2.x Glaucia Lemos
 
Revisão de Código - Uma prática que depende da cultura
Revisão de Código - Uma prática que depende da culturaRevisão de Código - Uma prática que depende da cultura
Revisão de Código - Uma prática que depende da culturaLeandro Parazito
 
Apresentação Introdução Typescript - .Net Caxias do Sul
Apresentação   Introdução Typescript - .Net Caxias do SulApresentação   Introdução Typescript - .Net Caxias do Sul
Apresentação Introdução Typescript - .Net Caxias do SulGlaucia Lemos
 
Processo de Desenvolvimento de Software - Linguagens Compiladas x Interpretadas
Processo de Desenvolvimento de Software - Linguagens Compiladas x InterpretadasProcesso de Desenvolvimento de Software - Linguagens Compiladas x Interpretadas
Processo de Desenvolvimento de Software - Linguagens Compiladas x InterpretadasNatanael Simões
 
Desvendando a linguagem JavaScript
Desvendando a linguagem JavaScriptDesvendando a linguagem JavaScript
Desvendando a linguagem JavaScriptRodrigo Branas
 
Python django7semestre
Python django7semestre Python django7semestre
Python django7semestre Denis Vieira
 
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 sistemasVitor Mattos
 
Visao geralti netshoes03
Visao geralti netshoes03Visao geralti netshoes03
Visao geralti netshoes03Ale Uehara
 
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 PlatformMilfont Consulting
 

Mais procurados (20)

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
 
Dicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHPDicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHP
 
Programando em Elixir
Programando em ElixirProgramando em Elixir
Programando em Elixir
 
Palestra: Introdução à TypeScript & Features Ts 2.x
Palestra: Introdução à TypeScript & Features Ts 2.x Palestra: Introdução à TypeScript & Features Ts 2.x
Palestra: Introdução à TypeScript & Features Ts 2.x
 
Ruby
RubyRuby
Ruby
 
Revisão de Código - Uma prática que depende da cultura
Revisão de Código - Uma prática que depende da culturaRevisão de Código - Uma prática que depende da cultura
Revisão de Código - Uma prática que depende da cultura
 
Curso javascript básico
Curso javascript básicoCurso javascript básico
Curso javascript básico
 
Apresentação Introdução Typescript - .Net Caxias do Sul
Apresentação   Introdução Typescript - .Net Caxias do SulApresentação   Introdução Typescript - .Net Caxias do Sul
Apresentação Introdução Typescript - .Net Caxias do Sul
 
Processo de Desenvolvimento de Software - Linguagens Compiladas x Interpretadas
Processo de Desenvolvimento de Software - Linguagens Compiladas x InterpretadasProcesso de Desenvolvimento de Software - Linguagens Compiladas x Interpretadas
Processo de Desenvolvimento de Software - Linguagens Compiladas x Interpretadas
 
Clean code em C#
Clean code em C#Clean code em C#
Clean code em C#
 
Desvendando a linguagem JavaScript
Desvendando a linguagem JavaScriptDesvendando a linguagem JavaScript
Desvendando a linguagem JavaScript
 
Refatorar é preciso. Palestra TDC 2014
Refatorar é preciso. Palestra TDC 2014Refatorar é preciso. Palestra TDC 2014
Refatorar é preciso. Palestra TDC 2014
 
Be React. Do Tests!
Be React. Do Tests!Be React. Do Tests!
Be React. Do Tests!
 
Python django7semestre
Python django7semestre Python django7semestre
Python django7semestre
 
Refatorar é preciso! 2.0
Refatorar é preciso! 2.0Refatorar é preciso! 2.0
Refatorar é preciso! 2.0
 
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
 
Visao geralti netshoes03
Visao geralti netshoes03Visao geralti netshoes03
Visao geralti netshoes03
 
Visao geralti netshoes03
Visao geralti netshoes03Visao geralti netshoes03
Visao geralti netshoes03
 
Desenvolvimento web e PHP
Desenvolvimento web e PHPDesenvolvimento web e PHP
Desenvolvimento web e PHP
 
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
 

Destaque

Continuous Delivery e Ferramentas Javascript
Continuous Delivery e Ferramentas JavascriptContinuous Delivery e Ferramentas Javascript
Continuous Delivery e Ferramentas JavascriptMarcos Vinícius
 
What if-your-application-could-speak
What if-your-application-could-speakWhat if-your-application-could-speak
What if-your-application-could-speakMarcos Vinícius
 
Evolving legacy to microservices and ddd
Evolving legacy to microservices and dddEvolving legacy to microservices and ddd
Evolving legacy to microservices and dddMarcos Vinícius
 
The Javascript Toolkit 2.0
The Javascript Toolkit 2.0The Javascript Toolkit 2.0
The Javascript Toolkit 2.0Marcos Vinícius
 
How to Become a Thought Leader in Your Niche
How to Become a Thought Leader in Your NicheHow to Become a Thought Leader in Your Niche
How to Become a Thought Leader in Your NicheLeslie Samuel
 

Destaque (8)

Dsl tdc-2013
Dsl tdc-2013Dsl tdc-2013
Dsl tdc-2013
 
Continuous Delivery e Ferramentas Javascript
Continuous Delivery e Ferramentas JavascriptContinuous Delivery e Ferramentas Javascript
Continuous Delivery e Ferramentas Javascript
 
What if-your-application-could-speak
What if-your-application-could-speakWhat if-your-application-could-speak
What if-your-application-could-speak
 
Javascript toolkit
Javascript toolkitJavascript toolkit
Javascript toolkit
 
Restless developer
Restless developerRestless developer
Restless developer
 
Evolving legacy to microservices and ddd
Evolving legacy to microservices and dddEvolving legacy to microservices and ddd
Evolving legacy to microservices and ddd
 
The Javascript Toolkit 2.0
The Javascript Toolkit 2.0The Javascript Toolkit 2.0
The Javascript Toolkit 2.0
 
How to Become a Thought Leader in Your Niche
How to Become a Thought Leader in Your NicheHow to Become a Thought Leader in Your Niche
How to Become a Thought Leader in Your Niche
 

Semelhante a Uma linguagem para chamar de minha: Criando DSLs no dia a dia - QConRio2015

LIA - Linguagem Interpretada de Algoritmos
LIA - Linguagem Interpretada de AlgoritmosLIA - Linguagem Interpretada de Algoritmos
LIA - Linguagem Interpretada de AlgoritmosRafael Martins
 
DDD e PHP - TDC 2012
DDD e PHP - TDC 2012DDD e PHP - TDC 2012
DDD e PHP - TDC 2012Luís Cobucci
 
Linguagens de programação 03-12-09
Linguagens de programação   03-12-09Linguagens de programação   03-12-09
Linguagens de programação 03-12-09essa
 
Linguagens de programação 03-12-09
Linguagens de programação   03-12-09Linguagens de programação   03-12-09
Linguagens de programação 03-12-09essa
 
Do alto para o baixo nível - Entendendo as Diferenças
Do alto para o baixo nível - Entendendo as DiferençasDo alto para o baixo nível - Entendendo as Diferenças
Do alto para o baixo nível - Entendendo as DiferençasWelington Sampaio
 
Paradigmas de Linguagens de Programação - Introdução
Paradigmas de Linguagens de Programação - IntroduçãoParadigmas de Linguagens de Programação - Introdução
Paradigmas de Linguagens de Programação - IntroduçãoAdriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Classificações
Paradigmas de Linguagens de Programação - ClassificaçõesParadigmas de Linguagens de Programação - Classificações
Paradigmas de Linguagens de Programação - ClassificaçõesAdriano Teixeira de Souza
 
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreamsJacqueline Abreu
 
The Language VolcanX - ABMSL
The Language VolcanX - ABMSLThe Language VolcanX - ABMSL
The Language VolcanX - ABMSLMichel Alves
 
Aula 2 - POO: Fundamentos da linguagem Java
Aula 2 - POO: Fundamentos da linguagem JavaAula 2 - POO: Fundamentos da linguagem Java
Aula 2 - POO: Fundamentos da linguagem JavaDaniel Brandão
 
paradigmasdlsksmmskskkekekekekedmmmdmdmmf.pdf
paradigmasdlsksmmskskkekekekekedmmmdmdmmf.pdfparadigmasdlsksmmskskkekekekekedmmmdmdmmf.pdf
paradigmasdlsksmmskskkekekekekedmmmdmdmmf.pdfAndreiaCristinaFlore
 
Algoritmia para o site do 10gi marcelo e ricardo
Algoritmia para o site do 10gi marcelo e ricardoAlgoritmia para o site do 10gi marcelo e ricardo
Algoritmia para o site do 10gi marcelo e ricardozedaesquina98
 
Técnicas_Implementação
Técnicas_ImplementaçãoTécnicas_Implementação
Técnicas_ImplementaçãoWagner Zaparoli
 

Semelhante a Uma linguagem para chamar de minha: Criando DSLs no dia a dia - QConRio2015 (20)

Compiladores
CompiladoresCompiladores
Compiladores
 
LIA - Linguagem Interpretada de Algoritmos
LIA - Linguagem Interpretada de AlgoritmosLIA - Linguagem Interpretada de Algoritmos
LIA - Linguagem Interpretada de Algoritmos
 
DDD e PHP - TDC 2012
DDD e PHP - TDC 2012DDD e PHP - TDC 2012
DDD e PHP - TDC 2012
 
Linguagens de programação 03-12-09
Linguagens de programação   03-12-09Linguagens de programação   03-12-09
Linguagens de programação 03-12-09
 
Linguagens de programação 03-12-09
Linguagens de programação   03-12-09Linguagens de programação   03-12-09
Linguagens de programação 03-12-09
 
Isc aula 7
Isc   aula 7Isc   aula 7
Isc aula 7
 
Do alto para o baixo nível - Entendendo as Diferenças
Do alto para o baixo nível - Entendendo as DiferençasDo alto para o baixo nível - Entendendo as Diferenças
Do alto para o baixo nível - Entendendo as Diferenças
 
Paradigmas de Linguagens de Programação - Introdução
Paradigmas de Linguagens de Programação - IntroduçãoParadigmas de Linguagens de Programação - Introdução
Paradigmas de Linguagens de Programação - Introdução
 
Domain-Driven Design
Domain-Driven DesignDomain-Driven Design
Domain-Driven Design
 
Paradigmas de Linguagens de Programação - Classificações
Paradigmas de Linguagens de Programação - ClassificaçõesParadigmas de Linguagens de Programação - Classificações
Paradigmas de Linguagens de Programação - Classificações
 
Code Masters
Code MastersCode Masters
Code Masters
 
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreams
 
The Language VolcanX - ABMSL
The Language VolcanX - ABMSLThe Language VolcanX - ABMSL
The Language VolcanX - ABMSL
 
Introducao java
Introducao javaIntroducao java
Introducao java
 
Comparativo do uso de linguagens de programação e geradores de código no dese...
Comparativo do uso de linguagens de programação e geradores de código no dese...Comparativo do uso de linguagens de programação e geradores de código no dese...
Comparativo do uso de linguagens de programação e geradores de código no dese...
 
Aula 2 - POO: Fundamentos da linguagem Java
Aula 2 - POO: Fundamentos da linguagem JavaAula 2 - POO: Fundamentos da linguagem Java
Aula 2 - POO: Fundamentos da linguagem Java
 
paradigmasdlsksmmskskkekekekekedmmmdmdmmf.pdf
paradigmasdlsksmmskskkekekekekedmmmdmdmmf.pdfparadigmasdlsksmmskskkekekekekedmmmdmdmmf.pdf
paradigmasdlsksmmskskkekekekekedmmmdmdmmf.pdf
 
1º FasS2B 2010
1º FasS2B 20101º FasS2B 2010
1º FasS2B 2010
 
Algoritmia para o site do 10gi marcelo e ricardo
Algoritmia para o site do 10gi marcelo e ricardoAlgoritmia para o site do 10gi marcelo e ricardo
Algoritmia para o site do 10gi marcelo e ricardo
 
Técnicas_Implementação
Técnicas_ImplementaçãoTécnicas_Implementação
Técnicas_Implementação
 

Uma linguagem para chamar de minha: Criando DSLs no dia a dia - QConRio2015