Ktl-icon-tai-lieu

Sinh mã trung gian

Được đăng lên bởi Đoàn Xuân Huy
Số trang: 10 trang   |   Lượt xem: 266 lần   |   Lượt tải: 0 lần
21/1/2010

Nội dung

Bài 11
Sinh mã trung gian

Mã trung gian
Một chương trình với mã nguồn được chuyển
sang chương trình tương đương trong ngôn
ngữ trung gian bằng bộ sinh mã trung gian.
Ngôn ngữ trung gian được người thiết kế
trình biên dịch quyết định, có thể là:
‰
‰
‰

Cây cú pháp
Ký pháp Ba Lan sau (hậu tố)
Mã 3 địa chỉ …

Mã ba địa chỉ
„ Sinh mã cho lệnh gán
„ Sinh mã cho các biểu thức logic
„ Sinh mã cho các cấu trúc lập trình
„

Mã trung gian
„
„
„
„
„
„

Được sản sinh dưới dạng một chương trình cho một
máy trừu tượng
Mã trung gian thường dùng : mã ba địa chỉ, tương tự mã
assembly
Chương trình là một dãy các lệnh. Mỗi lệnh gồm tối đa 3
toán hạng
Tồn tại nhiều nhất một toán tử ở vế phải cộng thêm một
toán tử gán
Dạng tổng quát: x := y op z
x,y,z là các địa chỉ , tức là tên, hằng hay các tên trung
gian do trình biên dịch sinh ra
…
…

Tên trung gian phải được sinh để thực hiện các phép toán trung
gian
Các địa chỉ được thực hiện như con trỏ tới lối vào của nó trong
bảng ký hiệu

1

21/1/2010

Mã trung gian của x + y * z

Các dạng mã ba địa chỉ phổ biến

„ t1 :=

„

y*z
„ t2 := x+t1

Mã 3 địa chỉ tương tự mã Assembly: lệnh có thể
có nhãn, có những lệnh chuyển điều khiểnolcho
các cấu trúc lập trình.
1. Lệnh gán x := y op z.
1
z
2. Lệnh gán với phép toán 1 ngôi : x := op y.
3. Lệnh sao chép: x := y.
4. Lệnh nhảy không điều kiện: goto L, L là nhãn của
một lệnh
5. Lệnh nhảy có điều kiện x relop y goto L.

Các dạng mã ba địa chỉ

Sinh mã trực tiếp từ ĐNTCP

6. Lời gọi thủ tục param x và call p,n để gọi thủ
tục p với n tham số . Return y là giá trị thủ tục
trả về

„

param x1
param x2
...
param xn
Call p,n

7. Lệnh gán có chỉ số x:=y[i] hay x[i]:=y

„
„
„
„
„
„
„

Thuộc tính tổng hợp S.code biểu diễn mã ba địa chỉ của
lệnh
Các tên trung gian được sinh ra cho các tính toán trung
gian
Các biểu thức được liên hệ với hai thuộc tính tổng hợp
E.place chứa địa chỉ chứa giá trị của E
E.code mã ba địa chỉ để đánh giá E
Hàm newtemp sinh ra các tên trung giant1, t2,. .
Hàm gen sinh mã ba địa chỉ
Trong thực tế, code được gửi vào file thay cho thuộc
tính code

2

21/1/2010

Dịch trực tiếp cú pháp thành mã 3 địa chỉ
Sản xuất

S → id := E
E → E1 + E2
E → E1 * E2
E → - E1
E → ( E1 )
E → id
„

Quy tắc ngữ nghĩa

Mã cho lệnh gán a := b * -c + d

{ S.code = E.code||gen(id.place ‘:=’ E.place) }
{E.place= newtemp ;
E.code = E1.code || E2.code ||
|| gen(E.place‘:=’E1.place‘+’E2.place) }
{E.place= newtemp ;
E.code = E1.code || E2.code ||
|| gen(E.place‘:=’E1.place‘*’E2.place) }
{...
21/1/2010
1
Bài 11
Sinh mã trung gian
Sinh
trung
gian
Ni dung
Mã ba địa ch
Sinh mã cho lnh gán
Sinh mã cho các biuthc logic
Sinh
cho
các
biu
thc
logic
Sinh mã cho các cu trúc lp trình
Mã trung gian
Mt chương trình vi mã ngun được chuyn
sang chương trình tương đương trong ngôn
ng trung gian bng b sinh mã trung gian.
Ngôn ng trung gian được người thiết kế
trình biên dch quyết định, có th là:
Cây cú pháp
pháp Ba Lan sau (hu t)
Mã 3 địa ch
Mã trung gian
Được sn sinh dưới dng mt chương trình cho mt
máy tru tượng
Mã trung gian thường dùng : mã ba địa ch, tương t
assembly
Chương trình là mt dãy các lnh. Mi lnh gm ti đa 3
toán hng
toán
hng
Tn ti nhiu nht mt toán t vế phi cng thêm mt
toán t gán
Dng tng quát: x := y op z
x,y,z là các địa ch , tc là tên, hng hay các tên trung
gian do trình biên dch sinh ra
Tên trung gian phi được sinh để thc hin các phép toán trung
gian
Các địa ch được thc hin như con tr ti li vào ca nó trong
bng ký hiu
Sinh mã trung gian - Trang 2
Để xem tài liệu đầy đủ. Xin vui lòng
Sinh mã trung gian - Người đăng: Đoàn Xuân Huy
5 Tài liệu rất hay! Được đăng lên bởi - 1 giờ trước Đúng là cái mình đang tìm. Rất hay và bổ ích. Cảm ơn bạn!
10 Vietnamese
Sinh mã trung gian 9 10 549