Exercise 3.17 – Problems 6, 7, 8 and 9.
- Translation and Stack Level. Consider the expression
e = if x > 1 then x else let z = x + y in z + z
Compute codeV e ? sl for an address environment ? = {x ? (L,1), y ? (L, -1)} and stack level sl = 3. Determine, similarly as in the examples in the text, the current stack level for each instruction.
- Translation of Functions. Consider the expression:
e = fun xy ? if x = 1 then y else fac (x – 1)(x · y)
Compute code V e ? sl for the address environment ? = {fac ? (L,1)} and stack level sl = 5.
- Addressing of Variables. Introduce a new register SP0 relative to which local variables can be addressed. For this, introduce a new instruction for accessing local variables and modify the MAMA code generation so that this new register is managed correctly.
- Functions With Local Variables. Consider the function definition:
fun x, y, z ? let x = 1
in let a = 3
in let b = 4
in (a +(b +(x +(y + z))))
</pclass=”msonormal”>