Slide 1

Slide 1 text

Abstract Syntax Tree in Javascript

Slide 2

Slide 2 text

Name @brn (ꫬꅿ⨳ⵃ) Occupation ؿٗٝزؒٝسؒٝآص،٥ط؎ذ؍ـؒٝآص، Company Cyberagent ،سذؙأةآؔ AI Messenger OSS Contributor of V8 Blog http://abcdef.gets.b6n.ch/ Twitter https://twitter.com/brn227 GitHub https://github.com/brn

Slide 3

Slide 3 text

What is AST? ASTהכJavascriptךفؚٗٓي׾ػ٦أ׃׋穠卓欰䧭ׁ׸׷ 圓俑׾邌植׃׋加圓鸡ךֿה

Slide 4

Slide 4 text

if (x) { x = 100 }

Slide 5

Slide 5 text

IF CONDITION THEN BLOCK EXPRESSION STATEMENT ASSIGN VAR PROXY (X) LITERAL (100) if (x) { x = 100

Slide 6

Slide 6 text

Why need it? فؚٗٓيך㶵꬗׾׉ךתת⢪ֲךכꨇ׃ְկ javascript׾㹋遤ׅ׷׋׭חכ圫ղזؿؑ٦ؤָ֮׷կ غ؎ز؝٦س欰䧭ծCFG欰䧭ծIR欰䧭ծ剑黝⻉ծetc…

Slide 7

Slide 7 text

How do I create it? فؚٗٓىؚٝ鎉铂חכ㛇劤涸חכ俑岀ָ㶷㖈ׅ׷կ JavascriptכEcmaInternationalָ➬圫׾תה׭גⰕꟚ׃גְ׷կ

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

Grammars ׉ך⚥ח俑岀ָ㹀纏ׁ׸גְ׷ل٦آָ֮׷ךד׉ֿ׾⿫撑ׅ׷ֿ הדػ٦؟٦׾剅ֻֿהָדֹ׷կ

Slide 10

Slide 10 text

No content

Slide 11

Slide 11 text

But… ֿך俑岀㹀纏כ㛇劤涸ח׉ךתת⢪ֲךכꨇ׃ְկ

Slide 12

Slide 12 text

Javascript become too complex Javascriptך俑岀כַז׶醱꧟חז׏גֹגֶ׶ծ秪磏ח׉ךתת ػ٦أׅ׷ֿהַָז׶ꨇ׃ְկ

Slide 13

Slide 13 text

var a = /aaa|bbb/! b / 2 = 0;! ! // Is it easy?! b = / 2 = 0 /! ת׆כ剣せז姻鋉邌植ַ׵

Slide 14

Slide 14 text

var a = (x, y) => x + y;! var a = (x, y);! ! var a = x => x;! var a = x;! ،ٗ٦ꟼ侧

Slide 15

Slide 15 text

No content

Slide 16

Slide 16 text

var {a: b, b: c} = {b: 1, c: 2};! ({a: b, b: c});! ! [a, b, c] = [0, 1, 2];! [a, b, c];! ⴓⶴ➿Ⰵ

Slide 17

Slide 17 text

Parser has many state 穠㽷Parserכ㣐ꆀך朐䡾׾⥂䭯׃זָ׵갹䓸׏גػ٦أׅ׷׃ַז ְկ

Slide 18

Slide 18 text

AST Usage 蕱⸤׃ג⡲׶♳־׋ASTכוֲ⢪׻׸גְ׷ךַ

Slide 19

Slide 19 text

In V8 ASTַ׵Scope׾欰䧭׃׋׶ׅ׷ ׁ׵ח剑穄涸חBytecode׾欰䧭׃ג㹋遤ׅ׷ YieldװAsync٥Awaitך圓俑׾JavascriptךStateMachineח㢌䳔ׅ ׷

Slide 20

Slide 20 text

In Babel AST׾㢌䳔׃ג剑倜ךJavascriptַ׵植㖈ךJavascriptפ㢌䳔ׅ׷

Slide 21

Slide 21 text

In istanbul AST׾㢌䳔׃גぐ؝٦س꟦ח鸐麓׃׋⽩׾➰ֽ׷؝٦س׾㙵׭鴥׬

Slide 22

Slide 22 text

Try and play AST Esprima׾⢪ֲֿהד知⽃חAST׾欰䧭ׅ׷ֿהָדֹ׷ ת׋ https://github.com/estools חػ٦أ׃׋׶AST׾Query׃׋׶ׅ׷خ٦ָٕ尶㿊֮׷ךד鑐׃ ג׫׷ה葺ְ

Slide 23

Slide 23 text

Summary AST׾鍗׷ה鸐䌢ךفؚٗٓيדכꨇ׃ַ׏׋ֿהָ葿ղדֹ׷״ ֲחז׷ 嚂׃ְךד僽ꬊ♧㔐ֻ׵ְכ鑐׃ג׫׷הְְה䙼ֲ