Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

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

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.

Jacqueline Abreu

August 28, 2015
Tweet

More Decks by Jacqueline Abreu

Other Decks in Technology

Transcript

  1. “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
  2. 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
  3. DSLs são linguagens O que diferencia DSLs e linguagens de

    propósito geral é a função, e não a forma.
  4. if (x > 3.1) { print(x); } Análise Lexica Quais

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

    são e o que significam os símbolos da linguagem?
  6. 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
  7. 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
  8. 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); }
  9. 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?
  10. 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: ...
  11. 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)
  12. Por que ANTLR 4 ➔ Porque ele não é o

    ANTLR 3 ➔ Facilidade ➔ Muito material online ➔ Compila para Java, C#, Python e Javascript
  13. 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.
  14. 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.
  15. 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