Criando DSLs no dia a dia
Transcrição
Criando DSLs no dia a dia
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 Algumas DSLs Yaml CSS SQL LaTeX DSL x General-purpose language DSLs possuem features que são utilizadas apenas para um domínio específico, não permitindo reutilização de outras formas. DSLs são linguagens O que diferencia DSLs e linguagens de propósito geral é a função, e não a forma. Código Fonte Análise Lexica Análise Sintática Análise Semântica Codegen ou Interpretação Análise Lexica Quais são e o que significam os símbolos da linguagem? if (x > 3.1) { print(x); } Análise Lexica Quais são e o que significam os símbolos da linguagem? if (x > 3.1) { print(x); } Quais são e o que significam os símbolos da linguagem? Análise Lexica if (x > 3.1) { print(x); } if r o nu r l id i r s l i ke eft den per en left denightemi ight m ight eft be pa ti a pa tif pa co yw tif c pa cur r re fie tor ie re ie re lon urly r l or y e r nt r gt nt r nt nt -b d -b he he ra h he ra e sis sis ce sis ces sis s Quais são e o que significam os símbolos da linguagem? Análise Lexica if (x > 3.1) { print(x); } if r o nu r l id i r s l i ke eft den per en left denightemi ight m ight eft be pa ti a pa tif pa co yw tif c pa cur r re fie tor ie re ie re lon urly r l or y e r nt r gt nt r nt nt -b d -b he he ra h he ra e sis sis ce sis ces sis s Análise Sintática Como os símbolos se organizam seguindo a sintaxe? if-stmt condition then-stmt binary op function call if (x > 3.1) { print(x); } Análise Sintática Como os símbolos se organizam seguindo a sintaxe? if > x print 3.1 x AnáliseSemântica Sintática Análise O que significa cada nó da AST? Qual o tipo de cada expressão? void if boolean void print 1 arg > float float float x 3.1 x Análise Sintática Codegen E qual o resultado disso tudo? void if boolean void print 1 arg > float float float x 3.1 x 0122: 0123: 0124: 0125: 0126: 0127: 0128: 0129: ... LOAD_VAR x LOAD_FLOAT 3.1 GT JUMP_IF_FALSE 0129 LOAD_VAR x CALL print ... 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 JFlex JavaCC ANTLR4 Ragel 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+Docume ntation 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 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