Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
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
530
AWS Blocks を触ってみた/first-tach-aws-blocks
fossamagna
2
240
AWS Amplifyをもっと便利に使うための取り組み/amplify-tools-and-contributions
fossamagna
1
180
Amazon Verified Permissions実践入門 〜Cedar活用とAppSync導入事例/Practical Introduction to Amazon Verified Permissions
fossamagna
2
450
Amplify Gen2から知るAWS CDK Toolkit Libraryの使い方/How to use the AWS CDK Toolkit Library as known from Amplify Gen2
fossamagna
1
980
AWS Amplify Gen2向けのVSCode拡張を作って公開してみた話/lts-techday-2024
fossamagna
0
74
CDKアプリとしてのAmplify Gen2 - @aws-amplify/backendのアーキテクチャにみるCDKベストプラクティス -
fossamagna
3
3.8k
Amplify Gen2の 新機能と実践的な使用例 AWS Amplify Gen 2 Festival in Japan/New features and practical use cases in Amplify Gen2
fossamagna
0
880
Amplify Gen2を 拡張してみよう JAWS-UG北陸新幹線 ( 福井開催 ) 2024-04-06/Let's extend Amplify Gen2
fossamagna
0
1.1k
Other Decks in Technology
See All in Technology
俺の仕事は AIに奪われないし、たぶんその BIも要らない
hikaruri
0
320
例外の正しい扱い方 そのエラー try-catchして大丈夫?
jinwatanabe
3
480
10Xに技術的負債をもたらした「2つの境界の歪み」その構造と解消への営み
10xinc
0
700
SREは、MCPとAutopilotをこう使え!
kazumax55
1
150
Minecraft JavaのMODをSwiftで作る
1mash0
0
140
AI 時代のスタートアップエコシステ厶から考究する技術的負債との向き合い方
m3m0r7
PRO
0
430
Adaptive Warehouse を今すぐ導入すべき理由と迷ったときの判断基準
__allllllllez__
0
210
新機種発売前に見直そう!端末移行で再ログインが要るアプリ・要らないアプリは何が違うのか 〜シームレスに再開できる設計と実装〜
zozotech
PRO
0
150
深夜のクラウド懺悔室 1:29:300 or 1:0:0
kazzpapa3
1
240
omasushiというライブラリを作った
polidog
PRO
0
220
2026/09/10 Spring Bootから Jakarta EE/MicroProfileへの移行
megascus
0
350
WAF 運用改善の承認サイクル/SRE_BizReach_MIXI_1
visional_engineering_and_design
2
620
Featured
See All Featured
KATA
mclloyd
PRO
35
15k
Docker and Python
trallard
47
4.2k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
880
Ethics towards AI in product and experience design
skipperchong
2
370
Bootstrapping a Software Product
garrettdimon
PRO
306
120k
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
370
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
We Are The Robots
honzajavorek
0
370
The Curious Case for Waylosing
cassininazir
1
500
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
230
So, you think you're a good person
axbom
PRO
2
2.2k
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