letmutable
(Exercise 5.5.7 p.160)
<exp> ::= <varref> varref (var) | <number> lit (datum) | (if <exp> <exp> <exp>) if (test-exp then-exp else-exp) | (proc ({<var>}*) <exp>) proc (formals body) | (<exp> {<exp>}*) app (rator rands) | (:= <var> <exp>) varassign (var exp) | (begin {<exp>}+) begin (exps) | (let <decls> <exp>) let (decls body) | (letrec <decls> <exp>) letrec (decls body) <decls> ::= ({<decl>}*) <decl> ::= (<var> <exp>) decl (var exp)A parser/unparser for this BNF is provided in this file.
Denoted value = Cell(Expressed Value) + Expressed ValueAdd the following clause to the BNF:
<exp> ::= (letmutable <decls> <exp>) letmutable (decls body)Modify the parser and
eval-exp
procedure to account for
letmutable
.