Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 79 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
79
Dung lượng
770,89 KB
Nội dung
IT4073:NGÔN NGỮ PHƢƠNG PHÁP DỊCH THÀNH CÔNG 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ã 11/18/2012 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 đƣợc 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 … 11/18/2012 Sinh mã trung gian Nội dung • Chƣơng trình dịch định hƣớng cú pháp • Cây cú pháp • Ký pháp Ba lan sau • Mã địa – Các dạng mã – Dịch trực tiếp cú pháp thành mã địa – Sinh mã cho khai báo – Sinh mã cho lệnh gán – Sinh mã cho biểu thức logic – Sinh mã cho cấu trúc lập trình 11/18/2012 Sinh mã trung gian Chƣơng trình dịch định hƣớng cú pháp Mỗi ký hiệu VP liên kết với tập thuộc tính: – Thuộc tính tổng hợp: • Giá trị thuộc tính nút đƣợc xác định từ giá trị nút – Thuộc tính kế thừa: • Giá trị thuộc tính đƣợc định nghĩa dựa vào giá trị nút cha và/hoặc nút anh em • Tồn tập luật ngữ nghĩa dùng để tính giá trị thuộc tính 11/18/2012 Sinh mã trung gian Ví dụ Sản xuất Quy tắc ngữ nghĩa L E return Print (E.val) E E1+T E.val = E1.val + T.val ET E.val = T.val T T1 * F T.val = T1.val * F.val TF T.val = F.val F (E) F.val = E.val F digit F.val = digit.lexval •Các ký hiệu E, T, F có thuộc tính tổng hợp val •Từ tố digit có thuộc tính tổng hợp lexval ( Được phân tích từ vựng đưa ) 11/18/2012 Sinh mã trung gian Chú giải suy dẫn 11/18/2012 Sinh mã trung gian Nội dung • Chƣơng trình dịch định hƣớng cú pháp • Cây cú pháp • Ký pháp Ba lan sau • Mã địa – Các dạng mã – Dịch trực tiếp cú pháp thành mã địa – Sinh mã cho khai báo – Sinh mã cho lệnh gán – Sinh mã cho biểu thức logic – Sinh mã cho cấu trúc lập trình 11/18/2012 Sinh mã trung gian Cây cú pháp (Syntax tree) • Cây cú pháp (syntax tree) dạng thu gọn phân tích (parse tree) dùng để biểu diễn cấu trúc ngơn ngữ • Trong cú pháp tốn tử từ khóa khơng xuất nút mà đƣa vào nút – Cha nút tốn hạng tƣơng ứng • Cây cú pháp có ý nghĩa dụng cài đặt – Cây phân tích (cú pháp) ý nghĩa mặt logic 11/18/2012 Sinh mã trung gian Cây cú pháp Ví dụ Ví dụ: S If B Then S1 Else S2 If Then If Then Else 11/18/2012 Cây suy dẫn Else Cây cú pháp 10 Sinh mã đích Nội dung Giới thiệu Môi trƣờng thực hiện: Máy ngăn xếp – Bộ thông dịch cho máy ngăn xếp Sinh mã đích từ mã trung gian • • • Mã trung gian cú pháp Mã trung gian ký pháp Ba lan sau Mã trung gian mã địa Sinh mã đích từ mã nguồn – Xây dựng bảng ký hiệu – Sinh mã cho câu lệnh 11/18/2012 65 Sinh mã đích Giới thiệu • • Chƣơng trình đich viết ngôn ngữ trung gian Là dạng Assembly máy giả định – Máy ảo (Máy ảo làm việc với nhớ stack) • Việc thực chƣơng trình thông qua thông dich interpreter – Interpreter mô hành động máy ảo – Thực tập lệnh assembly • Chƣơng trình đích đƣợc dịch từ – Mã trung gian – Mã nguồn 11/18/2012 66 Sinh mã đích Mơi trƣờng thực • • Sử dụng máy ảo máy ngăn xếp Máy ngăn xếp hệ thống tính tốn – Sử dụng ngăn xếp để lƣu trữ kết trung gian q trình tính tốn – Kiến trúc đơn giản – Bộ lệnh đơn giản • Máy ngăn xếp có hai vùng nhớ – Khối lệnh: • Chứa mã thực thi chƣơng trình – Ngăn xếp: • 11/18/2012 Lƣu trữ kết trung gian 67 Sinh mã đích Máy ngăn xếp PC, B, T ghi máy RV DL RA JMP PC INC LA 0,4 LC ST Code buffer 11/18/2012 T SL P1 P2 V1 V2 tmp1 B T Stack 68 Sinh mã đích Máy ngăn xếp Thanh ghi • PC (program counter): – Con trỏ lệnh trỏ tới lệnh thực thi đệm chƣơng trình • B (base): – Con trỏ trỏ tới địa sở vùng nhớ cục Các biến cục đƣợc truy xuất gián tiếp qua trỏ • T (top); – Con trỏ, trỏ tới đỉnh ngăn xếp 11/18/2012 69 Sinh mã đích Máy ngăn xếp Bản hoạt động • Khơng gian nhớ cấp phát cho chƣơng trình (hàm/thủ tục/chương trình chính) chúng đƣợc kích hoạt – Lƣu giá trị tham số – Lƣu giá trị biến cục – Lƣu thông tin quan trọng khác: • RV, DL, RA, SL • Một chƣơng trình có nhiều hoạt động 11/18/2012 70 Sinh mã đích Máy ngăn xếp Bản hoạt động (stack frame) • RV (return value): – Lƣu trữ giá trị trả cho hàm • DL (dynamic link): – Địa sở hoạt động chƣơng trình gọi tới (caller) – Đƣợc sử dụng để hồi phục ngữ cảnh chƣơng trình gọi (caller) chƣơng trình đƣợc gọi (called) kết thúc • RA (return address): – Địa lệnh quay kết thúc chƣơng trình – Sử dụng để tìm tới lệnh caller called kết thúc • SL (static link): – Địa sở hoạt động chƣơng trình bao ngồi – Sử dụng để truy nhập biến phi cục 11/18/2012 71 Sinh mã đích Máy ngăn xếp Bản hoạt động Ví dụ Procedure P(I : integer); Var a : integer; Function Q; Var x : char; Begin … return End; Procedure R(X: integer); Var y : char; Begin … y = Call Q; … End; Begin … Call R(1); … End; 11/18/2012 … RV DL RA SL Param I Local a … RV DL RA SL param x Local y … RV DL RA SL Local x P frame R frame Q frame 72 Sinh mã đích Máy ngăn xếp Lệnh • Lệnh máy có dạng : Op p q – Op : Mã lệnh – p, q : Các tốn hạng • Các tốn hạng tồn đầy đủ, có tốn hạng, khơng tồn • Ví dụ J1 % Nhảy đến địa LA 0, % Nạp địa từ số 0+4 lên đỉnh stack HT 11/18/2012 %Kết thúc chƣơng trình 73 Sinh mã đích Máy ngăn xếp Bộ lệnh (1/5) op p q LA Load Address t:=t+1; s[t]:=base(p)+q; LV Load Value t:=t+1; s[t]:=s[base(p)+q]; LC Load Constant t:=t+1; s[t]:=q; LI Load Indirect s[t]:=s[s[t]]; INT Increment T t:=t+q; DCT Decrement T t:=t-q; 11/18/2012 74 Sinh mã đích Máy ngăn xếp Bộ lệnh (2/5) op p q J Jump FJ False Jump if s[t]=0 then pc:=q; t:=t-1; HL Halt Halt ST Store s[s[t-1]]:=s[t]; t:=t-2; CALL Call pc:=q; s[t+2]:=b; s[t+3]:=pc; s[t+4]:=base(p); b:=t+1; pc:=q; EP Exit Procedure EF Exit Function t:=b; pc:=s[b+2]; b:=s[b+1]; 11/18/2012 t:=b-1; pc:=s[b+2]; b:=s[b+1]; 75 Sinh mã đích Máy ngăn xếp Bộ lệnh (3/5) op p q Read RC Character Read RI Integer Write WRC Character Write WRI Integer read one character into s[s[t]]; t:=t-1; WLN New Line CR & LF 11/18/2012 read integer to s[s[t]]; t:=t-1; write one character from s[t]; t:=t-1; write integer from s[t]; t:=t-1; 76 Sinh mã đích Máy ngăn xếp Bộ lệnh (4/5) op p q AD Add t:=t-1; s[t]:=s[t]+s[t+1]; SB Subtract t:=t-1; s[t]:=s[t]-s[t+1]; ML Multiply t:=t-1; s[t]:=s[t]*s[t+1]; DV Divide t:=t-1; s[t]:=s[t]/s[t+1]; NEG Negative CV 11/18/2012 s[t]:=-s[t]; Copy Top s[t+1]:=s[t]; t:=t+1; of Stack 77 Sinh mã đích Máy ngăn xếp Bộ lệnh (5/5) op EQ Equal NE Not Equal GT Greater Than LT GE LE 11/18/2012 Less Than Greater or Equal Less or Equal p q t:=t-1; if s[t] = s[t]:=1 else s[t]:=0; t:=t-1; if s[t] != s[t]:=1 else s[t]:=0; t:=t-1; if s[t] > s[t]:=1 else s[t]:=0; t:=t-1; if s[t] < s[t]:=1 else s[t]:=0; t:=t-1; if s[t] >= s[t]:=1 else s[t]:=0; t:=t-1; if s[t]