Bài giảng môn học trình biên dịch chương 5 trình biên dịch trực tiếp cú pháp

42 2 0
Bài giảng môn học trình biên dịch   chương 5 trình biên dịch trực tiếp cú pháp

Đ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

CHƯƠNG BIÊN DỊCH TRỰC TIẾP CÚ PHÁP Có hai khái niệm luật ngữ nghóa có liên quan đến luật sinh: định nghóa trực tiếp cú pháp lược đồ dịch - Định nghóa trực tiếp cú pháp - Lược đồ dịch Chuỗi nhập → phân tích → đồ thị phụ thuộc → → đánh giá thứ tự luật ngữ nghóa Hình 5.0 Khái niệm dịch trực tiếp cú pháp Khái niệm tổng quan biên dịch trực tiếp cú pháp 5.1 Định nghóa trực tiếp cú pháp Là văn phạm phi ngữ cảnh mà ký hiệu văn phạm có tập thuộc tính Tập thuộc tính có hai loại: thuộc tính tổng hợp thuộc tính kế thừa Cây cú pháp có giá trị thuộc tính nút gọi phân tích thích Dạng định nghóa trực tiếp cú pháp Mỗi luật sinh có dạng A → α có tập luật ngữ nghóa có dạng b:= f (c1, c2, …, ck) với f hàm số và: b thuộc tính tổng hợp A c1, c2, …, ck thuộc tính ký hiệu văn phạm luật sinh, b thuộc tính kế thừa ký hiệu văn phạm bên vế phải luật sinh c1, c2, …, ck thuộc tính ký hiệu văn phạm luật sinh Thí dụ 5.1 Định nghóa trực tiếp cú pháp bảng 5.1 Bảng 5.1 Định nghóa trực tiếp cú pháp cho bảng tính đơn giản Luật sinh L → En E → E1 + T E → TE.val: = T.val T → T1* F T → FT.val: = F.val F → (E) F → digit Luật ngữ nghóa Print (E.val) E.val: = E1.val + T.val E.val: = T.val T.val: = T.val x F.val T.val: = F.val F.val: = E.val F.val: = digit lexval Thuộc tính tổng hợp Định nghóa trực tiếp cú pháp dùng thuộc tính tổng hợp gọi định nghóa thuộc tính S Thuộc tính S nút từ thuộc tính nút từ lên Thí dụ 5.2 Định nghóa thuộc tính S thí dụ 5.1 L E.val = 19 E.val = 15 + T.val = 15 T.val = F.val = digit.lexval = * n T.val = F.val = F.val = digit.lexval = digit.lexval = Hình 5.1 Cây phân tích thích * + 4n Thuộc tính kế thừa Thuộc tính kế thừa thuộc tính mà giá trị nút phân tích xác định thuộc tính cha mẹ và/hoặc anh chị nút Thí dụ 5.3 Sự khai báo tạo ký hiệu không kết thúc D định nghóa trực tiếp cú pháp (bảng 5.2) Bảng 5.2 Định nghóa trực tiếp cú pháp với thuộc tính kế thừa L.in Luật sinh D → TL T → int T → real L → L1, id L → id Luật ngữ nghóa L.in: = T.type T.type: = integer T.type: = real L1.in: = L.in Addtype (id.entry, L.in) Hình 5.2 phân tích thích cho câu real id1, id2, id3 D L.in = real T.type = real L.in = real , id3 real L.in = real , id2 id1 Hình 5.2 Cây phân tích với thuộc tính kế thừa in nút có nhãn L Đồ thị phụ thuộc Các phụ thuộc trung gian: thuộc tính kế thừa tổng hợp nút phân tích miêu tả đồ thị có hướng gọi đồ thị phụ thuộc (dependency graph) Cây phụ thuộc phân tích cho trước, xây dựng sau: for với nút n phân tích for với thuộc tính a ký hiệu văn phạm nút n - xây dựng nút đồ thị phụ thuộc cho a; for với nút n phân tích for với luật ngữ nghóa b:= f (c1, c2, …, ck) tương ứng với luật sinh dùng nút n for i := to k xây dựng cạnh từ nút c1 đến nút b Thí dụ 5.4 Khi ta dùng luật sinh E → E1 + E2 phân tích, thêm cạnh sau vào (H.5.3) đồ thị phụ thuộc Luật sinh E → E1 + E2 Luật ngữ nghóa E.val := E1.val + E2.val E E1 val + val E2 val Hình 5.3 Đồ thị phụ thuộc phân tích cho E Ỉ E1+ E2 Thí dụ 5.5 (H.5.4) đồ thị phụ thuộc cho phân tích (H.5.2) Đánh giá thứ tự Trong xếp logic topo, thuộc tính phụ thuộc c1, c2, …, ck luật ngữ nghóa b:= f (c1, c2, …, ck) đánh giá trước f D type T in real in L 10 L L entry id3 id2 entry id1 entry Hình 5.4 Đồ thị phụ thuộc cho phân tích (H.5.2) Thí dụ 5.6 Mỗi cạnh đồ thị phụ thuộc (H.5.4.) từ số thấp đến số cao nút Từ thứ tự logic topo có chương trình Chúng ta viết an cho thuộc tính liên quan đến nút đánh số n đồ thị phụ thuộc a4 := real a5 := a4 addtype (id3.entry, a5); a7 := a5 addtype (id2.entry, a7); a9 := a7 addtype (id1.entry, a9); Một số phương pháp đề nghị cho việc đánh giá luật ngữ nghóa Phương pháp phân tích (parse-tree method) Phương pháp sở luật (rule-based method) Phương pháp rõ ràng A.a = g(g(f(X.x), Y1, y), Y2, y) A.a = g(f(X.x), Y1, y) Y2 A R.i = f(X.x) X Y1 A.a = f(X.x) Y1 Y2 X R.I = g(g(f(X.x), Y1, y), Y2,y) Hình 5.11 Hai cách tính giá trị thuộc tính ∈ Mô 5.5 Lược đồ dịch chuyển đổi cho cấu trúc cú pháp E→T R R→+ T R1 R→− T R1 R→∈ T→( E ) T → id T → num {Rj := T.nptr} {E.nptr := R.s} {R1j := mknode (‘+’, Rj.T.nptr)} {R.s := R1.s} {R1j := mknode (‘-’, Rj.T.nptr)} {R.s := R1.s} {R.s := Rj} {T.nptr := E.nptr} {T.nptr := mkleaf (id.id.entry)} {T.nptr := mkleaf (num.num.val)} Hình 5.12 biểu diễn toàn hành vi mô 5.5 cho cấu trúc cú pháp câu a – + c Thiết kế dịch đoán nhận trước E R T•nptr − R i T•nptr + num id i • nptr = s ∈ id − R + id c id a num Hình 5.12 Dùng thuộc tính kế thừa để xây dựng cú pháp Giải thuật 5.2: xây dựng trình biên dịch trực tiếp cú pháp đoán nhận trước Nhập: cho lược đồ dịch trực tiếp cú pháp với văn phạm sở phù hợp cho phân tích đoán nhận trước Xuất: mã cho trình biên dịch trực tiếp cú pháp Phương pháp: Với ký hiệu không kết thúc A, xây dựng hàm, thông số thuộc tính kế thừa A, trả giá trị thuộc tính tổng hợp A Mã cho ký hiệu không kết thúc A định luật sinh dùng sở ký hiệu nhập đọc Mã cho luật sinh tạo ra: i) Với token X với thuộc tính tổng hợp x, cất giá trị x vào biến X.x Tạo lệnh gọi chương trình để so trùng token X với ký hiệu nhập đọc ii) Với B, tạo phát biểu gán C1 = B (b1, b2, …, bk), b1, b2, …, bk biến chứa thuộc tính kế thừa B C biến chứa thuộc tính tổng hợp B iii) Với hành vi, chép mã vào cho phận tích, thay tham chiếu đến thuộc tính biến chứa thuộc tính Thí dụ 5.14 Văn phạm mô 5.5 LL (1), phù hợp cho việc phân tích từ xuống function E: ↑ nút cú pháp function R: (i: ↑ nút cú pháp): ↑ nút cú pháp; function T: ↑ nút cú pháp; Kết hợp hai luật sinh R mô 5.5 R → addop T {R1.i :=mknode (addop.lexeme, R.i, T.nptr)} R1 {R.s := R1.s} R → ∈ {R.s := R.i} Moâ 5.6 Thủ tục phân tích cú pháp cho luaät sinh R: R → addop TR |∈ Procedur R: begin if lookahead = addop then begin match (addop): T; R; end else begin /*không làm cả*/ end Mô 5.7 Cây cú pháp đệ quy xuống function R (i: ↑ nút cú pháp): ↑ nút cú pháp; var nptr ll, sl, s: ↑ nút cú pháp; addoplexeme: char; begin if lookahead = addop then begin /* luaät sinh R → addop TR*/ addoplexeme := lexval; match (addop); il := mknode (addoplexeme, i, nptr); sl := R (il); s := sl; end else s := i; /* luaät sinh R → ∈ */ return s end; 5.6 Đánh giá thuộc tính kế thừa từ lên Loại bỏ hành vi nhúng lược đồ dịch Ví dụ: có lược đồ dịch E → TR R → + T {print (‘+’)} R ⏐ - T {print (‘−‘)} R⏐∈ T → num {print (num.val)} Tạo lược đồ dịch với việc dùng ký hiệu đánh dấu không kết thúc N, M E → TR R → + T MR ⏐- TNR ⏐∈ T → num {print (num.val)} M → ∈ {print (‘+’) } N → ∈ {print (‘−’) } Thuộc tính kế thừa stack phân tích Thí dụ 5.15 Quá trình đánh giá thuộc tính kế thừa phân tích từ lên cho câu nhập real p, q, r (H.5.13) D → T {L.in := T.type} T → int {T.type := integer} T → real {T.type := real} L → {L1.in := L.in} L1, id {add type (id.entry, L.in)} L → id {add type (id.entry, L.in)} D T L in in in real r L • L , q p Hình 5.13 Tại nút L có L.in := T.type Bảng 5.9 Bất lúc vế phải L thu giảm T vế phải Nhập Real p, q, r p, q, r p, q, r , q, r , q, r , q, r ,r ,r r Traïng thaùi real T Tp TL TL, TL, q TL TL, TL, r TL D Luật áp dụng T → real L → id L → L, id L → L, id D → TL Bảng 5.10 Giá trị T.type dùng vị trí L.in Luật sinh D Æ TL T Æ int T Æ real L Æ L, id L Ỉ id Đoạn mã val [ntop] := integer val [ntop] := real addtype (val[top], val[top – 3]) addtype (val[top], val[top – 1]) Đánh giá thuộc tính kế thừa Thí dụ 5.16 Đây ví dụ trường hợp đoán nhận trước vị trí thuộc tính lược đồ dịch Luật sinh S Ỉ aAC S Ỉ aABC CỈc Luật ngữ nghóa C.i:= A.s C.i := A.s C.i := g (C.i) (5.4) Luaät sinh Luật ngữ nghóa S Ỉ aAC S Ỉ bABMC CỈc MỈ∈ C.i := A.s M.i := A.s ; C.i := M.s C.i := g(C.i) M.S := M.i S S b b A s a) B i C A B b) i M s i C ∈ Hình 5.14 Sao chép thuộc tính thông qua ký hiệu M a) Luật sinh chưa biến đổi; b) Luật sinh biến đổi Ký hiệu không kết thúc N dùng để mô cho luật ngữ nghóa mà luật chép Ví dụ ta có luật sinh luật ngữ nghóa: Luật sinh S Ỉ aAC Luật ngữ nghóa C.i := f(A.s) (5.5) Luật sinh S Ỉ aANC NỈ∈ Luật ngữ nghóa N.i := A.s ; C.i := N.s N.s := f(N.i) (5.6) Giaûi thuật 5.3 Phân tích từ lên biên dịch với thuộc tính kế thừa Nhập: định nghóa thuộc tính L với văn phạm sở LL (1) Xuất: phân tích cú pháp tính giá trị tất thuộc tính stack phân tích Phương pháp: giả sử ký hiệu không kết thúc A có thuộc tính kế thừa A.i ký hiệu văn phạm X có thuộc tính tổng hợp X.x Với luật sinh A Ỉ X1 … Xn, có n ký hiệu không kết thúc đánh dấu M1 …Mn, thay luật thành luật sinh A Ỉ M1X1 … MnXn Để nhận thấy thuộc tính tính trình phân tích từ lên, xét hai trường hợp Trường hợp thứ ta thu giảm ký hiệu Mj ta phải biết luật sinh A → Mj X1 … MnXn mà Mj có Chúng ta phải biết vị trí thuộc tính mà thuộc tính kế thừa Xj.i cần để tính giá trị cho A.i val[top – 2j + 2], X1.i val[top – 2j + 3], X1.s val[top – 2i + 4], X2.i val[top – 2j + 5]… Trường hợp thứ hai xuất ta thu giảm ký hiệu không kết thúc văn phạm giả sử luật sinh A → M1X1 … MnXn, giả sử ta tính A.s, A.i sinh nằm stack vị trí vị trí A Các thuộc tính cần thiết để tính A.s sẵn sàng stack, biết, vị trí Xj trình thu giảm Thay thuộc tính kế thừa thuộc tính tổng hợp Chúng ta tránh dùng thuộc tính kế thừa việc thay đổi văn phạm sở Trong ngôn ngữ Pascal cho phép khai báo chuỗi biến sau kiểu liệu chúng Thí duï: m, n: integer D→L:T T → integer ⏐ char L → L, id ⏐ id D → id L L → ,id Ll:T T → integer ⏐ char ... Dùng thuộc tính kế thừa để xây dựng cú pháp Giải thuật 5. 2: xây dựng trình biên dịch trực tiếp cú pháp đoán nhận trước Nhập: cho lược đồ dịch trực tiếp cú pháp với văn phạm sở phù hợp cho phân... vị trí a Hình 5. 5 Cây cú pháp cho biểu thức a – + c Định nghóa trực tiếp cú pháp cấu trúc cú pháp Thí dụ bảng 5. 3 định nghóa thuộc tính S dùng để xây dựng cú pháp cho biểu thức số học cộng (+)... tính cha mẹ và/hoặc anh chị nút Thí dụ 5. 3 Sự khai báo tạo ký hiệu không kết thúc D định nghóa trực tiếp cú pháp (bảng 5. 2) Bảng 5. 2 Định nghóa trực tiếp cú pháp với thuộc tính kế thừa L.in Luật

Ngày đăng: 23/03/2022, 21:57

Hình ảnh liên quan

Thí dụ 5.1. Định nghĩa trực tiếp cú pháp ở bảng 5.1. - Bài giảng môn học trình biên dịch   chương 5 trình biên dịch trực tiếp cú pháp

h.

í dụ 5.1. Định nghĩa trực tiếp cú pháp ở bảng 5.1 Xem tại trang 3 của tài liệu.
digit.lexval =3 Hình 5.1. Cây phân tích chú thích 3 *5 + 4n - Bài giảng môn học trình biên dịch   chương 5 trình biên dịch trực tiếp cú pháp

digit.lexval.

=3 Hình 5.1. Cây phân tích chú thích 3 *5 + 4n Xem tại trang 4 của tài liệu.
định nghĩa trực tiếp cú pháp ở (bảng 5.2). - Bài giảng môn học trình biên dịch   chương 5 trình biên dịch trực tiếp cú pháp

nh.

nghĩa trực tiếp cú pháp ở (bảng 5.2) Xem tại trang 5 của tài liệu.
Hình 5.2 là cây phân tích chú thích cho câu real id1, id2, id3. D - Bài giảng môn học trình biên dịch   chương 5 trình biên dịch trực tiếp cú pháp

Hình 5.2.

là cây phân tích chú thích cho câu real id1, id2, id3. D Xem tại trang 6 của tài liệu.
Hình 5.3. Đồ thị phụ thuộc của cây phân tích cho EỈ E1+ E2 - Bài giảng môn học trình biên dịch   chương 5 trình biên dịch trực tiếp cú pháp

Hình 5.3..

Đồ thị phụ thuộc của cây phân tích cho EỈ E1+ E2 Xem tại trang 8 của tài liệu.
Hình 5.4. Đồ thị phụ thuộc cho cây phân tích ở (H.5.2). - Bài giảng môn học trình biên dịch   chương 5 trình biên dịch trực tiếp cú pháp

Hình 5.4..

Đồ thị phụ thuộc cho cây phân tích ở (H.5.2) Xem tại trang 9 của tài liệu.
Hình 5.5. Cây cú pháp cho biểu thức a–4+c - Bài giảng môn học trình biên dịch   chương 5 trình biên dịch trực tiếp cú pháp

Hình 5.5..

Cây cú pháp cho biểu thức a–4+c Xem tại trang 12 của tài liệu.
Thí dụ ở bảng 5.3 là định nghĩa thuộc tính S dùng để xây dựng cây cú pháp cho biểu thức số học cộng (+) và trừ (-). - Bài giảng môn học trình biên dịch   chương 5 trình biên dịch trực tiếp cú pháp

h.

í dụ ở bảng 5.3 là định nghĩa thuộc tính S dùng để xây dựng cây cú pháp cho biểu thức số học cộng (+) và trừ (-) Xem tại trang 13 của tài liệu.
Bảng 5.3. Định nghĩa trực tiếp cú pháp cho cấu trúc cây cú pháp của - Bài giảng môn học trình biên dịch   chương 5 trình biên dịch trực tiếp cú pháp

Bảng 5.3..

Định nghĩa trực tiếp cú pháp cho cấu trúc cây cú pháp của Xem tại trang 13 của tài liệu.
trong bảng danh biểunum 4 - Bài giảng môn học trình biên dịch   chương 5 trình biên dịch trực tiếp cú pháp

trong.

bảng danh biểunum 4 Xem tại trang 14 của tài liệu.
Hình 5.7. Dag cho biểu thức a* (b – c) + (b – c) * d. - Bài giảng môn học trình biên dịch   chương 5 trình biên dịch trực tiếp cú pháp

Hình 5.7..

Dag cho biểu thức a* (b – c) + (b – c) * d Xem tại trang 15 của tài liệu.
Bảng 5.4. Các lệnh để tạo DAG ở (H.5.7) - Bài giảng môn học trình biên dịch   chương 5 trình biên dịch trực tiếp cú pháp

Bảng 5.4..

Các lệnh để tạo DAG ở (H.5.7) Xem tại trang 16 của tài liệu.
Bảng 5.5. Stack của bộ phân tích có vùng lưu chứa các thuộc tính - Bài giảng môn học trình biên dịch   chương 5 trình biên dịch trực tiếp cú pháp

Bảng 5.5..

Stack của bộ phân tích có vùng lưu chứa các thuộc tính Xem tại trang 18 của tài liệu.
Bảng 5.7. Quá trình biên dịch cho chuỗi nhậ p3 *5 + 4n. - Bài giảng môn học trình biên dịch   chương 5 trình biên dịch trực tiếp cú pháp

Bảng 5.7..

Quá trình biên dịch cho chuỗi nhậ p3 *5 + 4n Xem tại trang 20 của tài liệu.
Bảng 5.8. Định nghĩa trực tiếp cú pháp không phải thuộc tính L. Luật sinh Luật ngữ nghĩa - Bài giảng môn học trình biên dịch   chương 5 trình biên dịch trực tiếp cú pháp

Bảng 5.8..

Định nghĩa trực tiếp cú pháp không phải thuộc tính L. Luật sinh Luật ngữ nghĩa Xem tại trang 22 của tài liệu.
Hình 5.10. Đánh giá biểu thức 9 –5 + 2. - Bài giảng môn học trình biên dịch   chương 5 trình biên dịch trực tiếp cú pháp

Hình 5.10..

Đánh giá biểu thức 9 –5 + 2 Xem tại trang 25 của tài liệu.
Thí dụ 5.13. Định nghĩa trực tiếp cú pháp ở bảng 5.3. dùng để xây - Bài giảng môn học trình biên dịch   chương 5 trình biên dịch trực tiếp cú pháp

h.

í dụ 5.13. Định nghĩa trực tiếp cú pháp ở bảng 5.3. dùng để xây Xem tại trang 27 của tài liệu.
Hình 5.11. Hai cách tính giá trị thuộc tính. - Bài giảng môn học trình biên dịch   chương 5 trình biên dịch trực tiếp cú pháp

Hình 5.11..

Hai cách tính giá trị thuộc tính Xem tại trang 28 của tài liệu.
Hình 5.12. biểu diễn toàn bộ các hành vi trong mô phỏng 5.5. cho cấu trúc cây cú pháp của câu a – 4 + c. - Bài giảng môn học trình biên dịch   chương 5 trình biên dịch trực tiếp cú pháp

Hình 5.12..

biểu diễn toàn bộ các hành vi trong mô phỏng 5.5. cho cấu trúc cây cú pháp của câu a – 4 + c Xem tại trang 30 của tài liệu.
Hình 5.13. Tại mỗi nút L có L.in := T.type. - Bài giảng môn học trình biên dịch   chương 5 trình biên dịch trực tiếp cú pháp

Hình 5.13..

Tại mỗi nút L có L.in := T.type Xem tại trang 36 của tài liệu.
Bảng 5.9. Bất cứ lúc nào vế phải củ aL được thu giảm thì T luôn ở - Bài giảng môn học trình biên dịch   chương 5 trình biên dịch trực tiếp cú pháp

Bảng 5.9..

Bất cứ lúc nào vế phải củ aL được thu giảm thì T luôn ở Xem tại trang 37 của tài liệu.
D Ỉ TL T Ỉint - Bài giảng môn học trình biên dịch   chương 5 trình biên dịch trực tiếp cú pháp

int.

Xem tại trang 38 của tài liệu.
Bảng 5.10. Giá trị của T.type được dùng ở vị trí L.in. - Bài giảng môn học trình biên dịch   chương 5 trình biên dịch trực tiếp cú pháp

Bảng 5.10..

Giá trị của T.type được dùng ở vị trí L.in Xem tại trang 38 của tài liệu.
Hình 5.14. Sao chép thuộc tính thông qua kýhiệu M. a) Luật sinh chưa biến đổi;  b) Luật sinh đã được biến đổi. - Bài giảng môn học trình biên dịch   chương 5 trình biên dịch trực tiếp cú pháp

Hình 5.14..

Sao chép thuộc tính thông qua kýhiệu M. a) Luật sinh chưa biến đổi; b) Luật sinh đã được biến đổi Xem tại trang 39 của tài liệu.

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

Tài liệu liên quan