Bài giảng môn học Trình biên dịch - Chương 2: Trình biên dịch đơn giản

10 5 0
Bài giảng môn học Trình biên dịch - Chương 2: Trình biên dịch đơn giản

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

Thông tin tài liệu

Giaû söû nuùt n cuûa caây phaân tích coù teân cuù phaùp X, X.a laø trò thuoäc tính a cuûa X, ñöôïc tính nhôø luaät ngöõ nghóa.. Caây phaân tích coù chuù thích caùc trò thuoäc tính ôû moã[r]

(1)

CHƯƠNG 2

TRÌNH BIÊN DỊCH ĐƠN GIẢN 2.1 Tổng quát

2.2 Định nghóa cú pháp

Văn phạm phi ngữ cảnh (PNC) định nghĩa: G2 = (Vt, Vn, S, P)

P : A → α1 | α2 |………|αn Thí dụ 2.1. Cho văn phaïm G:

P: list → list + digit | list – digit

| digit

digit → |1| | …|9

Bộ phân tích

từ vựng Bộ biên dịch trựctiếp cú pháp

Chuoãi token

Chuỗi ký tự Mã trung gian

(2)

Thí dụ 2.2 Văn phạm miêu tả phát biểu hỗn hợp begin end Pascal P : block → begin opt_stmts end

opt_stmts → stmt_list |€

stmt_list → stmt_list ; stmt | stmt - Cây phân tích

Sự khơng tường minh

Thí dụ 2.3. Văn phạm G sau không tường minh:

P : string → string + string | string – string | | | |9 Caâu – + cho hai phân tích:

string string

string string

string string

Hình 2.2 Hai phân tích câu – + 2

+

9

string

string

-5

string

string

-a)

2 9 +

(3)

Sự kết hợp toán tử

Mức ưu tiên tốn tử: * / có mức ưu tiên + , - Dựa vào nguyên tắc xây dựng cú pháp cho biểu thức số học:

exp → exp + term | exp – term | term

term → term * factor | term / factor | factor factor → digit | ( exp )

Lưu ý: phép toán lũy thừa phép gán C phép toán kết hợp phải Văn phạm cho phép gán sau:

right → letter = right | letter letter → a | b | … | z

2.3 Sự biên dịch trực tiếp cú pháp (Syntax-Directed Translation) 1 Ký hiệu hậu tố

1) Nếu E biến số ký hiệu hậu tố E E 2) Nếu E biểu thức có dạng E1 op E2 với op tốn tử hai ngơi ký hiệu hậu tố E E1’ E2’ op

(4)

Lưu ý: Khơng cần có dấu đóng, mở ngoặc ký hiệu hậu tố 2 Định nghiã trực tiếp cú pháp (Syntax-directed definition)

Văn phạm phi ngữ cảnh tập luật ngữ nghiã thiết lập định nghĩa trực tiếp cú pháp Biên dịch phép ánh xạ từ nhập → xuất Dạng xuất chuỗi nhập x xác định sau:

1 Xây dựng phân tích cho chuỗi x

2 Giả sử nút n phân tích có tên cú pháp X, X.a trị thuộc tính a X, tính nhờ luật ngữ nghĩa Cây phân tích có thích trị thuộc tính nút gọi phân tích thích

Tổng hợp thuộc tính (synthesized attributes) Thí dụ 2.4. Cho văn phạm G có tập luật sinh P:

Tập luật sinh Tập luật ngữ nghĩa

exp → exp + term exp.t ::= exp.t || term.t || ‘+’ exp → exp – term exp.t ::= exp.t || term.t || ‘-’ exp → term exp.t ::= term.t

term → term.t ::= ‘0’

… …

(5)

exp.t ::= 95 – + exp.t ::= 95 –

exp.t ::= 95 – exp.t ::=

termt ::=

termt.t ::=

termt ::=

9 - +

Hình 2.3 Cây phân tích thích cho định nghĩa trực tiếp cú pháp

Lược đồ dịch

Lược đồ dịch văn phạm PNC, đoạn chương trình gọi hành vi ngữ nghiã nhúng vào vế phải luật sinh

(6)

Tập luật sinh Tập luật ngữ nghĩa

exp → exp + term exp → exp + term { print (‘+’)} exp → exp – term exp → exp – term {print (‘-’)}

exp → term exp → term

term → term → {print (‘0’)}

……

term → term → {print {‘9’)}

exp exp

term

term exp

-5

+

{print (‘-‘)}

term

{print (‘5‘)}

{print (‘+‘)} {print (‘2‘)}

9 {print (‘9‘)}

(7)

Mô 2.1 Giải thuật depth- first traversals phân tích

Procedure visit (n: node); begin

for với m n, từ trái sang phải do visit (m);

tính trị ngữ nghiã nút n end;

2.4 Phân tích cú pháp

1 Phân tích cú pháp từ xuống Thí dụ 2.6 Cho văn phạm G:

type → simple ⏐↑ id ⏐ array [ simple] of type simple → integer ⏐char ⏐num dotdot num Hãy xây dựng phân tích cho câu:

(8)

type a)

type b)

array [simple] of type

type c)

array [simple] of type

type

num dotdot num

array [simple] of

num dotdot num

Hình 2.6.Các bước xây dựng cây phân tích

theo phương pháp từ trên xuống cho câu:

array [numdotdot num] of integer

d)

type simple type

e)

array [simple] of

num dotdot num

(9)

2 Sự phân tích cú pháp đốn nhận trước

Dạng đặc biệt phân tích cú pháp từ xuống phương pháp đoán nhận trước Phương pháp nhìn trước ký hiệu nhập để định chọn thủ tục cho ký hiệu không kết thúc tương ứng

Thí dụ 2.8 Cho văn phạm G: P: S → xA A → z | yA Dùng văn phạm G để phân tích câu nhập xyyz

Bảng 2.1 Các bước phân tích cú pháp câu xyyz

Luật áp dụng Chuỗi nhập

S xA yA A yA A

z

-xyyz xyyz yyz

(10)

-Thí dụ 2.9 Cho văn phạm với luật sinh sau : S → A | B A → xA | y B → xB | z

Bảng 2.2 Phân tích cú pháp cho câu xxxz không thành công

Luật áp dụng Chuỗi nhập

S A xA A xA A xA

A

Ngày đăng: 09/03/2021, 05:20

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

Tài liệu liên quan