miller medeiros: ast - abstract syntax tree

22
AST: Abstract Syntax Tree / Setembro 2013 @millermedeiros

Upload: imasters

Post on 29-Jun-2015

787 views

Category:

Technology


0 download

DESCRIPTION

7Masters JavaScript | Miller Medeiros

TRANSCRIPT

Page 1: Miller Medeiros: AST - Abstract Syntax Tree

AST: AbstractSyntax Tree

/ Setembro 2013@millermedeiros

Page 2: Miller Medeiros: AST - Abstract Syntax Tree

Mas o que vem a ser AST?

Page 3: Miller Medeiros: AST - Abstract Syntax Tree

AST é uma representação do"código" em formato de

"árvore".

Page 4: Miller Medeiros: AST - Abstract Syntax Tree
Page 5: Miller Medeiros: AST - Abstract Syntax Tree

AST é normalmente um formato de transição, usado para descrever aestrutura original do programa antes que o mesmo seja convertido para

outro formato.

Page 6: Miller Medeiros: AST - Abstract Syntax Tree

é 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",

Page 7: Miller Medeiros: AST - Abstract Syntax Tree

E por que isso é útil?

Page 8: Miller Medeiros: AST - Abstract Syntax Tree

É muito útil para ferramentasque analizam código

Page 9: Miller Medeiros: AST - Abstract Syntax Tree

lint / validaçãoanálise de complexidadeautocomplete baseado no contextodetecção de globais...

Page 10: Miller Medeiros: AST - Abstract Syntax Tree

É também muito importantepara ferramentas que alteram o

código

Page 11: Miller Medeiros: AST - Abstract Syntax Tree

minificaçãoformataçãorefactoringcompilerstranspilers...

Page 12: Miller Medeiros: AST - Abstract Syntax Tree

Estrutura da AST(Esprima / SpiderMonkey Parser API)

Page 13: Miller Medeiros: AST - Abstract Syntax Tree

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"}]

Page 14: Miller Medeiros: AST - Abstract Syntax Tree

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" } }

}

Page 15: Miller Medeiros: AST - Abstract Syntax Tree

Ferramentas

Page 16: Miller Medeiros: AST - Abstract Syntax Tree

EsprimaEsprima é o parser mais popular para JavaScript e existem diversas

ferramentas baseadas nele.

http://esprima.org/demo/parse.html

Page 17: Miller Medeiros: AST - Abstract Syntax Tree

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

Page 18: Miller Medeiros: AST - Abstract Syntax Tree

nodefyConverte módulos escritos no formato AMD para node.js

https://github.com/millermedeiros/nodefy

Page 21: Miller Medeiros: AST - Abstract Syntax Tree

Construa asferramentas do

futuro!

Page 22: Miller Medeiros: AST - Abstract Syntax Tree

Obrigado!@millermedeiros

http://slides.millermedeiros.com/7masters/ast/