NGÔN NGỮ và PHƯƠNG PHÁP DỊCH - Chương 5: Sinh mã pdf

122 4.2K 11
NGÔN NGỮ và PHƯƠNG PHÁP DỊCH - Chương 5: Sinh mã pdf

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

IT4073:NGÔN NGỮ PHƯƠNG PHÁP DỊCH Phạm Đăng Hải haipd@soict.hut.edu.vn Chương 5: Sinh mã Sinh mã trung gian Sinh mã đích Tối ưu mã 03/10/14 Sinh mã trung gian Giới thiệu • Bộ sinh mã trung gian chuyển chương trình nguồn sang chương trình tương đương ngơn ngữ trung gian – Chương trình trung gian chương trình cho máy trừu tượng • Ngơn ngữ trung gian người thiết kế trình biên dịch định, là: – Cây cú pháp – Ký pháp Ba Lan sau (hậu tố) – Mã địa … 03/10/14 Sinh mã trung gian Nội dung • • • Mã địa – – – Sinh mã cho khai báo – – Quy tắc ngữ nghĩa Lưu trữ thông tin phạm vi Sinh mã cho lệnh gán – – • • Các dạng mã, Dịch trực tiếp cú pháp thành mã địa Cài đặt mã Tên bảng ký hiệu Địa hóa phần tử mảng Sinh mã cho biểu thức logic Sinh mã cho cấu trúc lập trình 03/10/14 Sinh mã trung gian Mã địa • Mã trung gian thường dùng : mã ba địa chỉ, tương tự mã assembly • Chương trình trung gian dãy lệnh thuộc kiểu mã địa – Mỗi lệnh gồm tối đa toán hạng – Tồn nhiều toán tử vế phải cộng thêm tốn tử gán • x,y,z địa , tức tên, hay tên trung gian trình biên dịch sinh – Tên trung gian phải sinh để thực phép toán trung gian – Các địa thực trỏ tới phần tử tương ứng bảng ký hiệu 03/10/14 Sinh mã trung gian Mã địa → Ví dụ • Câu lệnh – A=x+y*z • Chuyển thành mã địa T=y*z A=x+T T tên trung gian – Được sinh mã trung gian sinh cho toán tử trung gian 03/10/14 Sinh mã trung gian Mã địa → Các dạng phổ biến • Mã địa tương tự mã Assembly: – Lệnh có nhãn, – Tồn lệnh chuyển điều khiển cho cấu trúc lập trình • Các dạng lệnh  Lệnh gán x := y op z  Lệnh gán với phép tốn ngơi : x := op y  Lệnh chép: x := y  Lệnh gán có số X := y[i] x[i]= y 03/10/14 Sinh mã trung gian Mã địa → Các dạng phổ biến  Lệnh gán địa trỏ x = &y; x = * y; *x = y  Lệnh nhảy không điều kiện: goto L, – L nhãn lệnh  Lệnh nhảy có điều kiện IF x relop y goto L – Nếu thỏa mãn quan hệ relop (>,>=, v goto B3 goto B2 B4 if i >= j goto B6 03/10/14 108 Tối ưu mã Tối ưu mã → Ví dụ B1 i=m-1 j=n Loại biểu thức chung t1 =4 * n v = a[t1] B5 t6 = * i B2 B6 t11 = * i i=i +1 x = a[t6] x = a[t11] t2 = * i t7 = * i t12 = * i t3 = a[t2] t8 = * j t13 = * n if t3 < v goto B2 t9 = a[t8] t14 = a[t13] a[t7] = t9 a[t12] = t14 t10 = * j t15 = * n a[t10] = x a[t15] = x B3 j=j–1 t4 = * j t5 = a[t4] if t5 > v goto B3 goto B2 B4 if i >= j goto B6 03/10/14 109 Tối ưu mã Đồ thị quan hệ khối B1 i=m-1 j=n Loại biểu thức chung t1 =4 * n v = a[t1] B5 t6 = * i B2 B6 t11 = * i i=i +1 x = a[t6] x = a[t11] t2 = * i t8 = * j t12 = * i t3 = a[t2] t9 = a[t8] t13 = * n if t3 < v goto B2 a[t6] = t9 t14 = a[t13] t10 = * j a[t12] = t14 a[t10] = x t15 = * n goto B2 a[t15] = x B3 j=j–1 t4 = * j t5 = a[t4] if t5 > v goto B3 B4 if i >= j goto B6 03/10/14 110 Tối ưu mã Tối ưu mã → Ví dụ B1 i=m-1 j=n Loại biểu thức chung t1 =4 * n v = a[t1] B5 t6 = * i B2 B6 t11 = * i i=i +1 x = a[t6] x = a[t11] t2 = * i t8 = * j t12 = * i t3 = a[t2] t9 = a[t8] t13 = * n if t3 < v goto B2 a[t6] = t9 t14 = a[t13] a[t8] = x a[t12] = t14 goto B2 t15 = * n B3 j=j–1 t4 = * j t5 = a[t4] a[t15] = x if t5 > v goto B3 B4 if i >= j goto B6 03/10/14 111 Tối ưu mã Tối ưu mã → Ví dụ B1 i=m-1 j=n Loại biểu thức chung t1 =4 * n v = a[t1] B5 t6 = * i B2 B6 t11 = * i i=i +1 x = a[t6] x = a[t11] t2 = * i t8 = * j t13 = * n t3 = a[t2] t9 = a[t8] t14 = a[t13] if t3 < v goto B2 a[t6] = t9 a[t11] = t14 a[t8] = x a[t13] = x B3 j=j–1 goto B2 t4 = * j t5 = a[t4] if t5 > v goto B3 B4 if i >= j goto B6 03/10/14 112 Tối ưu mã Tối ưu mã → Ví dụ B1 i=m-1 j=n Loại biểu thức chung t1 =4 * n v = a[t1] B5 x = a[t2] B2 B6 t11 = * i i=i +1 t8 = * j x = a[t11] t2 = * i t9 = a[t8] t13 = * n t3 = a[t2] a[t2] = t9 t14 = a[t13] if t3 < v goto B2 a[t8] = x a[t11] = t14 goto B2 a[t13] = x B3 j=j–1 t4 = * j t5 = a[t4] if t5 > v goto B3 B4 if i >= j goto B6 03/10/14 113 Tối ưu mã Tối ưu mã → Ví dụ B1 i=m-1 j=n Loại biểu thức chung t1 =4 * n v = a[t1] B5 x = t3 B2 B6 t11 = * i i=i +1 t8 = * j x = a[t11] t2 = * i t9 = a[t8] t13 = * n t3 = a[t2] a[t2] = t9 t14 = a[t13] if t3 < v goto B2 a[t8] = x a[t11] = t14 goto B2 a[t13] = x B3 j=j–1 t4 = * j t5 = a[t4] if t5 > v goto B3 B4 if i >= j goto B6 03/10/14 114 Tối ưu mã Tối ưu mã → Ví dụ B1 i=m-1 j=n Loại biểu thức chung t1 =4 * n v = a[t1] B5 x = t3 B2 B6 t11 = * i i=i +1 t9 = a[t4] x = a[t11] t2 = * i a[t2] = t9 t13 = * n t3 = a[t2] a[t4] = x t14 = a[t13] if t3 < v goto B2 goto B2 a[t11] = t14 B3 a[t13] = x j=j–1 t4 = * j t5 = a[t4] if t5 > v goto B3 B4 if i >= j goto B6 03/10/14 115 Tối ưu mã Đồ thị quan hệ khối B1 i=m-1 j=n Loại biểu thức chung t1 =4 * n v = a[t1] B5 x = t3 B2 B6 t11 = * i i=i +1 a[t2] = t5 x = a[t11] t2 = * i a[t4] = x t13 = * n t3 = a[t2] goto B2 t14 = a[t13] if t3 < v goto B2 B3 a[t11] = t14 a[t13] = x j=j–1 t4 = * j t5 = a[t4] if t5 > v goto B3 Tương tự với B6 B4 if i >= j goto B6 03/10/14 116 Tối ưu mã Tối ưu mã → Ví dụ B1 i=m-1 j=n Lan truyền biến gán t1 =4 * n v = a[t1] B5 x = t3 B2 B6 x = t3 i=i +1 a[t2] = t5 t14 = a[t1] t2 = * i a[t4] = x a[t11] = t14 t3 = a[t2] goto B2 a[t13] = x if t3 < v goto B2 B3 j=j–1 t4 = * j t5 = a[t4] if t5 > v goto B3 B4 if i >= j goto B6 03/10/14 117 Tối ưu mã Tối ưu mã → Ví dụ B1 i=m-1 j=n Giảm chi phí t1 =4 * n v = a[t1] B5 a[t2] = t5 B2 B6 t14 = a[t1] i=i +1 a[t4] = t3 a[t11] = t14 t2 = * i goto B2 a[t13] = t3 t3 = a[t2] if t3 < v goto B2 B3 j=j–1 t4 = * j t5 = a[t4] if t5 > v goto B3 B4 if i >= j goto B6 03/10/14 118 Tối ưu mã Tối ưu mã → Ví dụ B1 i=m-1 j=n Giảm chi phí t1 =4 * n v = a[t1] t2= 4* i t4 = 4*j B5 a[t2] = t5 B6 t14 = a[t1] t2 = t2+4 a[t11] = t14 goto B2 B2 a[t4] = t3 a[t13] = t3 t3 = a[t2] if t3 < v goto B2 B3 t4 = t4-4 t5 = a[t4] if t5 > v goto B3 B4 if i >= j goto B6 03/10/14 119 Tối ưu mã Tối ưu mã đích • Khơng tồn giải thuật tổng qt để tìm chương trình tối ưu – Dùng số thuật toán đơn giản để tối ưu mã đích • Xét ví dụ máy có ghi R tồn lênh – Load m → Nạp vào ghi R giá trị m (R=m) – Add m → Cộng vào ghi R giá trị m (R +=m) – Mul m → Nhân vào ghi R giá trị m (R *=m) – Store m → Ghi giá trị ghi R vào địa m Trong đó, m số, biến 03/10/14 120 Tối ưu mã Tối ưu mã đích→Phép biến đổi đơn giản • Phép giao hốn – Hai lệnh liên tiếp Load α Add β thay Load β Add α – Hai lệnh liên tiếp Load α Mul β thay Load β Mul α • Dãy lệnh store α Load α bị hủy bỏ α không sử dụng lưu giá trị trước dùng (store α) • Dãy lệnh Load α store β bị hủy bỏ – Sau lệnh load khác khơng có thay đổi β từ sau, đồng thời sử dung α thay β 03/10/14 121 Tối ưu mã Tối ưu mã đích→Phép biến đổi đơn giản →Ví dụ • • • • • • • • • • • Load c Store #3 Load b Store #1 Load a Add #1 Store #2 Load 10 Mul #2 Add # Store V 03/10/14 • • • • • • • • • • • Load c Stroe #3 Load b Store #1 Load # Add a Strore #2 Load #2 Mul 10 Add # Store V • • • • • • • Load c Stroe #3 Load b Add a Mul 10 Add # Store V • • • • • Load b Add a Mul 10 Add c Store V 122 .. .Chương 5: Sinh mã Sinh mã trung gian Sinh mã đích Tối ưu mã 03/10/14 Sinh mã trung gian Giới thiệu • Bộ sinh mã trung gian chuyển chương trình nguồn sang chương trình tương đương ngơn ngữ. .. 20 Sinh mã trung gian Nội dung • Mã địa – Các dạng mã, – • • • • Dịch trực tiếp cú pháp thành mã địa – Cài đặt mã Sinh mã cho khai báo – Quy tắc ngữ nghĩa – Lưu trữ thông tin phạm vi Sinh mã. .. 35 Sinh mã trung gian Nội dung • • • • • Mã địa – Các dạng mã, – Dịch trực tiếp cú pháp thành mã địa – Cài đặt mã Sinh mã cho khai báo – Quy tắc ngữ nghĩa – Lưu trữ thông tin phạm vi Sinh mã

Ngày đăng: 10/03/2014, 00:20

Mục lục

  • IT4073:NGÔN NGỮ và PHƯƠNG PHÁP DỊCH

  • Chương 5: Sinh mã

  • Giới thiệu

  • Nội dung

  • Mã 3 địa chỉ

  • Mã 3 địa chỉ  Ví dụ

  • Mã 3 địa chỉ  Các dạng phổ biến

  • Slide 8

  • Slide 9

  • Chương trình dịch định hướng cú pháp

  • Dạng của định nghĩa hướng cú pháp

  • Ví dụ

  • Slide 13

  • Dịch trực tiếp cú pháp thành mã 3 địa chỉ

  • Slide 15

  • Slide 16

  • Slide 17

  • Cài đặt lệnh 3 địa chỉBiểu diễn bộ bốn

  • Slide 19

  • Cài đặt lệnh 3 địa chỉBiểu diễn bộ ba

Tài liệu cùng người dùng

Tài liệu liên quan