CS 330 Lecture 36 – Guish Interpreter
Dear students,
I am gone to learn about the state of computer science in high schools across Wisconsin. However, since at least one of you objected to my being gone a few times this semester, we continue our discussion of writing our interpreter!
We pick up where we left off last lecture. We ended with an interpreter that could respond to a sequence of rectangle commands with integer literal operands. That was interesting, but nothing we wrote couldn’t have been written with a much simpler algorithm that used regular expressions to parse.
Now we extend our language to feel like a real programming language. We first add variable references:
Referencing a variable in an expression is no good if we can’t also assign to them. Let’s add assignment statements:
This next step isn’t really directly related to writing an interpreter. But let’s add a slider that can also be used to assign a variable’s values to support easy parameter tweaking and animation:
Our expressions are currently limited to integer literals and variables. We want to expand this, but let’s add parentheses first:
Now, we can add operators, which in my mind is the craziest part of writing our own interpreter:
What’s a programming language without loops? (Haskell. Ha!) We’ll add a cute little repeat
construct to put motors in our code:
It’s time for the last big feature: functions. We start by adding support for function definitions:
And for function definitions to have any value, we must be able to call them:
That’s it!
Here’s your TODO list for Monday:
- For a participation point, write a Guish program to draw something interesting. I’ve posted the interpreter. Use at least some of the features we’ve added: variables, color, loops, mathematical operations, the
t
parameter, and functions. Share your program on Piazza in folderguish
. - Alternatively, for a participation point plus an extra credit point, extend the language and write a program using your new feature. But I ask that you host your new interpreter somewhere and post a link to it.
See you then!