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

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

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

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 ouInterpretação

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

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

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

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

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

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

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á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?

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: ...

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+Documentation

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

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