Sinh mó ba địa chỉ cho biểu thức Boole:

Một phần của tài liệu GIÁO TRÌNH MÔN CHƯƠNG TRÌNH DỊCH (Trang 119 - 121)

- Quỏ trỡnh tớnh ∆i j VD: tớnh ∆ 2 4, Tớnh:

2. CÁC NGễN NGỮ TRUNG GIAN

2.2.2. Sinh mó ba địa chỉ cho biểu thức Boole:

Đối với một biểu thức Boole E, ta dịch E thành một dóy cỏc cõu lệnh ba địa chỉ, trong đú đối với cỏc phộp toỏn logic sẽ sinh ra cỏc lệnh nhảy cú điều kiện và khụng cú điều kiện đến một trong hai vị trớ: E.true, nơi quyền điều khiển sẽ chuyển tới nếu E đỳng, và E.false, nơi quyền điều khiển sẽ chuyển tới nếu E sai.

Vớ dụ: E cú dạng a<b. Thế thỡ mó sinh ra sẽ cú dạng

if a<b goto E.true goto E.false

Vớ dụ đoạn lệnh sau: if a>b then a:=a-b;

else b:=b-a;

được chuyển thành mó ba địa chỉ như sau E.true = L1 và E.false = L2

if a>b goto L1 goto L2 L1: t1 := a –b a := t1 goto Lnext L2: t2 := b-a b := t2 Lnext:

Một số cỳ phỏp điều khiển sinh mó ba địa chỉ cho cỏc biểu thức Boole.

Sản xuất Luật ngữ nghĩa

E -> E1 or E2 E1.true := E.true; E1.false := newlable; E2.true := E.true; E2.false := E.false;

E.code := E1.code || gen(E1.false ‘:’) || E2.code E -> E1 and E2 E1.true := newlable;

E1.false := E.false; E2.true := E.true; E2.false := E.false;

E.code := E1.code || gen(E1.true ‘:’) || E2.code E -> not E1 E1.true := E.false;

E1.false := E.true; E.code := E1.code;

E -> ( E1 ) E1.true := E.true; E1.false := E.false; E.code := E1.code;

E -> id1 relop id2 E.code := gen(‘if’ id1.place relop.op id2.place ‘goto’ E.true) || gen(‘goto’ E.false)

E -> true E.code := gen(‘goto’ E.true)

E -> false E.code := gen(‘goto’ E.false)

Vớ dụ: Sinh mó ba địa chỉ cho đoạn chương trỡnh sau:

if a>b and c>d then x:=y+z

else

x:=y-z

Lời giải:

if E then x:=y+z , khi đú mó ba địa chỉ cho đoạn chương trỡnh cú dạng:

E.code {

if E=true goto E.true goto E.false } E.true: t1:= y+z x := t1; E.false : t2 := y-z x :=t2

Như vậy chỳng ta phải phõn tớch bờn trong của biểu thức E, và dễ thấy cỏc lệnh nhảy bờn trong E chớnh là E.true và E.false, điều đú giải thớch tại sao chỳng ta lại cú cỏc luật ngữ nghĩa như bảng trờn.

Áp dụng cỏc luật sinh mó ba địa chỉ trong bảng trờn chỳng ta cú đoạn mó ba địa chỉ cho đoạn chương trỡnh nguồn ở trờn là:

if a>b goto L1 goto L3 L1: if c>d goto L2 goto L3 L2: t1 := y+z x := t1 goto L4 L3: t2 := y-z x := t2 L4:

Một phần của tài liệu GIÁO TRÌNH MÔN CHƯƠNG TRÌNH DỊCH (Trang 119 - 121)

Tải bản đầy đủ (DOC)

(158 trang)
w