图 8.9 赋值语句的四元式翻译 |
(1) S→id∶=E {p∶=lookup( id.name);
if p ≠ nil then
Emit(p′∶=′E.place)
else error}
(2) E→E1+E2
{E.place∶=newtemp;
Emit(E.place′∶=′E1.place′+′E2.place)}
(3) E→E1*E2
{E.placeE∶=newtemp;
Emit(E.place′∶=′E1.place′*′E2.place)}
(4) E→-E1 {E.placeE∶=newtemp;
Emit(E.place′∶=′′uminus′E1.place
)}
(5) E→(E1) {E.place∶=E1.place}
(6) E→id {p:=lookup(id.name)};
if p ≠ nil then
E.placeE∶=p
else error} |
|