Đang chuẩn bị nút TẢI XUỐNG, xin hãy chờ
Tải xuống
Bài giảng Chương trình dịch - Bài giảng 6 trình bày về biên dịch dựa cú pháp. Các nội dung chính được trình bày trong bài giảng này gồm có: Cú pháp điều khiển, các loại thuộc tính, đồ thị phụ thuộc, lược đồ dịch, cú pháp điều khiển trong phân tích LL. Mời tham khảo. | Nguyễn Phương Thái Bộ môn Khoa học Máy tính http://www.coltech.vnu.vn/~thainp/ Nội dung Cú pháp điều khiển Các loại thuộc tính Đồ thị phụ thuộc Lược đồ dịch Cú pháp điều khiển trong phân tích LL Cú pháp điều khiển Cú pháp điều khiển (syntax-directed definition): là một dạng tổng quát hoá của văn phạm phi ngữ cảnh, trong đó mỗi ký hiệu văn phạm có một tập thuộc tính đi kèm, được chia thành 2 tập con là thuộc tính tổng hợp (synthesized attribute) và thuộc tính kế thừa (inherited attribute) của ký hiệu văn phạm đó. Một cây phân tích cú pháp có trình bày các giá trị của các thuộc tính tại mỗi nút được gọi là cây phân tích cú pháp có chú giải (ngữ nghĩa) (annotated parse tree). Cú pháp điều khiển (tiếp) Định nghĩa: Trong mỗi cú pháp điều khiển, mỗi sản xuất A-> có thể được liên kết với một tập các qui tắc ngữ nghĩa có dạng b=f(c1, . . .,ck) với f là một hàm và b là một thuộc tính tổng hợp của A, còn c1, . . .,ck là các thuộc tính của các ký hiệu trong sản xuất đó. Hoặc b là một thuộc tính kế thừa của một trong những ký hiệu ở vế phải của sản xuất, còn c1, . . . ,ck là thuộc tính của các ký hiệu văn phạm. Ví dụ về thuộc tính tổng hợp Sản xuất Luật ngữ nghĩa L -> E n 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 F1.val=3 (syntax: F1->3 semantic: F1.val=3.lexical) F2.val=4 (syntax: F2->3 semantic: F2.val=4.lexical) T2.val=3 (syntax: T2->F1 semantic: T2.val=F1.val ) T1.val=3*4=12 (syntax: T1->T2*F2 semantic: T1.val=T2.val*F2.val) F3.val=4 (syntax: F3->4 semantic: F3.val=4.lexical) T3.val=4 (syntax: T3->F3 semantic: T3.val=F3.val ) E1.val=12+4=16 (syntax: E1->E2+T3 semantic: E1.val=E2.val+T3.val) “16” (syntax: L->E1 n semantic: print(E1.val)) L E1 E2 T3 T1 T2 * F2 F1 3 + F3 n 4 4 Câu vào “3*4+4” Ví dụ về thuộc tính kế thừa Sản xuất Luật ngữ nghĩa D -> T L L.in := T.type T -> int T.type := interger T -> real T.type := real L -> L1, id L1.in | Nguyễn Phương Thái Bộ môn Khoa học Máy tính http://www.coltech.vnu.vn/~thainp/ Nội dung Cú pháp điều khiển Các loại thuộc tính Đồ thị phụ thuộc Lược đồ dịch Cú pháp điều khiển trong phân tích LL Cú pháp điều khiển Cú pháp điều khiển (syntax-directed definition): là một dạng tổng quát hoá của văn phạm phi ngữ cảnh, trong đó mỗi ký hiệu văn phạm có một tập thuộc tính đi kèm, được chia thành 2 tập con là thuộc tính tổng hợp (synthesized attribute) và thuộc tính kế thừa (inherited attribute) của ký hiệu văn phạm đó. Một cây phân tích cú pháp có trình bày các giá trị của các thuộc tính tại mỗi nút được gọi là cây phân tích cú pháp có chú giải (ngữ nghĩa) (annotated parse tree). Cú pháp điều khiển (tiếp) Định nghĩa: Trong mỗi cú pháp điều khiển, mỗi sản xuất A-> có thể được liên kết với một tập các qui tắc ngữ nghĩa có dạng b=f(c1, . . .,ck) với f là một hàm và b là một thuộc tính tổng hợp của A, còn c1, . . .,ck là các thuộc tính của các ký hiệu trong sản xuất đó. Hoặc b là một thuộc tính