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
Let’s Create An Interpreter In Go
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Kenshi Kamata
November 05, 2017
Programming
160
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Let’s Create An Interpreter In Go
Go Conference 2017 Autumn
Kenshi Kamata
November 05, 2017
More Decks by Kenshi Kamata
See All by Kenshi Kamata
500万ユーザーを支える残高の冪等性 / The idempotency of the balance for 5 million Merpay users
knsh14
0
3k
チャネルの仕組み
knsh14
6
5.6k
Go1.10 strings.Builder の紹介
knsh14
2
1.4k
Go でインタプリタを 書いてみよう
knsh14
0
3.1k
Go Code Review Comment を翻訳した話
knsh14
0
7.7k
tvOS Leaderboard
knsh14
0
1.2k
Other Decks in Programming
See All in Programming
Language Server 使ってる? 〜VSCode と Zed の場合〜 / Are you using a Language Server? ~For VS Code and Zed~
handlename
0
780
Agentic UI
manfredsteyer
PRO
0
160
Lemonade + Foundry Toolkit でお手軽アプリ開発
seosoft
1
330
ローカルLLMを使ってB2Bサービスを作っていての学び
yaotti
0
170
Lessons from Spec-Driven Development
simas
PRO
0
190
Datadog × OpenTelemetry 入門と実践のあいだ
kn_to_maxpno
1
160
そのテスト、説明できますか?~LWテスト戦略FW~のご紹介
nakahara
0
120
Hunting Vulnerabilities in Symfony with LLMs
vinceamstoutz
0
540
Semantic Version 単位で戦略を柔軟に変えて、パッケージアップデートを自動化する
daitasu
1
240
ADKを使って簡単にAIエージェントを作ってみよう
k1mu21
0
260
Honoでのサプライチェーン侵害対策 〜 3つのライブラリに学ぶ
yusukebe
4
880
Claspは野良GASの夢をみるか
takter00
0
190
Featured
See All Featured
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
140
BBQ
matthewcrist
89
10k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
170
New Earth Scene 8
popppiees
3
2.3k
A designer walks into a library…
pauljervisheath
211
24k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
71
40k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
440
Darren the Foodie - Storyboard
khoart
PRO
3
3.4k
Skip the Path - Find Your Career Trail
mkilby
1
150
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
370
Marketing to machines
jonoalderson
1
5.4k
Transcript
Let’s Create An Interpreter In Go Go Conference 2017 Autumn
Self Introduce • Kenshi Kamata • @knsh14 (twitter, GitHub) •
KLab inc. ◦ Unity3d Editor Extension ◦ Create Facebook Instant Game
What I did? • Read Writing An Interpreter In Go
◦ https://interpreterbook.com/ • Actually Create An Interpreter • Create An Interpreter in about 1400 lines! ◦ Included test code, about 2500 lines
DEMO let x = 0; let array = [0, 10,
20, 30, 40]; array[1]; let fib = fn(x) { if(x == 0) { 0; } else { if (x == 1) { 1;} else { fib(x-1) + fib(x-2);}}}; let loop = fn(i, max, f) { if(i == max){return 0;} f(); loop(i +1, max, f);}; let p = fn() { puts(“hello world”);};
Why I did? • I want to create self-produced Language
• Tried “Writing An Interpreter In C” book ◦ but it was so hard and gave up • I heard good book by Go is released! so I decided to try again.
Specification • Monkey Language • Integer, Boolean, String, Function •
Array, Hash • Able to use if statement ◦ No For loop • No yacc, use self-implemented Lexer and Parser
How long Until Finished • About 1 month • some
finished in one week • Most of people can finish within 1.5 month
Hard Part • Parser logic was hard • Pratt Parser
• google 演算子順位法 in japanese
What I learned • Fun to make Language by myself!
• Understand AST a little through Parser Chapter • Not Following Go Practice in Some part
Understand AST • Build AST in Parser Chapter • Wrote
A tool to check cyclomatic complexity with AST in past but it was poor code • I must be able to write better code after reading Parser chapter
Not Following Go Practice • Return Error ASAP / Return
Error type • Not good practice in Interpreter • Example Code in Monkey • Actually, go/parser has similar code • https://golang.org/src/go/parser/parser.go filter by “p.error”, you can see no handling error
Not following Go practice • Don’t want to stop processing
• For user experience, Parse to End then show all error messages • append to error string list, so not need to handle error at the time
Finally • Great feeling to exec code on my own
interpreter ◦ different feeling to playing my own game • Good for Japanese people ◦ Easy English ◦ Understand by English after Understanding by Code
Next is Your Turn!!