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.
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
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?;