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
Goでインタプリタつくった
Search
vortispy
March 05, 2017
Programming
0
290
Goでインタプリタつくった
"Writing An Interpreter In Go"
https://interpreterbook.com/
をよんでインタプリタつくった。ただそれだけの話。
vortispy
March 05, 2017
Tweet
Share
Other Decks in Programming
See All in Programming
15年続くIoTサービスのSREエンジニアが挑む分散トレーシング導入
melonps
2
200
フルサイクルエンジニアリングをAI Agentで全自動化したい 〜構想と現在地〜
kamina_zzz
0
400
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
570
AIフル活用時代だからこそ学んでおきたい働き方の心得
shinoyu
0
130
React 19でつくる「気持ちいいUI」- 楽観的UIのすすめ
himorishige
11
7.4k
CSC307 Lecture 03
javiergs
PRO
1
490
Data-Centric Kaggle
isax1015
2
770
Vibe Coding - AI 驅動的軟體開發
mickyp100
0
180
Fluid Templating in TYPO3 14
s2b
0
130
AI巻き込み型コードレビューのススメ
nealle
1
270
責任感のあるCloudWatchアラームを設計しよう
akihisaikeda
3
170
Automatic Grammar Agreementと Markdown Extended Attributes について
kishikawakatsumi
0
190
Featured
See All Featured
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
910
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
0
350
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
160
Typedesign – Prime Four
hannesfritz
42
2.9k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.4k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
320
My Coaching Mixtape
mlcsv
0
48
Between Models and Reality
mayunak
1
190
How GitHub (no longer) Works
holman
316
140k
Automating Front-end Workflow
addyosmani
1371
200k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
1.9k
Transcript
Goでインタプリタつくった @vortispy
概要 • “Writing An Interpreter In Go”を読んでインタプ リタつくった • Go言語しか使わない
• GotoutineやChannelは使わない • 難しいことは気にせずとりあえず作ってみる
なにやった • 字句解析(Lexing) • 構文解析(Parsing) • 評価(Evaluation)
字句解析 • 文字列をTokenに変換する • “let a = 1;” → <LET><IDENT><ASSIGN><INT><SEMICOLO
N>
構文解析 • ここが山場 • TokenからAST(Abstract syntax tree)をつくる
let a = 1; if (a > 10) { return
a; } <LET><IDENT><ASSING><INT><SEMICOLON> <IF><IDENT><GT><INT><LBRACE> <RETURN><IDENT><SEMICOLON> <RBRACE>
None
• 使うアルゴリズムは“Top Down Operator Precedence”(Pratt parser)
評価 • ASTを解釈して実行する • どのように解釈させるか? • 例: “foo” * 3
• Python: “foofoofoo” • Go: cannot convert "foo" to type int invalid operation: "foo" * 3
• 自作インタプリタがプログラムを実行できるよ うになるので楽しい
まとめ • たのしい