Description
I have provided a compiler for parenlet with Booleans on github.
Your task is to modify my lexer, parser, and compiler to add a print expression to parenlet, a small language described below:
‹expr›:
BOOL
NUMBER
ID
( let ( ID <expr> ) <expr> )
( add1 ‹expr› )
( print ‹expr› )
Your parser should produce an EPrim1
expression for the print:
type expr =
| EBool of bool
| ENum of int64
| EId of string
| ELet of string * expr * expr
| EPrim1 of prim1 * expr
Semantics
The print
expression takes 1 expression as argument. It should print the value
of the argument. The print
is an expression, so it should return a value, as
determined by the argument.
Hints
Look at how we call error
from assembly. There is already a print
function in main.c
that you could also call. What is the sequence of assembly instructions needed to call print
with the correct arguments?
Example code
Here are some programs that should run in your finished compiler.
(print 3)
(print false)
(print (add1 3))
(let (x (print 4))
(add1 x))
Deliverables
You should turn in your modified lexer.mll
, parser.mly
, compiler.ml
and
syntax.ml
. You shouldn't need to make changes to other files (really).
If you want, run dune clean
and zip up your entire parenlet
directory.