1. Trang chủ
  2. » Công Nghệ Thông Tin

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

79 508 2

Đ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

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 ET E.val = T.val T  T1 * F T.val = T1.val * F.val TF 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]

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

TỪ KHÓA LIÊN QUAN