miller medeiros: ast - abstract syntax tree
DESCRIPTION
7Masters JavaScript | Miller MedeirosTRANSCRIPT
Mas o que vem a ser AST?
AST é uma representação do"código" em formato de
"árvore".
AST é normalmente um formato de transição, usado para descrever aestrutura original do programa antes que o mesmo seja convertido para
outro formato.
é representado como:
function sum(a, b) { return a + b;}
{ "type": "Program", "body": [ { "type": "FunctionDeclaration", "id": { "type": "Identifier", "name": "sum" }, "params": [ { "type": "Identifier", "name": "a" }, {
"type": "Identifier",
E por que isso é útil?
É muito útil para ferramentasque analizam código
lint / validaçãoanálise de complexidadeautocomplete baseado no contextodetecção de globais...
É também muito importantepara ferramentas que alteram o
código
minificaçãoformataçãorefactoringcompilerstranspilers...
Estrutura da AST(Esprima / SpiderMonkey Parser API)
Tokens (símbolos)Tokens são grupos de caracteres gerados apartir da análise léxica do
programa.
a + b
[{ "type": "Identifier", "value": "a"},{ "type": "Punctuator", "value": "+"},{ "type": "Identifier", "value": "b"}]
Nodes (nós)"Nodes" são representações de estruturas base do programa apartir da
análise sintática
a + b
{ "type": "ExpressionStatement", "expression": { "type": "BinaryExpression", "operator": "+", "left": { "type": "Identifier", "name": "a" }, "right": { "type": "Identifier", "name": "b" } }
}
Ferramentas
EsprimaEsprima é o parser mais popular para JavaScript e existem diversas
ferramentas baseadas nele.
http://esprima.org/demo/parse.html
EsformatterFormatador de JavaScript com mais de 200 opções de configuração,
ainda em fase experimental, provavelmente será "concluído" até o finalde 2013.
https://github.com/millermedeiros/esformatter
nodefyConverte módulos escritos no formato AMD para node.js
https://github.com/millermedeiros/nodefy
Outras ferramentas
RocamboleescodegenescopejshintUglifyJSJSComplexity
detect-globalsesrefactorgroundskeeperes6ifyIstanbulRework (css)
ReferênciasWikipedia: Abstract Syntax TreeWikipedia: Syntax AnalysisWikipedia: Lexical AnalysisSpiderMonkey Parser API
Construa asferramentas do
futuro!
Obrigado!@millermedeiros
http://slides.millermedeiros.com/7masters/ast/