Der er forskellige former for mellemkode f.eks. three-address code og expression
tree. Bogen vælger at bruge den sidste nævnte form, hvor knuderne i træet
er objekter af de klasser der er listet i figur 7.2 på side 138. Sektion 7.1
forklarer de forskellige klasser der anvendes i et expression tree for
MiniJava. I skal lægge mærke til MEM(e) der både kan anvendes (1) til at
gemme data med f.eks. med MOVE(Exp dst, Exp src) og (2) til at hente data med
f.eks. med BINOP(int binop, Exp left, Exp right). Dette svare til a en variable
kan bruges til assignment f.eks. a = 12
og til sammenligning f.eks.
if (a < b)
.
Sektion 7.2 beskriver i detaljer, hvorledes MiniJava kan transformeres til mellemkode. Her er det væsentligt at forstå afsnit "Structured L-Values" på side 145. I skal give høj prioritet til de følgende afsnit
Afsnit 7.3 omhandler hvordan lokale variable funktioner samt objekter og klasser håndteres i mellemkode.
A) Lave et Java program der anvender den samme variable som både l-value og r-value. Forklar hvad forskelle på disse to begreber er.
B) Tegn mellemkodetræer (lignende de træer der er på side 143 og 146), hvor der anvendes figur 7.2 på side 138 for følgende kodestykker