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
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
AmplifyHostingConstructからSSRフレームワークのためのホスティング設計を考察する/amplify-hosting-construct
fossamagna
1
480
AWS Blocks を触ってみた/first-tach-aws-blocks
fossamagna
2
220
AWS Amplifyをもっと便利に使うための取り組み/amplify-tools-and-contributions
fossamagna
1
180
Amazon Verified Permissions実践入門 〜Cedar活用とAppSync導入事例/Practical Introduction to Amazon Verified Permissions
fossamagna
2
430
Amplify Gen2から知るAWS CDK Toolkit Libraryの使い方/How to use the AWS CDK Toolkit Library as known from Amplify Gen2
fossamagna
1
970
AWS Amplify Gen2向けのVSCode拡張を作って公開してみた話/lts-techday-2024
fossamagna
0
69
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
870
Amplify Gen2を 拡張してみよう JAWS-UG北陸新幹線 ( 福井開催 ) 2024-04-06/Let's extend Amplify Gen2
fossamagna
0
1.1k
Other Decks in Technology
See All in Technology
Introduction to Sansan for Engineers / エンジニア向け会社紹介
sansan33
PRO
6
77k
All About Sansan – for New Global Engineers
sansan33
PRO
1
1.5k
形式手法特論:Hyperproperty とモデル検査 #kernelvm / Kernel VM Study Tokyo 19th
ytaka23
0
790
内製AIチャットボット開発で学んだ Datadog Agent Observability活用術
mkdev10
0
140
Kiro Crew で始める マルチエージェント開発
miu_crescent
PRO
0
180
Claude Teamプランの コスト最適化を考える
rfdnxbro
0
640
属人化を叩き割れ!「制作加速」と「安定化」の矛盾を打破する:8年目プロダクトが辿り着いた「ミスが起こり得ない」アセット制作フローの全貌
gree_tech
PRO
0
490
Rust×eBPFでEDRっぽいものをつくる
sunlife3
2
960
アクセスキーが漏れた日にやるべきこと- 無効化の先にある本当の対応
kazzpapa3
0
320
MCPを待つな、パスキーを拡げよう(OAuth/OIDC Numa (Immersion) Workshop 2026)
oidfj
PRO
0
240
[potatotips #96] Give Your AI Agent the Flutter Playbook
korodroid
0
160
Kiro入門|仕様駆動開発で変わるAI時代の開発スタイル
cmkudo
0
360
Featured
See All Featured
Testing 201, or: Great Expectations
jmmastey
46
8.2k
Building the Perfect Custom Keyboard
takai
2
850
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
250
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.3k
A Tale of Four Properties
chriscoyier
163
24k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
970
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2.1k
Typedesign – Prime Four
hannesfritz
42
3.1k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
550
From π to Pie charts
rasagy
0
320
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.8k
WCS-LA-2024
lcolladotor
0
810
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