Nhập môn Chương trình dch
Hc kì II 2006-2007
Bài 14: Sinh mã trung gian (tiếp)
Sinh mã trung gian
Sdng cú pháp điều khin (ging kim
tra kiu)
Sinh mã các nút biu thc hoc nút lnh
da vào mã ca các nút con
pháp điều khin
Mô tchính xác chương trình dch cn làm gì
thi đặt ddàng
thchng minhnh đúng của chương
trình dch
Sinh mã lnh if
if (e) s
SEQ
CJUMP LABEL(t) [s] LABEL(f)
[e] NAME(t) NAME(f)
[if (e) s] = SEQ( CJUMP([e], NAME(t), NAME(f)), LABEL(t), [s], LABEL(f) )
CJUMP([e], t, f)
t: [s]
f:
Sinh mã lnh if-else
if (e) s1else s2
SEQ
CJUMP LABEL(t) [s1]LABEL(f)
[e] NAME(t) NAME(f)
s2LABEL(end)JUMP
NAME(end)
[if (e) s1else s2] = SEQ( CJUMP([e], NAME(t), NAME(f)), LABEL(t), [s1],
JUMP(NAME(end)), LABEL(f), [s2], LABEL(end) )
CJUMP([e], t, f)
t: [s1]
JUMP end
f: [s2]
end:
Sinh mã lnh while
while (e) s
SEQ
CJUMP LABEL(t) [s] LABEL(f)
[e] NAME(t) NAME(f)
JUMP
NAME(loop)
[while (e) s] = SEQ( LABEL(loop), CJUMP([e], NAME(t), NAME(f)),
LABEL(t), [s], JUMP(NAME(loop)), LABEL(f) )
loop: CJUMP([e], t, f)
t: [s]
JUMP loop
f:
LABEL(loop)