Danh mục

Bài giảng Chương trình dịch: Bài giảng 8 - Nguyễn Phương Thái

Số trang: 18      Loại file: ppt      Dung lượng: 388.50 KB      Lượt xem: 13      Lượt tải: 0    
Thư viện của tui

Xem trước 2 trang đầu tiên của tài liệu này:

Thông tin tài liệu:

Bài giảng 8 trình bày về mã trung gian trong chương trình dịch. Thông qua bài giảng này người học có thể biết được các ưu điểm của mã trung gian, nắm bắt được những kiến thức cơ bản về mã ba địa chỉ, biết được cú pháp điều khiển sinh mã 3 địa chỉ và một số biểu thức,... Mời các bạn cùng tham khảo.
Nội dung trích xuất từ tài liệu:
Bài giảng Chương trình dịch: Bài giảng 8 - Nguyễn Phương TháiSinh mã trung gian Nguyễn Phương Thái 2009 Mục tiêuSinh mã trung gian có những ưu điểm như sau:• Dễ thiết kế từng phần• Sinh được mã độc lập với từng máy tính cụ thể. Từ đó làm giảm độ phức tạp của sinh mã thực sự.• Dễ tối ưu mã Mã ba địa chỉ• Các câu lệnh gán có dạng x := y op z, trong đó op là một phép toán số học hai ngôi hoặc phép toán logic.• Các phép gán có dạng x := op y, trong đó op là phép toán một ngôi. Các phép toán một ngôi chủ yếu là phép trừ, phép phủ định logic, phép chuyển đổi kiểu, phép dịch bít.• Các câu lệnh sao chép dạng x := y, gán y vào x.• Lệnh nhảy không điều kiện goto L. Câu lệnh ba địa chỉ có nhãn L là câu lệnh được thực hiện tiếp theo.• Các lệnh nhảy có điều kiện như if x relop y goto L. Câu lệnh này thực hiện một phép toán quan hệ cho x và y, thực hiện câu lệnh có nhãn L nếu quan hệ này là đúng, nếu trái lại sẽ thực hiện câu lệnh tiếp theo.• Câu lệnh param x và call p,n dùng để gọi thủ tục. Còn lệnh return y để trả về một giá trị lưu trong y. Ví dụ để gọi thủ tục p(x1,x2,...,xn) thì sẽ sinh các câu lệnh ba địa chỉ tương ứng như sau:• param x1• param x2• ...• param xn• call p, n• Các phép gán chỉ số có dạng• x := y[i] có ý nghĩa là gán cho x giá trị tại vị trí i sau y• tương tự đối với x[i] := y Cú pháp điều khiển sinh mã 3 địa chỉ• Đối với mỗi ký hiệu X, chúng ta ký hiệu:• X.place là nơi để chứa mã ba địa chỉ sinh ra bởi X (dùng để chứa các kết quả trng gian). Vì thế sẽ có một hàm định nghĩa là newtemp dùng để sinh ra một biến trung gian (biến tạm) để gán cho X.place.• X.code chứa đoạn mã ba địa chỉ của X• thủ tục gen để sinh ra câu lệnh ba địa chỉ. Biểu thức số học “x := a + ( b * c )”Sảnxuất LuậtngữnghĩaS>id:=EE>E1+E2E>E1*E2E>E1E>(E1)E>id Biểu thức số học “x := a + ( b * c )”Sảnxuất LuậtngữnghĩaS>id:=E S.code:=E.code||gen(id.place‘:=’E.place)E>E1+E2 E.place:=newtemp; E.code:=E1.code||E2.code||gen(E.place‘:=’E1.place‘+’ E2.place)E>E1*E2 E.place:=newtemp; E.code:=E1.code||E2.code||gen(E.place‘:=’E1.place‘+’ E2.place)E>E1 E.place:=newtemp; E.code:=E1.code||gen(E.place‘:=’‘uminus’E1.place)E>(E1) E.place:=E1.place E.code:=E1.codeE>id E.place:=id.place E.code:=‘’ Biểu thức logicĐối với một biểu thức Boole E, chúng ta sẽ 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 aE1andE2 E>notE1 E>(E1) E>id1relopid2 E>true E>false Biểu thức logic Sảnxuất LuậtngữnghĩaE>E1orE2 E1.true:=E.true; E1.false:=newlable; E2.true:=E.true; E2.false:=E.false; E.code:=E1.code||gen(E1.false‘:’)||E2.codeE>E1andE2 E1.true:=newlable; E1.false:=E.false; E2.true:=E.true; E2.false:=E.false; E.code:=E1.code||gen(E1.true‘:’)||E2.codeE>notE1 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>id1relopid2 E.code:=gen(‘if’id1.placerelop.opid2.place‘goto’E.true)|| gen(‘goto’E.false)E>true E.code:=gen(‘goto’E.true)E>false E.code:=gen(‘goto’E.false) If a > b then a = a-b x=y+zS>ifEthenS1 E.true:=newlable; S>ifEthenS1elseS2 ???? E.false:=S.next; S1.next:=S.next; S.code:=E.code||gen(E.true ‘:’)||S1.code E>id1relopid2 E.code:=gen(‘if’id1.place ...

Tài liệu được xem nhiều: