Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
JavaScript AST
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
MURAKAMI Masahiko
December 08, 2017
Technology
1.8k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
JavaScript AST
MURAKAMI Masahiko
December 08, 2017
More Decks by MURAKAMI Masahiko
See All by MURAKAMI Masahiko
AWS Blocks を触ってみた/first-tach-aws-blocks
fossamagna
2
100
AWS Amplifyをもっと便利に使うための取り組み/amplify-tools-and-contributions
fossamagna
1
160
Amazon Verified Permissions実践入門 〜Cedar活用とAppSync導入事例/Practical Introduction to Amazon Verified Permissions
fossamagna
2
390
Amplify Gen2から知るAWS CDK Toolkit Libraryの使い方/How to use the AWS CDK Toolkit Library as known from Amplify Gen2
fossamagna
1
920
AWS Amplify Gen2向けのVSCode拡張を作って公開してみた話/lts-techday-2024
fossamagna
0
54
CDKアプリとしてのAmplify Gen2 - @aws-amplify/backendのアーキテクチャにみるCDKベストプラクティス -
fossamagna
3
3.7k
Amplify Gen2の 新機能と実践的な使用例 AWS Amplify Gen 2 Festival in Japan/New features and practical use cases in Amplify Gen2
fossamagna
0
850
Amplify Gen2を 拡張してみよう JAWS-UG北陸新幹線 ( 福井開催 ) 2024-04-06/Let's extend Amplify Gen2
fossamagna
0
1.1k
みんな本当に AWS Amplify を知っている?/do-you-really-know-aws-amplify
fossamagna
0
200
Other Decks in Technology
See All in Technology
AIで政治は変わるのか? — 中高生と考えたAI時代の民主主義(東海高校サタデープログラム)
eitarosuda
0
330
4人目のSREはAgent
tanimuyk
0
340
感情と身体を置き去りにしない、エンジニアの生きのこり方 ──いまから、ここから「自分の状態」を扱うという選択
saorimurooka
0
440
Text-to-SQLをAgentCoreで実現し、生成されるSQLの精度を定量的に評価する
yakumo
2
300
Zenoh on Zephyr on LiteX
takasehideki
2
160
自分が詳しくない領域でAIを使う #プロヒス2026
konifar
20
8.2k
Fabricをフル活用する AI Agent Hub -製造業特化AIエージェントの設計
iotcomjpadmin
0
180
そのタスクオンスケですか?
poropinai1966
0
110
小さいから、全部わかる。— 常駐AI "xangi" のすすめ
sugupoko
0
200
AIに「使われる」時代のSaaS戦略 〜既存WebAPIのMCPサーバー化における開発ノウハウ〜
ekispert_api
0
130
『AIに負けない』より『AIと遊ぶ』」〜ワクワクが最強のテスト・QA学習戦略_公開用
odan611
1
300
Microsoft のサポートとフィードバック総まとめ
murachiakira
PRO
0
130
Featured
See All Featured
SEO for Brand Visibility & Recognition
aleyda
0
4.6k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
10k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
25k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
210
The SEO identity crisis: Don't let AI make you average
varn
0
510
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.4k
RailsConf 2023
tenderlove
30
1.5k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Being A Developer After 40
akosma
91
590k
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
180
Writing Fast Ruby
sferik
630
63k
GraphQLとの向き合い方2022年版
quramy
50
15k
Transcript
JavaScript AST A-LT 2017-12-08 村上 雅彦 @fossamagna
村上 雅彦 a.k.a @fossamagna IT サー ビス事業部 所属 2
今日の話 JavaScript のAST の話 AST って何? AST で何ができるの? JavaScript とAST
3
AST って何? 4
Abstract Syntax Tree プログラムをパー スして意味のある情 報を木構造で表現したデー タ 5
AST をもう少し詳しく Abstract プログラムの行番号、 空白、 括弧などの情報は 取り除かれている( 存在する場合もある) Syntax プログラムの構文
Tree 木構造。 字句など木構造の枝葉として表現され る 6
var ast = "Abstract Syntax Tree"; のAST {"type": "Program", "body":
[{ "type": "VariableDeclaration", "declarations": [{ "type": "VariableDeclarator", "id": { "type": "Identifier", "name": "ast" }, "init": { "type": "Literal", "value": "Abstract Syntax Tree", "raw": "\"Abstract Syntax Tree\"" } }], "kind": "var"}] , "sourceType": "script"} 7
AST で何ができるの? コー ドを処理するツー ルが作れる Lint ツー ルやドキュメント生成、 コー ド生成も。
新しい機能やライブラリに対応するようにコー ド変換するなど。 パー サー によってはJSX, Flow なども対応可能 CoffeeScript, TypeScript などのAltJS なんかのト ランスパイラ 8
JavaScript のパー サ AST はパー サでソー スコー ドをパー スして作る。 JavaScript
の主要なパー サには以下のものがある。 babylon:Babel で使っているECMAScript パー サ esprima:estree が標準化しているJavaScript の AST フォー マットに準拠したパー サ espree:ESLint が使っているacorn ベー スのパー サ acorn:parse_js の作者がesprima に対抗して作成し たパー サ 9
JS をパー スしてAST を作ってみる(esprima) esprima でJavaScript コー ドをパー スするJavaScript var
esprima = require('esprima'); var program = 'var ast = "Abstract Syntax Tree"'; var ast = esprima.parseScript(program); console.log(ast); パー スした結果のAST オブジェクト { type: 'Program', body: [ { type: 'VariableDeclaration', declarations: [Object], kind: 'var' } ], sourceType: 'script' } 10
JavaScript のAST JavaScript のAST はJavaScript オブジェクト JavaScript オブジェクトなので自由に変更できる。 var program
= 'var ast = "Abstract Syntax Tree"'; var ast = esprima.parseScript(program); // var を const に変える! ast.body[0].kind = 'const'; { type: 'Program', body: [ { type: 'VariableDeclaration', declarations: [Object], kind: 'const' } ], sourceType: 'script' } 11
AST をJavaScript コー ドに変換 ジェネレー タを使うとAST をコー ドに変換できる JS Code
-> (Parser) -> AST -> (Generator) -> JS Code escodegen esprima などのAST からコー ドを生成する babel-generator babel のAST からコー ドを生成する 12
AST をJavaScript コー ドに変換 var をconst に変換するコー ド: var esprima
= require('esprima'); var escodegen = require('escodegen'); var program = 'var ast = "Abstract Syntax Tree"'; var ast = esprima.parseScript(program); // var を const に変える! ast.body[0].kind = 'const'; var code = escodegen.generate(ast); console.log(code); 変換したJavaScript: const ast = "Abstract Syntax Tree"'; 13
AST を利用したツー ルの紹介 Babel ESLint browserify gasify by @fossamagna 14
参考資料 JavaScript AST を始める最初の一歩 Acorn: yet another JavaScript parser 15