Bài giảng Chương trình dịch: Phần 1 cung cấp cho người học những kiến thức như: Các khái niệm, kiển thức cơ bản về chương trình dịch. Môi trường của chương trình dịch. Các giai đoạn của chương trình dịch. Nhóm các giai đoạn của chương trình dịch. Các đặc trưng cơ bản của ngôn ngữ lập trình bậc cao.
Mơc lơc LỜI NĨI ĐẦU Chƣơng TỔNG QUAN VỀ CHƢƠNG TRÌNH DỊCH 1.1 Mở đầu 1.2 Chƣơng trình dịch 11 1.2.1 Các khái niệm 11 1.2.2 Mơ hình phân tích - tổng hợp chƣơng trình dịch 12 1.2.3 Mơi trƣờng chƣơng trình dịch 13 1.3 Phân tích chƣơng trình nguồn 14 1.3.1 Phân tích từ vựng (Lexical Analysis) 14 1.3.2 Phân tích cú pháp (Syntax Analysis) 16 1.3.3 Phân tích ngữ nghĩa (Semantic Analysis) 17 1.4 Các giai đoạn chƣơng trình dịch 18 1.4.1 Quản lý bảng ký hiệu 19 1.4.2 Xử lý lỗi 19 1.4.3 Các giai đoạn phân tích 20 1.4.4 Sinh mã trung gian 20 1.4.5 Tối ƣu mã 21 1.4.6 Sinh mã đích 21 1.5 Nhóm giai đoạn 21 1.5.1 Kỳ đầu (Front End) 22 1.5.2 Kỳ sau (Back End) 22 1.6 Các đặc trƣng ngôn ngữ lập trình bậc cao 22 1.6.1 Từ vựng 22 1.6.2 Cú pháp 23 1.6.3 Ngữ nghĩa 23 CÂU HỎI VÀ BÀI TẬP CHƢƠNG 24 Chƣơng PHÂN TÍCH TỪ VỰNG 25 2.1 Nhắc lại số kiến thức văn phạm – ngôn ngữ - Automat 25 2.1.1 Một số khái niệm sở 25 2.1.2 Biểu diễn ngôn ngữ 26 2.1.3 Văn phạm 27 2.1.4 Văn phạm phi ngữ cảnh 28 2.1.5 Biểu thức quy (Regular Expression) 29 2.1.6 Automat hữu hạn đơn định 31 2.1.7 Automat hữu hạn không đơn định - NFA (Nondeterministic Finite Automata) 31 2.1.8 Automat hữu hạn không đơn định với ε-dịch chuyển (NFAε) 32 2.2 Giai đoạn phân tích từ vựng 34 2.2.1 Thẻ từ, mẫu từ vựng trị từ vựng (từ vị) 35 2.2.2 Nhận biết thẻ từ (token) 40 2.3 Kỹ thuật đọc chƣơng trình nguồn 43 2.3.1 Cặp đệm (Buffer Pairs) 43 2.3.2 Khóa cầm canh (Sentinel) 44 2.4 Kỹ thuật sử dụng Automat để phân tích từ vựng 45 2.4.1 Giải thuật sử dụng DFA 45 2.4.2 Giải thuật sử dụng NFA 48 2.4.3 Giải thuật sử dụng NFA 49 2.5 Kỹ thuật biến đổi Automat 50 2.6 Giải thuật Thomson 61 CÂU HỎI VÀ BÀI TẬP CHƢƠNG 66 Chƣơng PHÂN TÍCH CÚ PHÁP 76 3.1 Giai đoạn phân tích cú pháp 76 3.1.1 Vị trí, chức năng, nhiệm vụ giai đoạn phân tích cú pháp 76 3.1.2 Xử lý lỗi cú pháp 77 3.1.3 Các chiến lƣợc phục hồi lỗi 77 3.1.4 Các phƣơng pháp phân tích cú pháp 78 3.2 Biến Ðổi văn phạm phi ngữ cảnh 79 3.2.1 Cây phân tích cú pháp (Parsing tree) dẫn xuất 79 3.2.2 Ngôn ngữ nhập nhằng (Ambiguity) 82 3.2.3 Kỹ thuật khử nhập nhằng 83 3.2.4 Kỹ thuật khử đệ quy trái 84 3.2.5 Kỹ thuật thừa số hoá bên trái 88 3.3 Phân tích cú pháp từ xuống 93 3.3.1 Phân tích cú pháp đệ quy xuống 93 3.3.2 Phân tích cú pháp dự đốn (phân tích LL(1)) 96 3.4 Phân tích cú pháp từ dƣới lên (Bottom - up parsing) 117 3.4.1 Phân tích đẩy thu ( Shift – Reduce parsing) 118 3.4.2 Phân tích cú pháp thứ bậc tốn tử 124 3.4.3 Phân tích LR(K) 127 3.4.4 Giải thuật phân tích LR 128 3.4.5 Xây dựng bảng phân tích cú pháp 133 CÂU HỎI VÀ BÀI TẬP CHƢƠNG 146 LỜI GIẢI TÓM TẮT HOẶC HƢỚNG DẪN 155 TÀI LIỆU THAM KHẢO 218 DANH MỤC HÌNH VẼ Hình 1.1 Mơ tả việc dịch chƣơng trình sang Assembly 10 Hình 1.2 Sơ đồ chƣơng trình dịch 11 Hình 1.3 Mơ hình phân tích - tổng hợp 12 Hình 1.4 Cây phân tích cú pháp 12 Hình 1.5 Cấu trúc mơi trƣờng chƣơng trình dịch 14 Hình 1.6 Một phân tích cú pháp 16 Hình 1.7 Sơ đồ cấu trúc chƣơng trình dịch 18 Hình 2.1 NFA với ε - dịch chuyển 35 Hình 2.2 Vị trí giai đoạn phân tích từ vựng 35 Hình 2.3 Sơ đồ chuyển nhận dạng token relop 42 Hình 2.4 Mơ cặp đệm 44 Hình 2.5 Sơ đồ mơ tả Automat đốn nhận biểu thức b*a+bb 46 Hình 2.6 Biểu diễn automat đồ thị 47 Hình 2.7 Đồ thị biểu diễn Automat 48 Hình 2.8 NFA với ε - dịch chuyển 49 Hình 2.9 Sơ đồ giải thuật 52 Hình 2.10 Biểu diễn automat đồ thị 52 Hình 2.11 Biểu diễn automat đồ thị 54 Hình 2.12 Biểu diễn automat đồ thị 55 Hình 2.13 Biểu diễn automat đồ thị 56 Hình 2.14 Sơ đồ giải thuật 57 Hình 2.15 Biểu diễn automat đồ thị 57 Hình 2.16 Biểu diễn automat đồ thị 60 Hình 2.17 Automat đốn nhận biểu thức r= 61 Hình 2.18 Automat đoán nhận biểu thức r = a 61 Hình 2.19 Automat đốn nhận biểu thức r = s+t 61 Hình 2.20 Automat đốn nhận biểu thức r=st 62 Hình 2.21a Automat đốn nhận biểu thức r = s* 62 Hình 2.21b Automat đoán nhận biểu thức r = s+ 62 Hình 2.22 Các automat đoán nhận a, b 64 Hình 2.23 Automat đốn nhận r7 = a+b 64 Hình 2.24 Automat đốn nhận r5 = (a+b)* 65 Hình 2.25 Automat đốn nhận r=(a b)*abb 65 Hình 3.1 Vị trí phân tích cú pháp 77 Hình 3.2 Minh họa phân tích cú pháp 80 Hình 3.3 Minh họa phân tích cú pháp 81 Hình 3.4 Xây dựng phân tích cú pháp từ dẫn xuất 82 Hình 3.5 Hai phân tích cú pháp xâu id + id * id 83 Hình 3.6 Hai phân tích cú pháp xâu 84 Hình 3.7 a, b, c Mơ tả q trình phân tích xâu w = cad 94 Hình 3.8 Sơ đồ chuyển biến 97 Hình 3.9 Sơ đồ chuyển cho biến 99 Hình 3.10 Sơ đồ chuyển rút gọn 100 Hình 3.11 Mơ tả hình tổ chức liệu kỹ thuật dự đoán 104 Hình 3.12 Cây phân tích cú pháp cho xâu vào id + id * id 107 Hình 3.13 Mơ hình phân tích đẩy - thu 121 Hình 3.13a Cây phân tích cú pháp cho xâu vào id * id +id theo đẩy – thu 121 Hình 3.14 Mơ hình phân tích cú pháp LR 128 Hình 3.14a Cây phân tích cú pháp cho xâu vào id * id + id theo LR 128 Hình 3.15 Sơ đồ chuyển 142 DANH MỤC BẢNG Bảng 2.1 Các ví dụ token 38 Bảng 2.2 Biểu thức quy cho số token 41 Bảng 2.3 Mơ automat đốn nhận từ bbaaabb 46 Bảng 2.4 Mơ automat đốn nhận từ aaabba 47 Bảng 2.5 Mô tả trình đốn nhận xâu 49 Bảng 2.6 Mơ tả q trình đốn nhận xâu 50 Bảng 2.7 Mô giải thuật 54 Bảng 2.8 Mô giải thuật 55 Bảng 2.9 Mô giải thuật 60 Bảng 3.1 Bảng phân tích cú pháp 107 Bảng 3.2 Phân tích cú pháp cho xâu vào id + id * id 107 Bảng 3.3 Bảng phân tích cú pháp 113 Bảng 3.4 Bảng phân tích cú pháp 114 Bảng 3.5 Bảng phân tích cú pháp M phục hồi lỗi 116 Bảng 3.6 Phân tích cú pháp cho xâu vào + id * + id phục hồi lỗi 117 Bảng 3.7 Quá trình phân tích đẩy thu xâu id1 + id2* id3 123 Bảng 3.8 Các quan hệ thứ bậc toán tử 125 Bảng 3.9 Bảng quan hệ thứ bậc toán tử 125 Bảng 3.10 Bảng phân tích cú pháp 131 Bảng 3.11 Q trình phân tích xâu id*id+id 132 Bảng 3.12 Mô giải thuật đoán nhận xâu id1 + id2* id3 135 Bảng 3.13 Bảng phân tích cú pháp LR(1) 144 LỜI NÓI ĐẦU LỜI NÓI ĐẦU Chương trình dịch (compiler) mơn khoa học quan trọng khoa học máy tính Ở nhiều nước giới, mơn học “Chương trình dịch” trở thành mơn học bắt buộc sở ngành thuộc lĩnh vực công nghệ thông tin Ở nước ta, nhiều trường đại học giảng dạy môn học cho sinh viên ngành khoa học máy tính cơng nghệ thơng tin Tuy nhiên tài liệu phục vụ giảng dạy cho môn học nước ta cịn ít, thời lượng dành cho mơn học cịn khác trường §Ĩ cã nội dung thống cho ngành thuc lĩnh vực công nghệ thông tin Tr-ờng, tr-ờng Đại học S- phạm Kỹ thuật Nam Định, Trng đà ban hành ch-ơng trình chi tiết cho môn học Vic xut bn tập đề cương giảng nhằm đáp ứng nhu cầu cung cấp tài liệu môn học cho việc giảng dạy giảng viên học tập sinh viên ngành thuộc khoa Công nghệ Thông tin trường Đại học Sư phạm Kỹ thuật Nam Định nói riêng làm liệu tham khảo cho sinh viên cán giảng dạy trường nói chung Tập đề cương giảng “Chương trình dịch” biên soạn theo chương trình chi tiết mơn học “Chương trình dịch” trường Đại học Sư phạm Kỹ thuật Nam Định Mục tiêu tập đề cương giảng nhằm cung cấp kiến thức bản, tổng quan chương trình dịch Giúp sinh viên hiểu kiến thức bản, tổng quan chương trình dịch nói chung kỹ thuật xây dựng phân tích từ vựng phân tích cú pháp chương trình dịch ngơn ngữ lập trình bậc cao Đây kiến thức tảng, làm sở cho việc xây dựng ngơn ngữ lập trình bậc cao chương trình dịch Về nội dung, tập đề cương giảng chia thành chương: Chương Tổng quan chương trình dịch Chương trình bày: Các khái niệm, kiển thức chương trình dịch Mơi trường chương trình dịch Các giai đoạn chương trình dịch Nhóm giai đoạn chương trình dịch Các đặc trưng ngơn ngữ lập trình bậc cao Chương Phân tích từ vựng Chương nhắc lại số kiến thức văn phạm, ngơn ngữ, Automat Trình bày kiến thức thẻ từ, mẫu từ vựng trị từ vựng; vị trí, nhiệm vụ giai đoạn phân tích từ vựng; số kỹ thuật đọc chương trình nguồn; kỹ thuật sử dụng Automat để phân tích từ vựng kỹ thuật biến đổi automat Chương Phân tích cú pháp LỜI NĨI ĐẦU Chươngnày trình bày kiến thức về: Vị trí, nhiệm vụ giai đoạn phân tích cú pháp phương pháp phân tích cú pháp Các kỹ thuật biến đổi văn phạm: khử đệ quy trái, thừa số hoá bên trái, khử nhập nhằng Phương pháp phân tích top – down: phân tích cú pháp đệ quy xuống, phân tích cú pháp dự đốn Phương pháp phân tích bottom – up: phân tích cú pháp đẩy thu, phân tích cú pháp LR(k) Đặc biệt cuối chương đưa hệ thống câu hỏi, tập nhằm củng cố, khắc sâu, nâng cao vận dụng kiến thức vào giải tập cuối phần lời giải tóm tắt hướng dẫn cho tập nhằm giúp sinh viên tự rèn luyện kỹ kiểm tra kiến thức Trong trình biên soạn, tập đề cương giảng khơng tránh khỏi sai sót, mong đồng nghiệp sinh viên đóng góp ý kiến để tập đề cương giảng ngày hoàn thiện Người biên soạn Phạm Hùng Phú Chƣơng Tổng quan chƣơng trình dịch Chƣơng TỔNG QUAN VỀ CHƢƠNG TRÌNH DỊCH Mục tiêu: Giúp sinh viên có khả năng: - Hiểu đƣợc khái niệm bản: Chƣơng trình dịch, hệ thống thơng dịch, biên dịch - Hiểu đƣợc mơi trƣờng chƣơng trình dịch - Hiểu đƣợc cấu trúc chƣơng trình dịch - Hiểu đƣợc giai đoạn chƣơng trình dịch: vị trí, nhiệm vụ - Biết đƣợc đặc trƣng ngơn ngữ lập trình bậc cao Nội dung chính: - Khái niệm chƣơng trình dịch - Mơi trƣờng chƣơng trình dịch - Các giai đoạn chƣơng trình dịch - Nhóm giai đoạn chƣơng trình dịch - Các đặc trƣng ngơn ngữ lập trình bậc cao 1.1 Mở đầu Các ngơn ngữ lập chƣơng trình thực chất ngơn ngữ dùng để biểu diễn giải thuật thực tốn Để thuận tiện đơn giản cho trình viết chƣơng trình ngƣời ta xây dựng ngơn ngữ lập trình bậc cao nhƣ Algol, Pascal, C, C++, Visual Fox, Visual Basic, … Hiện có nhiều ngơn ngữ lập trình bậc cao Những ngơn ngữ lập trình bậc cao có chung đặc tính khơng phụ thuộc vào máy tính, gần gũi với tốn học lĩnh vực hoạt động ngƣời Chẳng hạn Visual Fox ngôn ngữ vừa gần gũi, thích hợp với cơng việc quản lý sản xuất, kinh doanh vừa đủ chặt chẽ để diễn đạt công thức tốn học mang tính logic cao Viết chƣơng trình ngơn ngữ máy có ƣu điểm chƣơng trình thực nhanh, nạp chƣơng trình vào máy tính chạy đƣợc khơng cần giai đoạn dịch, song có nhƣợc điểm sau: - Ngôn ngữ máy xa lạ với ngơn ngữ tốn học ngơn ngữ tự nhiên ngƣời - Dễ sinh lỗi, song lại khó phát lỗi, nhiều thời gian hiệu chỉnh chƣơng trình - Khó diễn đạt rõ ràng giải thuật - Phụ thuộc vào máy tính, khơng thuận tiện cho việc giao lƣu phổ biến chƣơng trình, giải thuật tốn tốt, dẫn đến lãng phí lao động xã hội Chƣơng Tổng quan chƣơng trình dịch Những lý nêu nguyên nhân thúc đẩy việc sản sinh nhiều ngơn ngữ lập trình bậc cao khác Trái ngƣợc với ngôn ngữ máy, ngơn ngữ lập trình bậc cao có đặc điểm sau: - Gần gũi với ngơn ngữ tốn học ngôn ngữ tự nhiên ngƣời - Không phụ thuộc vào máy cụ thể, dễ phổ biến, dễ giao lƣu trao đổi hợp tác ngƣời làm chƣơng trình, tăng hiệu lao động xã hội - Ít sinh lỗi, cho phép phát lỗi nhanh tiết kiệm thời gian hiệu chỉnh chƣơng trình Về ngun tắc, máy tính thực đƣợc chƣơng trình viết ngơn ngữ máy Vì vậy, chƣơng trình viết ngơn ngữ lập trình bậc cao muốn máy tính thực đƣợc phải trải qua giai đoạn chuyển ngôn ngữ lập trình bậc cao sang ngơn ngữ máy Giai đoạn chuyển ngơn ngữ lập trình bậc cao sang ngơn ngữ máy đƣợc gọi giai đoạn dịch chƣơng trình hay ngắn gọn dịch Chƣơng trình thực giai đoạn dịch gọi chƣơng trình dịch (Compiler) Đối với chƣơng trình dịch chƣơng trình viết ngơn ngữ lập trình bậc cao liệu đầu vào đƣợc gọi chƣơng trình nguồn; chƣơng trình kết dịch (đầu ra) chƣơng trình dịch đƣợc gọi chƣơng trình đích Ngơn ngữ dùng để viết chƣơng trình nguồn ta gọi ngơn ngữ nguồn Ngơn ngữ dùng để viết chƣơng trình đích ta gọi ngơn ngữ đích Trong thực tế với mục đích tận dụng chƣơng trình tốt có, viết ngơn ngữ lập trình bậc cao khác nhau; ngƣời ta thƣờng dịch chƣơng trình nguồn ngơn ngữ trung gian sau ghép chúng lại thành chƣơng trình viết ngơn ngữ sau chuyển sang ngơn ngữ máy Thậm chí có chƣơng trình đƣợc viết nhiều ngơn ngữ lập trình khác nhau, ngƣời ta gọi chƣơng trình viết dạng hợp ngữ Hình 1.1 mơ tả việc dịch chƣơng trình viết ngơn ngữ khác sang chƣơng trình viết ngơn ngữ trung gian Assembly Chƣơng trình Trong C Chƣơng trình Trong C++ Assembly Chƣơng trình Trong Assembly Chƣơng trình Pascal Hình 1.1 Mơ tả việc dịch chương trình sang Assembly 10 Chƣơng Phân tích từ vựng 2.6 Giải thuật Thomson Với mục đích sử dụng Automat hữu hạn để phân tích từ vựng Thomson đƣa giải thuật giải toán sau: Cho trƣớc biểu thức quy Hãy xây dựng Automat đốn nhận ngơn ngữ đƣợc biểu diễn biểu thức quy Tƣ tƣởng giải thuật dựa vào ý tƣởng, biểu thức quy phân tích thành biểu thức quy đơn giản Từ xây dựng Automat đơn giản đốn nhận biểu thức quy đơn giản Sau tổng hợp để đƣợc Automat cần xây dựng 1) Phương pháp xây dựng automat đoán nhận biểu thức quy đơn giản a) Xây dựng Automat đốn nhận từ rỗng Hình 2.17 Automat đoán nhận từ rỗng với i trạng thái bắt đầu, f trạng thái kết thúc Start i f Hình 2.17 Automat đốn nhận biểu thức r= b) Xây dựng Automat đoán nhận ký tự a Start a i f Hình 2.18 Automat đốn nhận biểu thức r = a Hình 2.18 sơ đồ biểu diễn Automat đoán nhận a, với i trạng thái bắt đầu, f trạng thái kết thúc 2) Phương pháp xây dựng automat tổng hợp từ automat a) Giả sử s t hai biểu thức quy N(s), N(t) hai Automat đoán nhận s t tƣơng ứng Automat đốn nhận biểu thức quy s + t có dạng nhƣ hình 2.19 Start N(s) i f N(t) Hình 2.19 Automat đốn nhận biểu thức r = s+t 61 Chƣơng Phân tích từ vựng Ở i, f trạng thái chƣa có N(s), N(t), từ trạng thái bắt đầu i Automat nhìn thấy từ rỗng; chuyển sang trạng thái bắt đầu N(r) trạng thái bắt đầu N(t) Ngƣợc lại từ trạng thái cuối N(s) N(t) chuyển sang trạng thái kết thúc f gặp từ rỗng b) Xây dựng Automat đoán nhận biểu thức quy st Giả sử N(s), N(t) hai Automat đốn nhận svà t tƣơng ứng Automat đốn nhận biểu thức quy st có dạng nhƣ hình 2.20 Start i N(s) N(t) f Hình 2.20 Automat đoán nhận biểu thức r=st Ở i trạng thái chƣa có N(s) N(t), gặp từ rỗng Automat chuyển đến trạng thái đầu N(s), trạng thái kết thúc N(s) trạng thái bắt đầu N(t) đƣợc kết hợp thành trạng thái, trạng thái kết thúc N(t) trở thành trạng thái kết thúc Automat hợp thành c) Giả sử s biểu thức quy, N(s) Automat đốn nhận nó, ta xây dựng Automat đốn nhận s* s+ Hình 2.21a mơ tả Automat N(s*), Hình 2.21 b mô tả Automat N(s+) Start i N(s) f Hình 2.21a Automat đốn nhận biểu thức r = s* Start i N(s) f Hình 2.21b Automat đốn nhận biểu thức r = s+ Ở i, f trạng thái tƣơng ứng trạng thái bắt đầu trạng thái cuối Automat 62 Chƣơng Phân tích từ vựng 3) Giải thuật Thomson Input: r – biểu thức quy; Output: NFA M ; N(M) = N(r) Process: Bước 1: Phân tích r thành biểu thức quy đơn giản - Tìm biểu thức quy phép tốn có thứ tự ƣu tiên thấp - Nếu có phân tích biểu thức quy thành tốn hạng theo phép tốn Mỗi tốn hàng – biểu thức quy đơn giản - Quay lại bƣớc phân tích tất biểu thức quy thánh biểu thức quy đơn giản dạng r = a Bước 2: Xây dựng - Xây dựng automat đơn giản đoán nhận biểu thức quy đơn giản - Xây dựng automat tổng hợp theo thứ tự ngƣợc lại xây dựng automat tổng hợp đoán nhận biểu thức quy r Nhận xét: - Với biểu thức quy r, Automat N(r) đốn nhận có số trạng thái nhiều khơng vƣợt q hai lần số ký tự có r số phép tốn có Điều nhận xét có đƣợc giải thuật Thomson với ký hiệu phép tốn r ta thêm vào khơng q hai trạng thái - Mỗi Automat N(r) xây dựng theo giải thuật Thomson có trạng thái đầu trạng thái kết thúc, trạng thái kết thúc không chuyển sang trạng thái khác - Mỗi trạng thái Automat N(r) có trạng thái chuyển theo ký hiệu tập tối đa hai trạng thái chuyển theo ký hiệu rỗng , nói chung Automat xây dựng theo giải thuật Thomson Automat không đơn định - Do lần xây dựng Automat ta thêm vào trạng thái bắt đầu kết thúc mới, Automat xây dựng theo giải thuật Thomson khơng có hai trạng thái trùng 63 Chƣơng Phân tích từ vựng Ví dụ 2.22: Cho r = (a b)*abb Hãy xây dựng NFA đốn nhận biểu thức quy r theo giải thuật Thomson Bước 1: Phân tích r = (a + b)*abb - r = r1 r ; r1 = (a + b)*ab; r2 = b; - r1 = r r4 ; r3 = (a + b)*a; r4 = b; - r3 = r r6 ; r5 = (a + b)*; r6 = a; - r5 = (r7)*; r7 = a + b; - r7 = r r9 ; R8 = a ; r9 = b; Bước 2: Xây dựng - Xây dựng Automat đoán nhận r8= a; r9 = b Start Start a b Hình 2.22 Các automat đốn nhận a, b - Xây dựng Automat đoán nhận r7 = r8 + r9 Start a b Hình 2.23 Automat đốn nhận r7 = a+b 64 Chƣơng Phân tích từ vựng - Xây dựng Automat đoán nhận r5 =(r7)* Start a b Hình 2.24 Automat đoán nhận r5 = (a+b)* Thực tƣơng tự với r6 = a; r3 = r5 r6; r4 = b; r1 = r3 r4; r2 = b; r = r1 r2 Thu đƣợc kết nhƣ hình sau: Start a b a Hình 2.25 Automat đốn nhận r=(a b)*abb 65 b b 10 Chƣơng Phân tích từ vựng CÂU HỎI VÀ BÀI TẬP CHƢƠNG 2.1 - Nêu khái niệm: thẻ từ, trị từ vựng, mẫu từ vựng; cho ví dụ - Nêu phƣơng pháp biểu diễn thẻ từ; cho ví dụ minh họa 2.2 Nêu vị trí, chức năng, nhiệm vụ giai đoạn phân tích từ vựng 2.3 Nêu kỹ thuật đọc chƣơng trình nguồn sử dụng buffer 2.4 Nêu giải thuật nhận biết từ vị automat đơn định DFA Chạy ví dụ minh họa 2.5 Nêu giải thuật nhận biết từ vị automat khơng đơn định NFA Chạy ví dụ minh họa 2.6 Nêu giải thuật nhận biết từ vị automat khơng đơn định NFA Chạy ví dụ minh họa 2.7 Nêu giải thuật biến đổi automat không đơn định NFA automat đơn định DFA đoán nhận ngơn ngữ Cho ví dụ minh họa 2.8 Nêu giải thuật biến đổi automat không đơn định NFA automat đơn định DFA đốn nhận ngơn ngữ Cho ví dụ minh họa 2.9 Nêu giải thuật Thomson để xây dựng automat đốn nhận biểu thức quy Cho ví dụ minh họa 2.10 Hãy xác định trị từ vựng token đoạn chƣơng trình Pascal sau: function max2 (i, j : integer) : integer; { Trả số nguyên lớn số i j } begin If i > j then max2 : = i else max2 : = j; end; 2.11 Hãy xác định trị từ vựng token đoạn chƣơng trình Pascal sau: PROGRAM GPTB2; VAR a,b,c,x1,x2: real; FUNCTION Delta: real; 66 Chƣơng Phân tích từ vựng Begin Delta:= Sqr(b) - 4*a*c; End; PROCEDURE Ptb2; VAR r: real; {r la bien cuc bo} BEGIN BEGIN r := Sqrt (delta); x1 := (-b-r)/(2*a); x2 := (-b+r)/(2*a); END; END; (* than chuong trinh *) BEGIN REPEAT Write(„a=‟); readln(a); UNTIL a0 ; Write(„b=‟); readln(b); Write(„c=‟); readln(c); If (delta < 0) Then Writeln ( „PT vo nghiem‟); If delta = Then Writeln ( „PT co nghiem kep x1 = x2 =‟,x1:1:2); If delta > Then Begin Ptb2; Writeln ( „PT co nghiem: x1=‟,x1:1:2,‟x2=‟,x2:1:2); Writeln ( „x2 = ‟, x2:1:2); End; Readln; END 67 Chƣơng Phân tích từ vựng 2.12 Trong ngơn ngữ lập trình bậc cao Pascal, cho số thẻ từ đƣợc phát biểu lời nhƣ sau: 1) Số nguyên không dấu xâu bắt đầu số, sau khơng, nhiều chữ số 2) Số nguyên xâu bắt đầu phần dấu, sau số nguyên không dấu; phần dấu dấu + dấu - khơng có ký tự 3) Số thực dấu phảy tĩnh xâu bắt đầu phần dấu; sau phần nguyên đến phần thập phân; phần thập phân có, khơng; có phần thập phân hai phần phân cách dấu chấm Phần nguyên phần thập phân số nguyên không dấu 4) Số thực dấu phảy động xâu bắt đầu số nguyên, tiếp đến dấu chấm, sau số nguyên không dấu, phấn mũ Phần mũ bắt đầu ký tự E, tiếp đến số nguyên 5) Các toán tử số học phép toán +, -, *, / , ** 6) Khoảng trắng nhiều ký tự trống dấu tab dấu xuống dòng 7) Tên xâu ký tự, bắt đầu chữ cái; sau khơng, nhiều chữ chữ số Có thể thay chữ chữ số dấu gạch dƣới a) Hãy biểu diễn thẻ từ biểu thức quy thẻ từ, mẫu từ vựng, trị từ vựng từ b) Xây dựng sơ đồ chuyển để nhận biết token 2.13 Cho Automat M: Start q1 0, q2 q3 1 Hình BT 2.13 68 q4 Chƣơng Phân tích từ vựng a) Hãy xác định thành phần automat M Automat thuộc loại nào? sao? b) Sử dụng giải thuật nhận biết từ vị Automat tƣơng ứng với M; Kiểm tra xem M có nhận biết đƣợc từ vị sau khơng? 1) 1010101100$ 2) 110011101$ 3) 000000000$ c) Chỉ ngôn ngữ đoán nhận M 2.14 Cho Automat M Start 0 A B C D Hình bt 2.14 a) Nêu thành phần M b) Dùng giải thuật đoán nhận từ vị tƣơng ứng với automat để đoán nhận từ: + w = 1110011$ + w = 100001110$ + w = 111100000$ c) Chỉ ngơn ngữ đốn nhận M d) Xây dựng DFA đốn nhận ngơn ngữ với Automat M 2.15 Cho Automat M a b Start a a b b a b b b Hình BT 2.15 a) Nêu thành phần M b) Dùng giải thuật đoán nhận từ vị tƣơng ứng với automat để đoán nhận từ: + w = baaaabb$ 69 Chƣơng Phân tích từ vựng + w = aabbbab$ + w = aababbbb$ c) Chỉ ngơn ngữ đốn nhận M d) Xây dựng DFA đốn nhận ngơn ngữ với Automat M 2.16 Cho Automat M Start q0 q1 q2 q3 Hình BT 2.16 a) Hãy xác định thành phần automat M Automat thuộc loại nào? sao? b) Sử dụng giải thuật nhận biết từ vị Automat tƣơng ứng với M; Kiểm tra xem M có nhận biết đƣợc từ vị sau không? 1) 00011111$ 2) 01111110$ 3) 000000001$ c) Chỉ ngơn ngữ đốn nhận M d) Xây dựng DFA đoán nhận ngôn ngữ với Automat M 2.17 Cho Automat M Start q0 q1 q2 q3 Hình BT 2.17 a) Hãy xác định thành phần automat M Automat thuộc loại nào? sao? b) Sử dụng giải thuật nhận biết từ vị Automat tƣơng ứng với M; Kiểm tra xem M có nhận biết đƣợc từ vị sau khơng? 1) 000101001$ 70 Chƣơng Phân tích từ vựng 2) 01010100$ 3) 0000000010$ c) Chỉ ngơn ngữ đốn nhận M d) Xây dựng DFA đoán nhận ngôn ngữ với Automat M 2.18 Cho Automat M a b Start a b b b Hình BT 2.18 a) Nêu thành phần M b) Dùng giải thuật đoán nhận từ vị tƣơng ứng với automat để đoán nhận từ: 1) w = bbbaaa$ 2) w = bbaaab$ c) Chỉ ngơn ngữ đốn nhận M d) Xây dựng DFA đốn nhận ngơn ngữ với Automat M 2.19 Cho Automat M a Start a a b b b Hình BT 2.19 a) Nêu thành phần M b) Dùng giải thuật đoán nhận từ vị tƣơng ứng với automat để đoán nhận từ: + w = aaaaab + w = bbbbab c) Chỉ ngơn ngữ đốn nhận M 71 Chƣơng Phân tích từ vựng d) Xây dựng DFA đốn nhận ngôn ngữ với Automat M 2.20 Cho Automat M Start A 1 B C D Hình BT 2.20 a) Nêu thành phần M b) Dùng giải thuật đoán nhận từ vị tƣơng ứng với automat để đoán nhận từ: + w = 111110 + w = 111111 c) Chỉ ngơn ngữ đốn nhận M d) Xây dựng DFA đốn nhận ngơn ngữ với Automat M 2.21 Cho Automat M a a Start b b a a b Hình BT 2.21 a) Nêu thành phần M b) Dùng giải thuật đoán nhận từ vị tƣơng ứng với automat để đoán nhận từ: + w = bbbaaaa + w = aaaabba c) Chỉ ngôn ngữ đoán nhận M d) Xây dựng DFA đoán nhận ngôn ngữ với Automat M 72 Chƣơng Phân tích từ vựng 2.22 Cho biểu thức quy a) 0(0 + 1)* 0+ * b) ((0+ 1) 0(0 + 1))+ c) (1+ 0)00 (0* + 1+) * d) (a + ba + aab) (ε + a)+ Hãy xây dựng NFAε tƣơng đƣơng với biểu thức 2.23 Cho biểu thức quy sau: * + * a) ( a + b ) * + b) ((ε + a) b ) + * c) (a + b) abb (a + b) * * d) ab + (a + bb) a b 1) Xây dựng NFAε đốn nhận biểu thức quy 2) Hãy chuyển sang DFA tƣơng đƣơng 2.24 Quá trình phân tích từ vựng dựa vào sơ đồ chuyển đƣợc tiến hành theo giải thuật sau: Input: Sơ đồ chuyển token xâu vào w$ Output: phân tích xâu vào có từ vị token? Process: Bƣớc 1: Xuất phát từ trạng thái bắt đầu ký tự khởi đầu token, trỏ trỏ vào ký tự xâu vào w Bƣớc 2: Nếu sơ đồ chuyển nút i cung có nhãn nối với nút j đó: - Nếu ký tự kết thúc (Terminal) ký tự mà trỏ trỏ w trỏ trỏ đến ký tự xâu w trình duyệt chuyển sang nút j - Nếu token trình duyệt chuyển sang duyệt trạng thái bắt đầu sơ đồ chuyển token + Nếu trình duyệt đến đƣợc trạng thái kết thúc biến trình duyệt quay trở lại nút j 73 Chƣơng Phân tích từ vựng + Ngƣợc lại * Nếu nút i cung chọn cung quay lại bƣớc * Nếu xét hết cung khỏi nút i q trình duyệt khơng đến đƣợc trạng thái kết thúc token báo lỗi - Nếu từ nút i đến nút j có cung mang nhãn , trình duyệt chuyển thẳng đến nút j trỏ trỏ vào ký tự xâu vào w đứng yên Bƣớc 3: Nếu trình duyệt duyệt hết xâu vào và: - Nếu trình duyệt đến đƣợc trạng thái kết thúc sơ đồ chuyển token thơng báo thành cơng - Ngƣợc lại thơng báo lỗi Cho sơ đồ chuyển: 1) 0,1,2,3,4,5,6,7,8,9 q0 A,…, Z, a, …, z Start Digit: q1 digit 2) Start Digits: q2 digit q3 3) Start sign: +, - q5 q4 digit sign 4) Digitsign: Start q6 q7 digit q8 digit digit 5) number: Start q +,- , q digit q 10 11 q12 =, - 74 digit q13 Chƣơng Phân tích từ vựng 6) digit digit digit nums: Start q +,- , q digit q 15 16 14 q17 7) Letter: Start q22 digit q18 E q19 A,…,Z, a, …,z +,- , q20 digit q21 q23 letter, digit id: Start q24 letter q25 8) Hình BT 2.24 Và xâu: 1) 123; -23467; 123.56; +123.789; - 001.34256; 123b 2) X1, a23b5; 1b34a; bien12, anpha1 3) 123 01E02; -021E-03; +23 098E+04 a) Sử dụng giải thuật trên, kiểm tra xâu từ vị token token sau: 1) Digits 2) Digitsign 3) Number 4) Nums 5) id b) Hãy tổng hợp sơ đồ để có đƣợc sơ đồ chuyển dùng để nhận biết token: 1) Digits 2) Digitsign 3) Number 4) Nums 5) id c) Sử dụng sơ đồ tổng hợp đƣợc, kiểm tra xâu từ vị token token 75 ... nhị phân = {0, 1} thì: + * = {, 0, 1, 00, 01, 10 , 11 , } + + = {0, 1, 00, 01, 10 , 11 , } + , + , * , {}, {0}, {1} , {, 0, 1} , { 1, 00, 01, 10 }, {0, 1, 00, 01, 10 , 11 , 00 01} , ngôn ngữ bảng... chung Tập đề cương giảng ? ?Chương trình dịch” biên soạn theo chương trình chi tiết mơn học ? ?Chương trình dịch” trường Đại học Sư phạm Kỹ thuật Nam Định Mục tiêu tập đề cương giảng nhằm cung cấp... 218 DANH MỤC HÌNH VẼ Hình 1. 1 Mơ tả việc dịch chƣơng trình sang Assembly 10 Hình 1. 2 Sơ đồ chƣơng trình dịch 11 Hình 1. 3 Mơ hình phân tích - tổng hợp 12 Hình 1. 4 Cây