Slide 1

Slide 1 text

Let’s Create An Interpreter In Go Go Conference 2017 Autumn

Slide 2

Slide 2 text

Self Introduce ● Kenshi Kamata ● @knsh14 (twitter, GitHub) ● KLab inc. ○ Unity3d Editor Extension ○ Create Facebook Instant Game

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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”);};

Slide 5

Slide 5 text

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.

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

How long Until Finished ● About 1 month ● some finished in one week ● Most of people can finish within 1.5 month

Slide 8

Slide 8 text

Hard Part ● Parser logic was hard ● Pratt Parser ● google 演算子順位法 in japanese

Slide 9

Slide 9 text

What I learned ● Fun to make Language by myself! ● Understand AST a little through Parser Chapter ● Not Following Go Practice in Some part

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

Next is Your Turn!!