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
Kenshi Kamata
November 05, 2017
Programming
0
110
Let’s Create An Interpreter In Go
Go Conference 2017 Autumn
Kenshi Kamata
November 05, 2017
Tweet
Share
More Decks by Kenshi Kamata
See All by Kenshi Kamata
500万ユーザーを支える残高の冪等性 / The idempotency of the balance for 5 million Merpay users
knsh14
0
2.5k
チャネルの仕組み
knsh14
6
5.1k
Go1.10 strings.Builder の紹介
knsh14
2
1.2k
Go でインタプリタを 書いてみよう
knsh14
0
2.7k
Go Code Review Comment を翻訳した話
knsh14
0
7.1k
tvOS Leaderboard
knsh14
0
1.2k
Other Decks in Programming
See All in Programming
はてなにおける CSS Modules、及び CSS Modules に足りないもの / CSS Modules in Hatena, and CSS Modules missing parts
mizdra
6
910
Rubyでたのしむクリエイティブコーディング/Enjoy Creative coding with Ruby
chobishiba
1
180
大規模Reactアプリのリアーキテクチャ~8万行のTanStack Query移行の軌跡~
kj455
4
940
Java 22 Overview
kishida
1
180
OpenAPIを中心に考えるAPI開発入門 / Introduction to API Development with a Focus on OpenAPI
seike460
PRO
2
170
From Spring Boot 2 to Spring Boot 3 with Java 22 and Jakarta EE
ivargrimstad
0
1.1k
Changed Rules: Architectures with Lightweight Stores
manfredsteyer
PRO
0
240
Anthropic Cookbook のおすすめレシピ
schroneko
7
870
TYPO3 v13 – The road to LTS: What's new and new APIs
luisasofie_xoxo
0
190
Site Reliability Engineering for GMO
pyama86
7
1k
ゆるい個人開発のススメ
kuroppe1819
10
980
⼤規模⾔語モデルの拡張(RAG)が 終わったかも知れない件について
nearme_tech
23
15k
Featured
See All Featured
Understanding Cognitive Biases in Performance Measurement
bluesmoon
7
990
Designing with Data
zakiwarfel
96
4.8k
Agile that works and the tools we love
rasmusluckow
325
20k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
30
6k
BBQ
matthewcrist
80
8.8k
Statistics for Hackers
jakevdp
789
220k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
241
1.2M
Thoughts on Productivity
jonyablonski
58
3.8k
10 Git Anti Patterns You Should be Aware of
lemiorhan
648
58k
Infographics Made Easy
chrislema
238
18k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
116
18k
jQuery: Nuts, Bolts and Bling
dougneiner
59
7.1k
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!!