Bài giảng Chương trình dịch - Chương 4: Dịch trực tiếp cú pháp

27 14 0
Bài giảng Chương trình dịch - Chương 4: 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

Bài giảng Chương trình dịch - Chương 4 trang bị cho người học những kiên thức cơ bản về dịch trực tiếp cú pháp. Mục tiêu cụ thể trong chương này giúp người học: Vai trò của dịch trực tiếp cú pháp; hiểu được các khái niệm: Định nghĩa trực tiếp cú pháp, thuộc tính tổng hợp và thuộc tính kế thừa, cây cấu trúc. Mời các bạn cùng tham khảo.

CHƯƠNG IV Dịch trực tiếp cú pháp Mục tiêu: • Vai trị dịch trực tiếp cú pháp • Hiểu khái niệm: Định nghĩa trực tiếp cú pháp, thuộc tính tổng hợp thuộc tính kế thừa, cấu trúc Định nghĩa trực tiếp cú pháp • Ðịnh nghĩa trực tiếp cú pháp (syntax- directed definition) tổng quát hóa văn phạm phi ngữ cảnh, ký hiệu văn phạm kết hợp với tập thuộc tính (attribute) • Các thuộc tính xâu, số, kiểu liệu, địa nhớ • Giá trị thuộc tính tính luật ngữ nghĩa (semantic rule) kèm Mỗi luật ngữ nghĩa viết lời gọi thủ tục đoạn chương trình • Cây phân tích cú pháp có trình bày giá trị thuộc tính nút gọi thích • Trong định nghĩa trực tiếp cú pháp, luật sinh A   kết hợp tập luật ngữ nghĩa có dạng b:= f (c1, c2, , ck) f hàm và: 1) b thuộc tính tổng hợp (synthesized attribute) A c1, c2, , ck thuộc tính ký hiệu văn phạm luật sinh Hoặc 2) b thuộc tính kế thừa (inherited attribute) ký hiệu văn phạm vế phải luật sinh c1, c2, , ck thuộc tính ký hiệu văn phạm luật sinh Ví dụ 4.1: Định nghĩa trực tiếp cú pháp (ĐNTTCP) cho máy tính đơn giản • Token digit có thuộc tính tổng hợp lexval mà giá trị cung cấp phân tích từ vựng PRODUCTION L  En E  E1 + T ET T  T1 * F TF F  (E) F  digit SYMANTIC RULES print(E.val) E.val := E1.val + T.val E.val := T.val T.val := T1.val *  F.val T.val := F.val F.val := E.val F.val := digit.lexval • Thuộc tính tổng hợp thuộc tính mà giá trị nút phân tích cú pháp tính từ giá trị thuộc tính nút • Ðịnh nghĩa trực tiếp cú pháp sử dụng thuộc tính tổng hợp gọi định nghĩa S- thuộc tính (S- attributed definition) • Trong phân tích cú pháp định nghĩa Sthuộc tính, luật ngữ nghĩa tính giá trị thuộc tính cho nút từ lên, từ đến gốc Ví dụ 4.2: ĐNTTCP ví dụ 4.1 định nghĩa S- thuộc tính Cây thích cho biểu thức 3*5+4n (n kí hiệu cho newline) sau: T.val=3 | F.val=3 | digit.lexval=3 E.val=15 | T.val=15 | * L | E.val=19 | + F.val=5 | digit.lexval=5 n T.val=4 | F.val=4 | digit.lexval=4 • Thuộc tính kế thừa thuộc tính mà giá trị xác định từ giá trị thuộc tính nút cha nút anh em • Nói chung ta viết định nghĩa trực tiếp cú pháp thành định nghĩa S- thuộc tính Nhưng số trường hợp, việc sử dụng thuộc tính kế thừa lại thuận tiện tính tự nhiên Ví dụ 4.3: Xét định nghĩa trực tiếp cú pháp sau cho khai báo kiểu cho biến • Các luật kết hợp với luật sinh L gọi thủ tục addtype dùng để nhập kiểu cho mục vào định danh symbol table PRODUCTION D  TL T  int T  real L  L1, id L  id SYMANTIC RULES L.in := T.type T.type := integer T.type := real L1.in := L.in; addtype (id.entry, L.in) addtype (id.entry, L.in) Ví dụ 4.4: Cây thích cho dịng lệnh real id1, id2, id3; sau D T.type=real | real L.in=real | id1 L.in=real | , L.in=real | , id2 id3 • Đồ thị phụ thuộc (dependency graph): Trong cú pháp chứa thuộc tính tổng hợp thuộc tính kế thừa, ta dùng đồ thị phụ thuộc để biểu diễn loại thuộc tính Ví dụ 4.5: Với định nghĩa S- thuộc tính       E  E1 + E2           E.val := E1.val + E2.val Ta có đồ thị phụ thuộc:   • Xây dựng cú pháp cho biểu thức:  Tương tự việc dịch biểu thức thành dạng hậu tố  Xây dựng cho biểu thức cách tạo nút cho toán hạng toán tử  Mỗi nút cài đặt ghi có nhiều trường  Trong nút tốn tử, có trường tốn tử, trường cịn lại chứa trỏ, trỏ tới nút tốn hạng • Ðể xây dựng cú pháp cho biểu thức sử dụng hàm sau đây: mknode(op, left, right): Tạo nút tốn tử có nhãn op hai trường chứa trỏ, trỏ tới left right mkleaf(id, entry): Tạo nút với nhãn id trường chứa trỏ entry, trỏ tới ô bảng ký hiệu mkleaf(num,val): Tạo nút với nhãn num trường val, giá trị số Ví dụ 4.7: Xây dựng cú pháp cho biểu thức: a - + c  ta dùng dãy lời gọi hàm (1): p1 := mkleaf(id, entrya)  (4): p4 := mkleaf(id, entryc) (2): p2 := mkleaf(num,4)        (5): p5 := mknode(‘+’, p3, p4) (3): p3 := mknode(‘-‘, p1, p2)  • Cây xây dựng từ lên • p1, p2, , p5 trỏ, trỏ tới nút • entrya, entryc trỏ, trỏ tới mục vào a c symbol table • Cây cú pháp cho biểu thức a - + c   • Xây dựng cú pháp từ định nghĩa trực tiếp cú pháp: Căn vào luật sinh văn phạm luật ngữ nghĩa kết hợp mà ta gọi hàm mknode mkleaf để tạo cú pháp Ví dụ 4.8: Ðịnh nghĩa trực tiếp cú pháp giúp việc xây dựng cú pháp cho biểu thức (thuộc tính tổng hợp nptr theo dõi trỏ trả gọi hàm) PRODUCTION E  E1 + T E  E1 - T ET T  (E) T  id T  num SYMANTIC RULES E.nptr := mknode(‘+’, E1.nptr, T.nptr) E.nptr := mknode(‘-’, E1.nptr, T.nptr) E.nptr := T.nptr T.nptr := E.nptr T nptr := mkleaf(id, id.entry) T.nptr := mkleaf(num, num.val) Ví dụ 4.9: Cây cú pháp cho biểu thức a-4+c Đánh giá từ lên với định nghĩa S- thuộc tính • Các thuộc tính tổng hợp đánh giá cách phân tích cú pháp từ lên • Bộ phân tích cú pháp lưu trữ giá trị thuộc tính kí hiệu văn phạm STACK • Khi áp dụng reduction, giá trị tổng hợp tạo từ thuộc tính kí tự văn phạm bên vế phải luật sinh lưu trữ STACK • STACK cài đặt cặp mảng state val Mỗi ô stack trỏ trỏ tới bảng phân tích LR(1) Nếu phần tử thứ i STACK ký hiệu A val[i] giá trị thuộc tính kết hợp với A • Giả sử  luật  ngữ nghĩa A.a :=  f ( X.x,  Y.y,  Z.z ) kết hợp  với  luật sinh A  XYZ Trước XYZ rút gọn thành A val[top] = Z.z, val[top 1] = Y.y, val[top - 2] = X.x Sau rút gọn, top bị giảm đơn vị, A nằm state[top] (vị trí X trước đó) thuộc tính tổng hợp nằm val[top] top state val X X.x Y Y.y Z Z.z Ví dụ 4.10: Biểu diễn máy tính đơn giản với LR parser PRODUCTION L  En E  E1 + T ET T  T1 * F TF F  (E) F  digit CODE FRAGMENT print(val[top]) val[ntop] := val[top - 2] + val[top]                                           val[ntop] := val[top - 2] * val[top]                                           val[ntop] := val[top - 1] • Bảng sau trình bày q trình thực phân tích cú pháp với chuỗi nhập vào 3*5+4 n IINPUT 3*5+4n *5+4n *5+4n  *5 + n 5+4n +4n +4n +4n +4n 4n n n n n   state _ F T T* T*5 T*F T E E+ E+4 E+F E+T E En L val _ 3 33-5 3-5 15 15 15 15 - 15 - 15 - 19 19 19 PRODUCTION USED     F  digit TF     F  digit TT*F ET     F  digit TF EE+T   L  En  Ðịnh nghĩa L- thuộc tính • Mỗi định nghĩa trực tiếp cú pháp định nghĩa L- thuộc tính thuộc tính kế thừa Xj (1  j  n) vế phải luật sinh A  X1X2 Xn phụ thuộc vào: Các thuộc tính X1, X2, , Xj-1  Các thuộc tính kế thừa A Lược đồ dịch • Lược đồ dịch (translation scheme) văn phạm phi ngữ cảnh thuộc tính kết hợp với ký hiệu văn phạm hành vi ngữ nghĩa đặt cặp dấu { } xen vào bên phải luật sinh Ví dụ 4.11: Lược đồ dịch biểu thức trung tố với phép cộng trừ thành dạng hậu tố: ETR R  addop  T { print ( addop.lexeme) } R1 |  T  num        { print ( num.val) }   • Với biểu thức  - + ta có phân tích cú pháp phía Khi áp dụng phép duyệt depth- first có kết dạng hậu tố 95-2+ E T { print('9') } R { print('-') } - T { print('5') } + R T { print('+') } R { print('2') }  • Cách xây dựng lược đồ dịch  - Trường hợp chứa thuộc tính tổng hợp: Với luật ngữ nghĩa, ta tạo lệnh gán tương ứng đặt vào cuối vế phải luật sinh Ví dụ 4.12: Luật sinh                  Luật ngữ nghĩa T  T1 * F                T.val := T1.val * F.val Ta có lược đồ dịch: T  T1 * F { T.val := T1.val * F.val} - Trường hợp chứa thuộc tính tổng hợp thuộc tính kế thừa phải thoả mãn điều kiện: Thuộc tính kế thừa ký hiệu vế phải luật sinh phải xác định hành vi nằm trước ký hiệu Một hành vi không tham khảo tới thuộc tính tổng hợp ký hiệu nằm bên phải hành vi Thuộc tính tổng hợp ký hiệu chưa kết thúc vế trái xác định sau tất thuộc tính mà tham khảo xác định Hành vi xác định thuộc tính ln đặt cuối vế phải luật sinh ... định nghĩa trực tiếp cú pháp: Căn vào luật sinh văn phạm luật ngữ nghĩa kết hợp mà ta gọi hàm mknode mkleaf để tạo cú pháp Ví dụ 4.8: Ðịnh nghĩa trực tiếp cú pháp giúp việc xây dựng cú pháp cho... phân tích cú pháp tính từ giá trị thuộc tính nút • Ðịnh nghĩa trực tiếp cú pháp sử dụng thuộc tính tổng hợp gọi định nghĩa S- thuộc tính (S- attributed definition) • Trong phân tích cú pháp định...Định nghĩa trực tiếp cú pháp • Ðịnh nghĩa trực tiếp cú pháp (syntax- directed definition) tổng quát hóa văn phạm phi ngữ cảnh, ký hiệu

Ngày đăng: 10/05/2021, 13:58

Mục lục

  • CHƯƠNG IV Dịch trực tiếp cú pháp

  • Định nghĩa trực tiếp cú pháp

  • Xây dựng cây cú pháp

  • Đánh giá từ dưới lên với định nghĩa S- thuộc tính

  • Ðịnh nghĩa L- thuộc tính

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

Tài liệu liên quan