Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

Jacqueline Abreu Lopes Developer Acredita que todas as tecnologias tem algo positivo Mamãe do Miguel @JacAbreu

Slide 3

Slide 3 text

Objetivo: Contribuir para que todos construam as suas DSLs

Slide 4

Slide 4 text

Domain Specific Language

Slide 5

Slide 5 text

“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

Slide 6

Slide 6 text

CSS LaTeX Yaml SQL Algumas DSLs

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

DSLs são linguagens O que diferencia DSLs e linguagens de propósito geral é a função, e não a forma.

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

No content

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

Análise Lexica Análise Semântica Código Fonte Análise Sintática Codegen ou Interpretação

Slide 13

Slide 13 text

if (x > 3.1) { print(x); } Análise Lexica Quais são e o que significam os símbolos da linguagem?

Slide 14

Slide 14 text

if (x > 3.1) { print(x); } Análise Lexica Quais são e o que significam os símbolos da linguagem?

Slide 15

Slide 15 text

if (x > 3.1) { print(x); } Análise Lexica Quais são e o que significam os símbolos da linguagem? if keyw ord left parenthesis identifier operator gt num ber right parenthesis left curly-braces identifier left parenthesis identifier right parenthesis sem icolon right curly-braces

Slide 16

Slide 16 text

if (x > 3.1) { print(x); } Análise Lexica Quais são e o que significam os símbolos da linguagem? if keyw ord left parenthesis identifier operator gt num ber right parenthesis left curly-braces identifier left parenthesis identifier right parenthesis sem icolon right curly-braces

Slide 17

Slide 17 text

function call if-stmt then-stmt condition binary op Como os símbolos se organizam seguindo a sintaxe? Análise Sintática if (x > 3.1) { print(x); }

Slide 18

Slide 18 text

Como os símbolos se organizam seguindo a sintaxe? Análise Sintática if > print x x 3.1

Slide 19

Slide 19 text

Análise Sintática Análise Semântica if > print x x 3.1 float float float boolean void void 1 arg O que significa cada nó da AST? Qual o tipo de cada expressão?

Slide 20

Slide 20 text

Análise Sintática if > print x x 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: ...

Slide 21

Slide 21 text

Como construir uma Domain Specific Language

Slide 22

Slide 22 text

No content

Slide 23

Slide 23 text

No content

Slide 24

Slide 24 text

+ + ...

Slide 25

Slide 25 text

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)

Slide 26

Slide 26 text

Parsers Generators JavaCC Ragel JFlex ANTLR4

Slide 27

Slide 27 text

Por que ANTLR 4 ➔ Porque ele não é o ANTLR 3 ➔ Facilidade ➔ Muito material online ➔ Compila para Java, C#, Python e Javascript

Slide 28

Slide 28 text

https://theantlrguy.atlassian. net/wiki/display/ANTLR4/ANTLR+4+Docume ntation

Slide 29

Slide 29 text

Gramática é um conjunto de regras que definem a construção de strings de uma linguagem formal.

Slide 30

Slide 30 text

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.

Slide 31

Slide 31 text

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.

Slide 32

Slide 32 text

Representação de Gramática S → T S → S T → W T → ε

Slide 33

Slide 33 text

Representação de Gramática em ANTLR4 S : T | S; T : W?;

Slide 34

Slide 34 text

https://github.com/JacAbreu/QConRio2015

Slide 35

Slide 35 text

https://github.com/JacAbreu/QConRio2015

Slide 36

Slide 36 text

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