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

Uma linguagem para chamar de minha: Criando DSLs no dia a diaqconrio.com/rio2015/system/files/presentation-slides/jacquelineab... · Análise Lexica Quais são e o que significam

Jan 27, 2019

Download

Documents

lamthien
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Uma linguagem para chamar de minha: Criando DSLs no dia a diaqconrio.com/rio2015/system/files/presentation-slides/jacquelineab... · Análise Lexica Quais são e o que significam

Uma linguagem para chamar de minha:

Criando DSLs no dia a dia

Page 2: Uma linguagem para chamar de minha: Criando DSLs no dia a diaqconrio.com/rio2015/system/files/presentation-slides/jacquelineab... · Análise Lexica Quais são e o que significam

Jacqueline Abreu Lopes

Developer

Acredita que todas as tecnologias tem algo positivo

Mamãe do Miguel @JacAbreu

Page 3: Uma linguagem para chamar de minha: Criando DSLs no dia a diaqconrio.com/rio2015/system/files/presentation-slides/jacquelineab... · Análise Lexica Quais são e o que significam

Objetivo:

Contribuir para que todos construam as suas DSLs

Page 4: Uma linguagem para chamar de minha: Criando DSLs no dia a diaqconrio.com/rio2015/system/files/presentation-slides/jacquelineab... · Análise Lexica Quais são e o que significam

Domain Specific Language

Page 5: Uma linguagem para chamar de minha: Criando DSLs no dia a diaqconrio.com/rio2015/system/files/presentation-slides/jacquelineab... · Análise Lexica Quais são e o que significam

“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

Page 6: Uma linguagem para chamar de minha: Criando DSLs no dia a diaqconrio.com/rio2015/system/files/presentation-slides/jacquelineab... · Análise Lexica Quais são e o que significam

CSS

LaTeX

Yaml

SQL

Algumas DSLs

Page 7: Uma linguagem para chamar de minha: Criando DSLs no dia a diaqconrio.com/rio2015/system/files/presentation-slides/jacquelineab... · Análise Lexica Quais são e o que significam

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

Page 8: Uma linguagem para chamar de minha: Criando DSLs no dia a diaqconrio.com/rio2015/system/files/presentation-slides/jacquelineab... · Análise Lexica Quais são e o que significam

DSLs são linguagens

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

Page 9: Uma linguagem para chamar de minha: Criando DSLs no dia a diaqconrio.com/rio2015/system/files/presentation-slides/jacquelineab... · Análise Lexica Quais são e o que significam
Page 10: Uma linguagem para chamar de minha: Criando DSLs no dia a diaqconrio.com/rio2015/system/files/presentation-slides/jacquelineab... · Análise Lexica Quais são e o que significam
Page 11: Uma linguagem para chamar de minha: Criando DSLs no dia a diaqconrio.com/rio2015/system/files/presentation-slides/jacquelineab... · Análise Lexica Quais são e o que significam
Page 12: Uma linguagem para chamar de minha: Criando DSLs no dia a diaqconrio.com/rio2015/system/files/presentation-slides/jacquelineab... · Análise Lexica Quais são e o que significam

Análise Lexica

Análise Semântica

Código Fonte

Análise Sintática

Codegen ouInterpretação

Page 13: Uma linguagem para chamar de minha: Criando DSLs no dia a diaqconrio.com/rio2015/system/files/presentation-slides/jacquelineab... · Análise Lexica Quais são e o que significam

if (x > 3.1) { print(x); }

Análise LexicaQuais são e o que significam os símbolos da linguagem?

Page 14: Uma linguagem para chamar de minha: Criando DSLs no dia a diaqconrio.com/rio2015/system/files/presentation-slides/jacquelineab... · Análise Lexica Quais são e o que significam

if (x > 3.1) { print(x); }

Análise LexicaQuais são e o que significam os símbolos da linguagem?

Page 15: Uma linguagem para chamar de minha: Criando DSLs no dia a diaqconrio.com/rio2015/system/files/presentation-slides/jacquelineab... · Análise Lexica Quais são e o que significam

if (x > 3.1) { print(x); }

Análise LexicaQuais são e o que significam os símbolos da linguagem?

if keyword

left parenthesis

identifier

operator gt

number

right parenthesis

left curly-braces

identifier

left parenthesis

identifier

right parenthesis

semicolon

right curly-braces

Page 16: Uma linguagem para chamar de minha: Criando DSLs no dia a diaqconrio.com/rio2015/system/files/presentation-slides/jacquelineab... · Análise Lexica Quais são e o que significam

if (x > 3.1) { print(x); }

Análise LexicaQuais são e o que significam os símbolos da linguagem?

if keyword

left parenthesis

identifier

operator gt

number

right parenthesis

left curly-braces

identifier

left parenthesis

identifier

right parenthesis

semicolon

right curly-braces

Page 17: Uma linguagem para chamar de minha: Criando DSLs no dia a diaqconrio.com/rio2015/system/files/presentation-slides/jacquelineab... · Análise Lexica Quais são e o que significam

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); }

Page 18: Uma linguagem para chamar de minha: Criando DSLs no dia a diaqconrio.com/rio2015/system/files/presentation-slides/jacquelineab... · Análise Lexica Quais são e o que significam

Como os símbolos se organizam seguindo a sintaxe?

Análise Sintática

if

> print

xx 3.1

Page 19: Uma linguagem para chamar de minha: Criando DSLs no dia a diaqconrio.com/rio2015/system/files/presentation-slides/jacquelineab... · Análise Lexica Quais são e o que significam

Análise Sintática Análise Semântica

if

> print

xx 3.1float float float

boolean void

void

1 arg

O que significa cada nó da AST? Qual o tipo de cada expressão?

Page 20: Uma linguagem para chamar de minha: Criando DSLs no dia a diaqconrio.com/rio2015/system/files/presentation-slides/jacquelineab... · Análise Lexica Quais são e o que significam

Análise Sintática

if

> print

xx 3.1float float float

boolean void

void

1 arg

E qual o resultado disso tudo? Codegen

0122: ...0123: LOAD_VAR x0124: LOAD_FLOAT 3.10125: GT0126: JUMP_IF_FALSE 01290127: LOAD_VAR x0128: CALL print0129: ...

Page 21: Uma linguagem para chamar de minha: Criando DSLs no dia a diaqconrio.com/rio2015/system/files/presentation-slides/jacquelineab... · Análise Lexica Quais são e o que significam

Como construir uma Domain Specific Language

Page 22: Uma linguagem para chamar de minha: Criando DSLs no dia a diaqconrio.com/rio2015/system/files/presentation-slides/jacquelineab... · Análise Lexica Quais são e o que significam
Page 23: Uma linguagem para chamar de minha: Criando DSLs no dia a diaqconrio.com/rio2015/system/files/presentation-slides/jacquelineab... · Análise Lexica Quais são e o que significam
Page 24: Uma linguagem para chamar de minha: Criando DSLs no dia a diaqconrio.com/rio2015/system/files/presentation-slides/jacquelineab... · Análise Lexica Quais são e o que significam

+ + ...

Page 25: Uma linguagem para chamar de minha: Criando DSLs no dia a diaqconrio.com/rio2015/system/files/presentation-slides/jacquelineab... · Análise Lexica Quais são e o que significam

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)

Page 26: Uma linguagem para chamar de minha: Criando DSLs no dia a diaqconrio.com/rio2015/system/files/presentation-slides/jacquelineab... · Análise Lexica Quais são e o que significam

Parsers Generators

JavaCC

Ragel

JFlex

ANTLR4

Page 27: Uma linguagem para chamar de minha: Criando DSLs no dia a diaqconrio.com/rio2015/system/files/presentation-slides/jacquelineab... · Análise Lexica Quais são e o que significam

Por que ANTLR 4

➔ Porque ele não é o ANTLR 3

➔ Facilidade

➔ Muito material online

➔ Compila para Java, C#, Python e Javascript

Page 28: Uma linguagem para chamar de minha: Criando DSLs no dia a diaqconrio.com/rio2015/system/files/presentation-slides/jacquelineab... · Análise Lexica Quais são e o que significam

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

Page 29: Uma linguagem para chamar de minha: Criando DSLs no dia a diaqconrio.com/rio2015/system/files/presentation-slides/jacquelineab... · Análise Lexica Quais são e o que significam

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

de uma linguagem formal.

Page 30: Uma linguagem para chamar de minha: Criando DSLs no dia a diaqconrio.com/rio2015/system/files/presentation-slides/jacquelineab... · Análise Lexica Quais são e o que significam

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.

Page 31: Uma linguagem para chamar de minha: Criando DSLs no dia a diaqconrio.com/rio2015/system/files/presentation-slides/jacquelineab... · Análise Lexica Quais são e o que significam

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.

Page 32: Uma linguagem para chamar de minha: Criando DSLs no dia a diaqconrio.com/rio2015/system/files/presentation-slides/jacquelineab... · Análise Lexica Quais são e o que significam

Representação de Gramática

S → T

S → S

T → W

T → ε

Page 33: Uma linguagem para chamar de minha: Criando DSLs no dia a diaqconrio.com/rio2015/system/files/presentation-slides/jacquelineab... · Análise Lexica Quais são e o que significam

Representação de Gramática em ANTLR4

S : T | S;

T : W?;

Page 34: Uma linguagem para chamar de minha: Criando DSLs no dia a diaqconrio.com/rio2015/system/files/presentation-slides/jacquelineab... · Análise Lexica Quais são e o que significam

https://github.com/JacAbreu/QConRio2015

Page 35: Uma linguagem para chamar de minha: Criando DSLs no dia a diaqconrio.com/rio2015/system/files/presentation-slides/jacquelineab... · Análise Lexica Quais são e o que significam

https://github.com/JacAbreu/QConRio2015

Page 36: Uma linguagem para chamar de minha: Criando DSLs no dia a diaqconrio.com/rio2015/system/files/presentation-slides/jacquelineab... · Análise Lexica Quais são e o que significam

Bibliografiahttps://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