Linguagens e compiladores são temas muito comentados, porém o mecanismo que transforma o conjunto de instruções em código executável ainda parece para muitos um tanto abstrato. Nesta palestra será apresentada a criação de uma Domain-Specific Language (DSL) externa, demonstrando os passos para a construção de gramática e as análises léxica, sintática e semântica. Para tornar o processo concreto, serão compartilhadas as etapas e decisões e o ferramental utilizado na geração de uma DSL.
Com isso, além de conhecer os fundamentos da criação de linguagens específicas a domínios, os participantes verão possíveis caminhos para construir outras linguagens de acordo com a necessidade de cada projeto e desenvolvedor.
5. “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
7. 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
8. DSLs são linguagens
O que diferencia DSLs e linguagens de propósito
geral é a função, e não a forma.
13. if (x > 3.1) { print(x); }
Análise Lexica
Quais são e o que significam os
símbolos da linguagem?
14. if (x > 3.1) { print(x); }
Análise Lexica
Quais são e o que significam os
símbolos da linguagem?
15. 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
16. 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
18. Como os símbolos se organizam
seguindo a sintaxe?
Análise Sintática
if
> print
xx 3.1
19. 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?
20. 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: ...
25. 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)
29. Gramática é um conjunto de regras
que definem a construção de strings
de uma linguagem formal.
30. 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.
31. 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.