Thank you for an amazing SeaGL 2021!
Love SeaGL and want to help out? Get Involved

How to Train Your Compiler

You probably use a compiler or an interpreter every day, but do you know how they work? The first compilers were designed more than 60 years ago, but writing a compiler is still viewed as a challenge. However, brave knight, do not fear! Equipped with modern tools and theory we can slay the dragon! Along your journey you will likely gain insights about the trade offs made during the design and implementation of your favorite language.

We’ll look at the major components of compilers and interpreters and the theory behind their design. First we’ll discuss compilers and the difference between the compiler’s front end and back end with examples in simple C code. We’ll explain the process of lexing, parsing, and machine code generation, and some common analysis techniques and optimizations. Then we’ll examine interpreters through the lens of Python and compare and contrast different designs. We’ll look at the trade offs made during interpretation and compilation and how they will affect the code you write.

This talk has been presented at Beaver BarCamp in April, 2015 and is being further refined.

The source code for the slides can be found at

A relatively recent build of the slides can be found at


Ian Kronquist

Ian Kronquist, The Open Source Lab

Ian Kronquist is a Senior at Oregon State University studying Computer Science. During the school year he works at the Open Source Lab as a developer. The Summer of 2015 he interned at Puppet Labs on the Puppet Language team. In his spare time he enjoys reading, cooking, and contributing to open source projects.