Bài giảng Ngôn ngữ hình thức và Ôtômat

68 15 0
Bài giảng Ngôn ngữ hình thức và Ôtômat

Đ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 Ngôn ngữ hình thức và Ôtômat cung cấp cho các bạn những kiến thức về văn phạm và ngôn ngữ, ngôn ngữ chính quy và ôtomat hữu hạn, ngôn ngữ phi ngữ cảnh và ôtomat đẩy, cơ bản về chương trình dịch. Tài liệu phục vụ cho sinh viên chuyên ngành công nghệ thông tin. Mời các bạn tham khảo.

BỘ GIAO THÔNG VẬN TẢI TRƢỜNG ĐẠI HỌC HÀNG HẢI BỘ MÔN: KHOA HỌC MÁ Y TÍ NH KHOA: CÔNG NGHỆ THƠNG TIN BÀI GIẢNG NGƠN NGỮ HÌNH THỨC VÀ ƠTƠMAT TÊN HỌC PHẦN : Ngơn ngữ hình thức Ơtơmat MÃ HỌC PHẦN : 17204 TRÌNH ĐỘ ĐÀO TẠO : ĐẠI HỌC CHÍNH QUY DÙNG CHO SV NGÀNH : CƠNG NGHỆ THƠNG TIN HẢI PHỊNG - 2008 Bài giảng mơn học: Ngơn ngữ hình thức Otomat ĐỀ CƢƠNG CHI TIẾT Tên học phần: Ngơn ngữ hình thức Ôtômat Bộ môn phụ trách giảng dạy: Khoa học Máy tính Mã học phần: 17204 TS tiết 45 Lý thuyết 45 Thực hành/Xemina Tự học Loại học phần: Khoa phụ trách: CNTT Tổng số TC: Bài tập lớn Đồ án môn học Điều kiện tiên quyết: Sinh viên phải học xong mơn học tốn rời rạc Mục tiêu học phần: - Cung cấp kiến thức ngôn ngữ, văn phạm otomat - Cơ chương trình dịch Nội dung chủ yếu Gồm phần: - Văn phạm ngơn ngữ - Ngơn ngữ quy otomat đẩy xuống - Ngôn ngữ phi ngữ cảnh otomat đẩy xuống - Cơ chương trình dịch Nội dung chi tiết học phần: TÊN CHƢƠNG MỤC MỞ ĐẦU Chƣơng I Văn phạm ngôn ngữ 1.1 Bảng chữ cái, từ ngơn ngữ 1.2 Tích ghép, phép chia, phép soi gương 1.3 Các phép tốn ngơn ngữ 1.4 Văn phạm 1.5 Các ví dụ văn phạm Chƣơng II Ngơn ngữ quy otomat hữu hạn 2.1 Nguồn ngôn ngữ sinh nguồn 2.2 Các phép tốn nguồn 2.3 Otomat hữu hạn khơng lối ngơn ngữ đốn nhận otomat hữu hạn không lối 2.4 Sự tương đương nguồn Otomat hữu hạn không lối 2.5 Sự tương đương nguồn văn phạm quy 2.6 Sự tương đương nguồn biểu thức quy 2.7 Bài tập tổng hợp 2.8 Tính đóng lớp ngơn ngữ quy 2.9 Điều kiện cần ngơn ngữ quy 2.10 Điều kiện cần đủ lớp ngơn ngữ quy 2.11 Otomat hữu hạn có lối 2.12 Ngơn ngữ quy TS PHÂN PHỐI SỐ TIẾT LT TH/Xemina BT 05 04 01 16 12 03 KT 01 i Bài giảng môn học: Ngôn ngữ hình thức Otomat TÊN CHƢƠNG MỤC Chƣơng III Ngơn ngữ phi ngữ cảnh otomat đẩy xuống 3.1 Cây phép 3.2 Dạng chuẩn Chomsky 3.3 Cây dẫn xuất tính chất 3.8 Khái niệm Otomat đẩy xuống Chƣơng IV: Cơ chƣơng trình dịch 4.1.Giới thiệu chương trình dịch 4.2.Chương trình dịch 4.2.1 Định nghĩa chương trình dịch 4.2.2 Cấu trúc chương trình dịch 4.2.3 Cấu trúc tĩnh (cấu trúc logic) 4.2.4 Cấu trúc động 4.2.5 Vị trí chương trình dịch hệ thống dịch 4.3.Sự cần thiết nghiên cứu chương trình dịch 4.4 Bộ phân tích cú pháp TS 09 PHÂN PHỐI SỐ TIẾT LT TH/Xemina BT 02 06 KT 01 15 12 02 01 Nhiệm vụ sinh viên : Tham dự buổi thuyết trình giáo viên, tự học, tự làm tập giáo viên giao, tham dự kiểm tra định kỳ cuối kỳ Tài liệu học tập : - Nguyễn Văn Ba, Ngơn ngữ hình thức, Trường Đại học Bách khoa Hà nội, 1997 - Phan Đình Diệu, Lý thuyết otomat thuật toán, Nhà xuất Đại học Trung học Chuyên nghiệp, 1971 - Đỗ Đức Giáo, Đặng Huy Ruận, Ngơn ngữ hình thức, Nhà xuất KHKT, 1991 - Phạm Hồng Nguyên, Giáo trình chương trình dịch, ĐH KHTN HN - Nguyễn Văn Ba, Phân tích cú pháp, ĐH Bách khoa HN Hình thức tiêu chuẩn đánh giá sinh viên: - Hình thức thi cuối kỳ : Thi viết - Sinh viên phải đảm bảo điều kiện theo Quy chế Nhà trường Bộ Thang điểm: Thang điểm chữ A, B, C, D, F Điểm đánh giá học phần: Z = 0,2X + 0,8Y Bài giảng tài liệu thức thống Bộ mơn Khoa học máy tính, Khoa Cơng nghệ thông tin dùng để giảng dạy cho sinh viên Ngày phê duyệt: / /2010 Trƣởng Bộ môn: Thạc sỹ Nguyễn Hữu Tuân ii Bài giảng môn học: Ngôn ngữ hình thức Otomat MỤC LỤC Nội dung Mục lục Chƣơng 1: Văm phạm ngôn ngữ 1 Bảng chữ cái, từ ngơn ngữ Tích ghép, phép chia, phép soi gương Các phép tốn ngơn ngữ Văn phạm Các ví dụ văn phạm Bài tập Chƣơng 2: Ngơn ngữ quy Otomat hữu hạn Nguồn ngôn ngữ sinh nguồn 2 Các phép toán nguồn Otomat hữu hạn khơng lối ngơn ngữ đốn nhận Otomat hữu hạn không lối Sự tương đương nguồn Otomat hữu hạn Sự tương đương nguồn văn phạm quy Sự tương đương nguồn biểu thức quy Bài tập tổng hợp Tính đóng lớp ngơn ngữ quy Điều kiện cần ngơn ngữ quy 10 Điều kiện cần đủ lớp ngơn ngữ quy 11 Otomat hữu hạn có lối 12  - Ngơn ngữ quy Bài tập Chƣơng 3: Ngôn ngữ phi ngữ cảnh Otomat đẩy xuống Cây phép Dạng chuẩn Chomsky 3 Cây dẫn xuất tính chất Khái niệm Otomat đẩy xuống Bài tập Chƣơng 4: Cơ chƣơng trình dịch Giới thiệu chương trình dịch Chương trình dịch Định nghĩa chương trình dịch 2 Cấu trúc chương trình dịch Cấu trúc tĩnh chương trình dịch 4 Cấu trúc động chương trình dịch Vị trí chương trình dịch hệ thống dịch Sự cần thiết phải nghiên cứu chương trình dịch 4 Bộ phân tích cú pháp Bài tập Một số đề thi mẫu Tài liệu tham khảo Trang 1 8 9 10 18 26 30 30 30 31 31 31 31 31 31 32 32 32 32 32 32 33 33 33 33 37 44 50 58 58 60 62 63 64 iii Bài giảng mơn học: Ngơn ngữ hình thức Otomat CHƢƠNG 1: VĂN PHẠM VÀ NGÔN NGỮ Kiến thức bản: Để tiếp thu tốt nội dung chương này, sinh viên cần có số kiến thức liên quan chuỗi, ký hiệu, từ ngôn ngữ tự nhiên tiếng Việt, tiếng Anh; cấu trúc cú pháp chương trình máy tính viết số ngơn ngữ lập trình Pascal, C… 1.1 Bảng chữ cái, từ, ngôn ngữ Các ngơn ngữ lập trình (như Pascal, C, ) lẫn ngơn ngữ tự nhiên (như tiếng Việt, tiếng Anh, ) xem tập hợp câu theo cấu trúc quy định Câu ngơn ngữ, tiếng Việt "An sinh viên giỏi" hay Pascal đoạn chương trình khóa program dấu chấm câu kết thúc chương trình, chuỗi liên tiếp từ, “An”, “giỏi” hay “begin”, “if”, “x2”, “215”, tức chuỗi hữu hạn phần tử chữ sở Ta xem chúng ký hiệu ngôn ngữ Từ nhận xét đó, ta dẫn tới quan niệm hình thức ngơn ngữ sau (theo từ điển): Ngơn ngữ, cách khơng xác hệ thống thích hợp cho việc biểu thị ý nghĩ, kiện hay khái niệm, bao gồm tập ký hiệu quy tắc để vận dụng chúng Định nghĩa cung cấp ý niệm trực quan ngôn ngữ không đủ định nghĩa xác để nghiên cứu ngơn ngữ hình thức Chúng ta bắt đầu xây dựng định nghĩa khái niệm mà ngôn ngữ đặt tảng 1.1.1 Bảng chữ Một dãy hữu hạn vô hạn phần tử, kí hiệu  gọi bảng chữ phần tử a   gọi kí hiệu (một chữ cái) Ví dụ:  = {0,1} : Bảng chữ nhị phân  = {0,1,…,9} : Bảng chữ thập phân 1.1.2 Từ  Một dãy kí hiệu a1, a2,…, an (ai, i=1 n) gọi từ   Ví dụ :  = {0,1} a1 = 0, a2 = 1, a3 = 00, a4 =  ,…  Từ rỗng đựơc kí hiệu , bảng chữ sinh từ rỗng  Tổng số kí hiệu tạo nên từ gọi độ dài từ Ví dụ :  = {a,b,c} a1 = aabb, a2 = ac, | a1| = 4, |a2| = Bài giảng mơn học: Ngơn ngữ hình thức Otomat  Độ dài từ rỗng =  Nếu a từ thuộc bảng chữ ,  bảng chữ chứa bảng chữ  a   Ví dụ :  = {0,1} ,  = {0,1,2,…,9} a1 = 0110   ,     a    Tập hợp tất từ   kể từ rỗng kí hiệu *  Tập hợp tất từ   trừ rỗng kí hiệu + Vậy + = * \ {} 1.1.3 Ngôn ngữ Ngôn ngữ tập hợp câu có cấu trúc qui định Một câu ngơn ngữ dãy (hay xâu) từ có sẵn liệt kê bảng chữ đó, ký hiệu ngơn ngữ Giả sử có bảng chữ   Tập A  * gọi ngơn ngữ sinh  Ví dụ :  = {a,b,c} A = {x  */x bắt đầu kí hiệu a} gọi ngơn ngữ  *  Ngơn ngữ trống kí hiệu   Mọi bảng chữ  sinh   Ngôn ngữ trống ngôn ngữ chứa từ rỗng khác 1.2 Tích ghép, phép chia, phép soi gƣơng 1.2.1 Tích ghép hai xâu  Giả sử có bảng chữ  Các từ  = a1a2a3…an ,  = a1a2…am (   )  Tích ghép   hình thành cách ghép từ  vào sau từ   = . = a1a2a3…ana1a2…am Ví dụ : ={0,1}  = 011,  =1101  = 0111101  Tính chất tích ghép + Tích ghép khơng có tính chất giao hốn    + Tích ghép có tính chất kết hợp () =  () Bài giảng môn học: Ngơn ngữ hình thức Otomat + Tích ghép xâu với xâu rỗng . = . =  Với tích ghép: =.  : Tiếp đầu ngữ  : Tiếp vị ngữ 1.2.2 Chia xâu Giả sử có z = x.y ( x,y,z * ) + Phép chia trái Nếu ta thực ngắt bỏ xâu x khỏi z có nghĩa ta thực phép chia trái xâu z cho x kết xâu y x\Z = y Kí hiệu  Phép chia phải Nếu ta thực ngắt xâu y khỏi xâu z có nghĩa ta thực phép chia phải xâu z cho xâu y kết xâu x Kí hiệu Z Ví dụ : /y = x  = {0,1}, x = 10, y = 11 Z = x.y = 1011 x\Z = 11 Z /y = 10 1.2.3 Phép soi gương  Giả sử có bảng chữ   Từ  = a1a2…am-1am  *  Từ ̃ = amam-1…a2a1 gọi từ soi gương từ  hay gọi từ ngược từ  | ̃ | = | | 1.3 Các phép toán ngôn ngữ 1.3.1 Phép hợp hai ngôn ngữ Giả sử có bảng chữ , A, B, C ngôn ngữ sinh  C = A  B = {x  */x  A x  B} Ví dụ  = {a,b,c} A = {a, b, ab, ac, cb}, B = {aa, bb, cc} Bài giảng mơn học: Ngơn ngữ hình thức Otomat C = A  B = {a, b, ab, ac, cb, aa, bb, cc} + Tính chất  Phép hợp có tính chất giao hốn AB=BA  Có tính chất kết hợp (A  B)  C= A  (B  C) 1.3.2 Phép giao hai ngôn ngữ  Giả sử có bảng chữ , A, B, C ngôn ngữ sinh  C = A  B = {x  * | x  A x  B}  = {a, b} Ví dụ : A = {a, ab, ac, cb}, B = {b, ab, cb, aa, bc} C = A  B = {ab, cb} + Tính chất  Tính kết hợp C  (A  B) = B  (A  C)  Tính giao hốn AB=BA  A = A= 1.3.3 Phép tích ghép hai ngơn ngữ + Giả sử có bảng chữ , A, B, C ngôn ngữ sinh từ  C=A.B={z  *| z=x.y | x  A, y  B} Ví dụ :  = {a, b, c} A = {a, b, ab, ac}, B{c, cb} C = A.B = {ac, bc, abc, acc, acb, bcb, abcb accb} + Tính chất - Khơng có tính chất giao hốn A.B  B.A - Có tính chất kết hợp A.(B.C) = (A.B).C - Có tính chất phân bố (đối với phép hợp) A.(B  C) = (A.B)  (A.C) Bài giảng môn học: Ngôn ngữ hình thức Otomat - Tính chất lũy thừa A.A.A…A = An 1.3.4 Phép hiệu Giả sử có bảng chữ , A, B, C ngôn ngữ sinh  C = A\B = {x  * | x  A, x  B} gọi ngôn ngữ hiệu hai ngôn ngữ A B Ví dụ :  = {a, b, c} A = {a, b, ac, bc, aa}, B = {b, bc, ab, bb} C = B\A = {b, ab, bb} 1.3.5 Phép lấy phần bù Giả sử có bảng chữ , A, B ngôn ngữ sinh  A = CB = { x  */ x B} gọi ngôn ngữ phần bù hay ngôn ngữ bù ngơn ngữ B Ví dụ : Cho B = {a, bc} Khi ngơn ngữ bù ngôn ngữ B : A = {x  * | x  a, x  bc} 1.3.6 Phép chia hai ngơn ngữ  Giả sử có bảng chữ , A, B ngôn ngữ sinh   Tập từ C = {z  *| x  A, y  B, x=y.z} gọi phép chia trái ngôn ngữ A cho ngơn ngữ B kí hiệu B\A  Tập từ C = {z  * | x  A, y  B, x = z.y } gọi phép chia phải ngôn ngữ A cho ngôn ngữ B kí hiệu A/ B Ví dụ :  = {a, b, c} A = {a, bc, abc, aba} , B = {, b, ab, cbc} B\A = { a, bc, abc, aba, c} A/B = {a, bc, abc, aba} 1.3.7 Phép soi gương ngôn ngữ  Giả sử có bảng chữ  ,A, B ngôn ngữ sinh  Bài giảng mơn học: Ngơn ngữ hình thức Otomat  B = Ã = {x ̃  * / x ̃ từ soi gương x  A }  = {0, 1} Ví dụ A = {0, 1, 10, 110} B = Ã ={0, 1, 01, 011} 1.3.8 Phép lặp  Giả sử có bảng chữ , A ngôn ngữ sinh   A* = { }  A  A ….An gọi ngôn ngữ lặp ngơn ngữ A  Tính chất : - (A* )* = A* - {}* = {} - ()* = {}    .  … = {} - ()+ =   .  … =  1.4 Văn phạm Với mục đích sản sinh (hay đốn nhận) ngơn ngữ, văn phạm dùng cách thức hiệu để biểu diễn ngôn ngữ 1.4.1 Định nghĩa văn phạm cấu trúc (Grammar) Theo từ điển, văn phạm, cách khơng xác, tập quy tắc cấu tạo từ quy tắc cách thức liên kết từ lại thành câu Để hiểu rõ khái niệm này, ta xét ví dụ minh họa cấu trúc cú pháp câu đơn ngôn ngữ tiếng Việt "An sinh viên giỏi" thí dụ 1.5 chương Xuất phát từ nút gốc theo dần đến nút lá, ta nhận thấy từ nút “An”, “sinh viên”, “giỏi”, … từ tạo thành câu sản sinh Ta gọi ký hiệu kết thúc chúng khơng cịn phát sinh thêm nút câu hoàn thành Trái lại, nút “câu đơn”, “chủ ngữ”, “danh từ”, … khơng có mặt dạng câu sản sinh, chúng giữ vai trò trung gian việc sinh chuỗi, dùng diễn tả cấu trúc câu Ta gọi ký hiệu chưa kết thúc Quá trình sản sinh câu thực chất diễn tả thông qua cấu trúc cho trình phát sinh chuỗi Các chuỗi phát sinh ký hiệu chưa kết thúc đặc biệt, sau bước thay ký hiệu chưa kết thúc chuỗi thành chuỗi lẫn lộn gồm ký hiệu kết thúc chưa, khơng cịn ký hiệu chưa kết thúc hồn thành Q trình phương thức phát sinh chuỗi văn phạm, định nghĩa hình thức sau: Bài giảng mơn học: Ngơn ngữ hình thức Otomat id1 := id2 + t1 Ðể tối ưu mã, ta thấy việc đổi số nguyên 60 thành số thực 60.0 thực lần vào lúc biên dịch, loại bỏ phép tốn inttoreal Ngồi ra, t3 dùng lần để chuyển giá trị cho id1 nên giảm bớt Có khác biệt lớn khối lượng tối ưu hoá mã trình biên dịch khác thực Trong trình biên dịch gọi "trình biên dịch chuyên tối ưu", phần thời gian đáng kể dành cho giai đoạn Tuy nhiên, có phương pháp tối ưu giúp giảm đáng kể thời gian chạy chương trình nguồn mà khơng làm chậm thời gian dịch nhiều Sinh mã Giai đoạn cuối biên dịch sinh mã đích, thường mã máy mã hợp ngữ Các vị trí vùng nhớ chọn lựa cho biến chương trình sử dụng Sau đó, thị trung gian dịch thành chuỗi thị mã máy Vấn đề định việc gán biến cho ghi Ví dụ 1.11: Sử dụng ghi (chẳng hạn R1, R2) cho việc sinh mã đích sau: MOVF id3, R2 MULF #60.0, R2 MOVF id2, R1 ADDF R2, R1 MOVF R1, id1 Toán hạng thứ thứ hai thị tương ứng mơ tả đốïi tượng nguồn đích Chữ F thị cho biết thị xử lý số chấm động (floating_point) Dấu # để xác định số 60.0 xem số Tóm lại trình thực chương trình biên dịch sau: (1) Phân tích từ vựng (Lexical Analysis) (2) Phân tích cú pháp (Syntatic Analysis) (3) Phân tích ngữ nghĩa (Semantic Analysis) (4) Sinh mã trung gian (Intermediate code generation) (5) Tối ưu mã (Code Optimization) 50 Bài giảng môn học: Ngơn ngữ hình thức Otomat (6) Sinh mã đích (Code generation) (7) Quản lý bảng ký hiệu 51 Bài giảng mơn học: Ngơn ngữ hình thức Otomat Hình 1.8 - Minh họa giai đoạn biên dịch biểu thức 52 Bài giảng môn học: Ngôn ngữ hình thức Otomat 4.2.4 Cấu trúc động (cấu trúc theo thời gian) chƣơng trình dịch Các giai đoạn mà đề cập thực theo trình tự logic trình biên dịch Nhưng thực tế, cài đặt hoạt động nhiều giai đoạn nhóm lại với Thơng thường chúng nhóm thành hai nhóm bản, gọi là: kỳ đầu (Front end) kỳ sau (Back end) Kỳ đầu gồm giai đoạn: phân tích từ vựng, phân tích cú pháp, phân tích ngữ nghĩa sinh mã trung gian Kỳ sau gồm giai đoạn tối ưu mã trung gian sinh mã đích Bằng thiết kế này, ngôn ngữ nguồn, cần quan tâm đến việc sinh mã trung gian mà khơng cần biết mã máy đích Điều làm cho cơng việc đơn giản, khơng phụ thuộc vào máy đích Cịn giai đoạn sau trở nên đơn giản ngơn ngữ trung gian thường gần với mã máy Và cịn thể ưu điểm xây dựng nhiều cặp ngơn ngữ Ví dụ có n ngơn ngữ nguồn, muốn xây dựng chương trình dịch cho n ngơn ngữ sang m ngơn ngữ đích cần n*m chương trình dịch; cịn xây dựng theo kiến trúc front end back end cần n+m chương trình dịch Ngôn ngữ trung gian n ngôn ngữ m ngôn ngữ nguồn đích Ví dụ: Pascal C Java SPARC PowerPC Byte code MIPS 53 Bài giảng mơn học: Ngơn ngữ hình thức Otomat Kỳ đầu (Front end) Kỳ đầu bao gồm giai đoạn phần giai đoạn phụ thuộc nhiều vào ngôn ngữ nguồn độc lập với máy đích Thơng thường, chứa giai đoạn sau: Phân tích từ vựng, Phân tích cú pháp, Phân tích ngữ nghĩa Sinh mã trung gian Một phần cơng việc tối ưu hóa mã thực kỳ đầu Front end bao gồm việc xử lý lỗi xuất giai đoạn Kỳ sau (Back end) Kỳ sau bao gồm số phần trình biên dịch phụ thuộc vào máy đích nói chung phần không phụ thuộc vào ngôn ngữ nguồn mà ngôn ngữ trung gian Trong kỳ sau, gặp số vấn đề tối ưu hoá mã, phát sinh mã đích với việc xử lý lỗi thao tác bảng ký hiệu Thiết kế duyệt lƣợt nhiều lƣợt Cấu trúc động chương trình dịch dịch (hay cấu trúc theo thời gian) cho biết quan hệ phần hoạt động Các giai đoạn chương trình dịch (phân tích từ vựng, phân tích cú pháp, phân tích ngữ nghĩa, tối ưu, sinh mã) hoạt động theo hai cách: hay đồng thời Một số giai đoạn biên dịch thường cài đặt lượt (pass) bao gồm việc đọc file liệu vào, phân tích cho kết file đích Người ta hay nhóm nhiều giai đoạn vào lượt hoạt động giai đoạn đan xen lẫn Ví dụ giai đoạn phân tích từ vựng, phân tích cú pháp, phân tích ngữ nghĩa sinh mã trung gian nhóm lại thành lượt Khi Phân tích cú pháp dịng từ tố sau giai đoạn phân tích dịch trực tiếp thành mã trung gian Ở xem xét hai thiết kế chương trình Phân tích từ vựng Phân tích ngữ nghĩa Thứ thiết kế duyệt lƣợt Trong thiết kế số thành phần chương trình thực đồng thời Bộ phân tích cú pháp đóng vai trị trung tâm, gọi phân tích từ vựng Chương trình nguồn Sinh mã trung gian Tối ưu mã Sinh mã 54 Chương trình đích Bài giảng mơn học: Ngơn ngữ hình thức Otomat cần từ tố gọi phân tích ngữ nghĩa muốn chuyển cho cấu trúc cú pháp phân tích Bộ phân tích ngữ nghĩa lại đưa cấu trúc sang phần sinh mã trung gian để sinh mã ngôn ngữ trung gian đưa vào tối ưu sinh mã Trong cấu trúc duyệt nhiều lượt, thành phần chương trình thực độc lập với Qua phần, kết lưu lại làm đầu vào cho bước Sau Sơ đồ thiết kế duyệt nhiều lƣợt Người ta muốn có số lượt lượt thời Mã nguồn gian đọc ghi tập tin trung gian Ngược lại gom nhiều giai đoạn vào lượt phải trì tồn chương trình nhớ, giai đoạn cần thơng tin theo thứ tự khác với thứ tự tạo Dạng biểu diễn trung Phân tích từ vựng gian chương trình lớn nhiều so với chương trình nguồn chương trình đích, gặp vấn đề nhớ lưu trữ Đối với số giai đoạn, nhóm chúng vào lượt làm nảy sinh Phân tích cú pháp số vấn đề Chẳng hạn ngôn ngữ PL/1, Algol 68 hay Foxpro cho phép biến dùng trước khai báo Chúng ta khơng thể tạo mã đích cho kết cấu khơng biết kiểu biến có mặt Phân tích ngữ nghĩa kết cấu Tương tự phần lớn ngơn ngữ lập trình cho phép dùng lệnh goto với nhãn khai báo sau Chúng ta khơng thể xác định địa đích lệnh nhảy Sinh mã trung gian thấy mã nguồn đoạn mã đích sinh Trong trường hợp này, dùng kỹ thuật điền sau (backpatching): dành chỗ trống cho thông tin thiếu, Tối ưu mã điền vào khoảng có thơng tin Nếu so sánh hai thiết kế thiết kế duyệt nhiều lượt đơn giản mặt logic thực thực hết giai đoạn lại đến Sinh mã đích giai đoạn khác Tuy nhiên chương trình chạy chậm nhiều lần phải truy xuất lại kết giai đoạn trước từ thiết bị lưu trữ ngồi Trong giáo trình nghiên cứu giai đoạn mã đích 55 Bài giảng mơn học: Ngơn ngữ hình thức Otomat chương trình dịch cách riêng rẽ theo thiết kế duyệt lượt Giới thiêụ ngôn ngƣ̃ PL/0 Ngơn ngữ PL/0 ngơn ngữ lập trình nhỏ, câu lệnh tựa ngơn ngữ lập trình Pascal Nó thường sử dụng để minh họa cách xây dựng chương trình dịch Mặc dù đơn giản, ngôn ngữ PL/0 chứa nét điển hình ngơn ngữ bậc cao, đơn giản thích hợp việc tìm hiểu ngơn ngữ lập trình bậc cao Về kiểu liệu PL/0 có kiểu liệu nguyên Về câu lệnh PL/0 chứa hầu hết câu lệnh bản: câu lệnh gán, câu lệnh điều kiện IF, câu lệnh lặp WHILE, tốn tử số học Nó khơng có câu lệnh vào/ra Ngơn ngữ PL/0 Có cấu trúc khối, thể đầy đủ khái niệm định nghĩa chương trình Nó cho phép xây dựng chương trình đệ qui Ví dụ chương trình viết ngôn ngữ PL/0: Const m:=7, n:=82; Procedure Divide; Var x, y, z, q, r; Var w; Procedure Multiply; Begin Var a, b; r := x; q := 0; w := y; Begin while wy while b>0 begin begin q := 2*q; w := w/2; if b=a then z := z+a; if w block block -> { CONST idetifier := number ( , identifier := number )* ; } { VAR identifier ( , identifier ) * ; } { ( PROCEDURE identifier ; block ; ) * } statement statement -> identifier := expression | CALL identifier | BEGIN statement ( ; statement ) * END | IF condition THEN statement | WHILE condition DO statement |ε expression -> fragment ( ( + | - | * | / ) fragment )* fragment -> identifier | number | ( + | - ) fragment | ( expression ) condition -> ODD expression | expression ( = | | < | | >= ) expression Ngôn ngữ PL/0 sử dụng để thực hành minh họa bước xây dựng chương trình dịch hồn chỉnh tài liệu Viê ̣c này sẽ giúp chúng có đươ ̣c sự tim ̀ hiể u cu ̣ thể và sâu sắ c về viê ̣c xây dựng chương triǹ h dich ̣ cho mô ̣t ngôn ngữ hoàn chiń h Nhiệm vụ học chương trình dịch + xây dựng phân tích từ vựng + xây dựng phân tích cú pháp + xây dựng phân tích ngữ nghĩa + xây dựng sinh mã trung gian + xây dựng sinh mã máy ảo + chương trình thơng dịch chạy máy ảo + chương trình quản lý bảng ký hiệu 57 Bài giảng mơn học: Ngơn ngữ hình thức Otomat Chúng ta xây dựng phần việc ngôn ngữ cụ thể ngôn ngữ PL/0 Đọc thêm Các hệ ngơn ngữ lập trình Các chương trình dịch xuất vào năm đầu thập kỷ 50 Khó thời điểm xác kiện có vài nhóm độc lập với nghiên cứu thực công việc Các hệ Trước máy tính thực nhiệm vụ, cần phải lập trình để hoạt động cách đặt thuật tốn, biểu thức ngơn ngữ máy vào nhớ Nguồn gốc việc có q trình lập trình có nhu cầu đa dạng người lập trình mong muốn diễn đạt tất thuật tốn ngơn ngữ máy Phương pháp cần phải cải tiến để nhiệm vụ sẵn sàng cho thiết kế thuật tốn cịn giúp người lập trình tránh hay phát định vị lỗi giúp chữa lại trước công việc hoàn thành Bước nhằm loại bỏ khó khăn từ q trình lập trình vứt bỏ việc dùng số buồn tẻ dễ gây lỗi dùng để biểu diễn mã phép tốn tốn tử có ngơn ngữ máy Chỉ đơn giản cách chọn tên mô tả cho ô nhớ ghi để biểu diễn mã phép tốn, người lập trình tăng nhiều tính đọc chuỗi lệnh Ví dụ, xem thủ tục viết mã máy có nhiệm vụ cộng nội dung ô nhớ 6C 6D lại với đặt kết vào ô 6E Các lệnh thực công việc viết mã 16 sau: 156C 166D 5056 306E C000 Nếu gán tên PRICE (giá tiền) cho vị trí 6C, TAX (thuế) cho 6D TOTAL (tổng số) cho 6E, biểu diễn thủ tục sử dụng kỹ thuật gọi đặt ký hiệu gợi nhớ; LD R5, PRICE LD R6, TAX ADDI ST R0, R5 R6 R0, TOTAL HLT 58 Bài giảng mơn học: Ngơn ngữ hình thức Otomat Đa số công nhận dạng thứ hai dù cịn khó, việc thực cơng việc biểu diễn mục đích ý nghĩa thủ tục tốt nhiều dạng đầu Khi kỹ thuật lần công bố, người lập trình dùng ký hiệu để thiết kế chương trình gốc giấy sau dịch dạng mã máy Việc khơng nhiều thời gian việc chuyển đổi thực tương đối máy móc Hệ việc dùng ký hiệu dẫn đến việc hình thức hóa thành ngơn ngữ lập trình gọi ngơn ngữ Assembly, chương trình gọi Assembler dùng để dịch tự động chương trình khác viết ngơn ngữ Assembly thành ngơn ngữ máy tương ứng Chương trình gọi Assembler (trình dịch hợp ngữ) nhiệm vụ tổng hợp thành lệnh máy cách dịch ký hiệu gợi nhớ tên Ngày Assembler trở thành chương trình tiện ích thơng thường hầu hết máy tính Với hệ thống vậy, người lập trình gõ chương trình dạng ký hiệu gợi nhớ nhờ soạn thảo hệ thống, yêu cầu hệ thống dùng Assembler để dịch chương trình lưu thành tệp mà sau dùng để chạy Như ngôn ngữ Assembly phát triển đầu tiên, chúng xuất bước tiển khổng lồ đường tìm kiếm mơi trường lập trình tốt Trong thực tế, có nhiều nghiên cứu chúng để biểu diễn ngơn ngữ lập trình tồn diện Do đó, ngơn ngữ Assembly coi ngơn ngữ hệ thứ hai, cịn ngơn ngữ hệ thân ngơn ngữ máy Mặc dù ngơn ngữ hệ thứ hai có nhiều ưu điểm so với ngôn ngữ máy, chúng cịn q vắn tắt Ngơn ngữ Assembly ngun tắc giống ngôn ngữ máy tương ứng Sự khác đơn giản chí cú pháp dùng để biểu diễn chúng Sự giống ngôn ngữ assembly ngơn ngữ máy cịn dẫn đến việc ngơn ngữ Assembly phụ thuộc vào loại máy cụ thể Các lệnh dùng chương trình biểu diễn thuộc tính máy Mặt khác, chương trình viết ngôn ngữ assembly không dễ chuyển sang loại máy khác thường phải viết lại cho thích ứng với ghi tập lệnh máy Một nhược điểm ngôn ngữ assembly người lập trình, khơng buộc phải mã lệnh dạng bit, thường bị bắt phải nghĩ đến chi tiết, thành phần nhỏ này, khơng tập trung vào việc tìm giải pháp tốt Tình cảnh giống thiết kể nhà mà phải ý đến xi măng, vôi vữa, gạch ngói, đinh, đá… Tuy q trình thiết kế nhà từ thành phần nhỏ thực được, việc thiết kế đơn giản nhiều suy nghĩ phòng, nền, cửa sổ, mái… 59 Bài giảng mơn học: Ngơn ngữ hình thức Otomat Như nguyên lý thiết kế dựa phần tử nhỏ lên khơng phải ngun lý thích hợp việc thiết kế Quá trình thiết kể tốt dùng nguyên lý mức cao hơn, nguyên lý biểu diễn khái niệm liên quan với thuộc tính sản phẩm Mỗi thiểt kế hoàn tất, thiết kế gốc dịch sang khái niệm mức thấp hơn, liên quan đến việc thực hiện, giống nhà xây dựng cuối chuyển thiết kế giấy sang chi tiết vật liệu xây dựng Theo triết lý này, nhà khoa học máy tính bắt đầu phát triển ngơn ngữ lập trình tốt cho việc viết phần mềm so với ngôn ngữ lập trình bậc thấp assembly Kết ngơn ngữ hệ thứ ba đời, khác với hệ trước chỗ chúng vừa ngôn ngữ mức cao, lại vừa độc lập với máy Nói chung, phương pháp ngơn ngữ lập trình hệ thứ ba nhận biết nguyên lý bậc cao cho việc phát triển phần mềm Mỗi nguyên lý thiết kế cho thực chuỗi ngun lý thấp có ngơn ngữ máy Ví dụ, câu lệnh: assign Total the value Price plus Tax Total: =Price + Tax cho thấy hành động mức cao không cần quan tâm đến việc máy tính cụ thể phải thực Các phát triển gần Nói chung, thuật ngữ ngơn ngữ hệ thứ tư dùng số sản phẩm phần mềm mà có cho phép người dùng tự biến đổi (tùy biến) phần mềm họ mà khơng cần có chun mơn Người lập trình ngôn ngữ thường yêu cầu chọn từ hình dạng câu biểu tượng Những sản phẩm phần mềm bao gồm bảng tính giúp trì bảng liệu dạng ghi kế toán, hệ CSDI giúp trì lấy lại thơng tin, phần mềm đồ họa giúp phát triển đồ họa, đồ thị, ảnh… xử lý văn mạnh cho phép tài liệu kết hợp, xếp lại, đổi dạng Thêm nữa, phần mềm nhiều lại bó lại tạo nên hệ thống tổng thể Với hệ thống vậy, nhà kinh tế kiến trúc nên biến đổi mơ hình kinh tế, phân tích thay đổi ảnh hưởng khác có kinh tế nói chung lĩnh vực kinh doanh cụ thể đó, đưa kết dạng tài liệu viết với hình đồ họa, lược đồ làm phương tiện trợ giúp trực quan Một người quản lý doanh nghiệp nhỏ tùy biến sản phẩm để phát triển hệ thống cho việc trì kho tìm ảnh hưởng mục lưu chuyển thấp đó… Rõ ràng 60 Bài giảng mơn học: Ngơn ngữ hình thức Otomat ta phải viết chương trình làm tất tùy biến chương trình lớn Những hệ thống coi thay cho ngơn ngữ lập trình mơi trường lập trình chúng gần gũi với ứng dụng môi trường mà ngôn ngữ hệ thứ ba cung cấp Ví dụ, thay cho việc mô tả thông tin biểu diễn máy nào, bảng liệu hiển thị hình máy tính làm sao, hệ thống cập nhật thông tin nào, người lập trình dùng phần mềm hệ thứ tư cần mô tả mục liệu xuất bảng tính chúng quan hệ với Do vậy, người dùng tùy biến dùng bảng tính mà không cần quan tâm (hoặc hiểu) chi tiểt liên quan đến kỹ thuật sử dụng Thuật ngữ ngôn ngữ hệ thứ năm dùng cho khái niệm lập trình mơ tả, với việc nhấn mạnh phương pháp đặc biệt biết lập trình logic Tư tưởng thông minh tư tưởng trước Đến ý tư tưởng lập trình khai báo cho phép người dùng máy tính giải tóan mà cần quan tâm đến tốn khơng phải giải Quan điểm thái bạn Tại lại hy vọng giải toán mà khơng cần phải quan tâm đến cách giải Câu trả lời không giải tốn mà để máy tính giải hộ Với phương pháp này, nhiệm vụ đơn khai báo toán, máy tính phải thực nhiệm vụ tìm lời giải cho Từ tư tưởng hệ ngơn ngữ lập trình thứ năm, ta thấy phát triển lên vây, lúc máy tính hiểu trực tiếp ngôn ngữ tự nhiên người Truyền thông người máy Truyền thông người máy ngơn ngữ máy, người phải mơ tả ngơn ngữ tự nhiên người, chi tiết bước lời giải máy tự sinh tồn lời giải 4.2.5 Vị trí chƣơng trình dịch hệ thống dịch Trong thực tế, chương trình dịch thường dùng hệ thống liên hồn nhiều chức năng, tạo mơi trường chương trình dịch hồn chỉnh 4.3 Sự cần thiết phải nghiên cứu chƣơng trình dịch Việc nghiên cứu chương trình dịch giúp chúng ta: 61 Bài giảng môn học: Ngôn ngữ hình thức Otomat - Nắm vững nguyên lý ngơn ngữ lập trình cơng cụ quan trọng nhà tin học, chương trình dịch Trên sở hiểu sâu ngơn ngữ lập trình, nắm điểm mạnh, điểm yếu ngơn ngữ, từ chọn ngơn ngữ phù hợp với đề án - Biết lựa chọn chương trình dịch thích hợp ngơn ngữ lập trình - Hiểu rx lựa chọn chương trình dịch, từ tùy chọn tối ưu cho cơng việc cần thực - Nâng cao trình độ tay nghề, cải thiện kỹ hiểu biết lập trình - Vận dụng có hiệu vào cơng việc cụ thể, tụ xây dựng chương trình dịch theo yêu cầu Dùng kiến thức mơn chương trình dịch vào ứng dụng khác - Áp dụng kiến thức học chương trình dịch vào ngành nghề khác xử lý ngơn ngữ tự nhiên 4.4 Bộ phân tích cú pháp Phân tích cú pháp tách chương trình nguồn thành phần theo văn phạm biểu diễn cấu trúc (gọi phân tích), theo cấu trúc tương đương với Đây bước quan trọng tồn q trình dịch BÀI TẬP Thế chương trình dịch So sánh hệ thống biên dịch thông dịch So sánh thiết kế duyệt lượt nhiều lượt Ưu điểm kiến trúc kỳ trước kỳ sau Tìm hiểu ngơn ngữ HTML từ tố cú pháp 62 Bài giảng môn học: Ngơn ngữ hình thức Otomat MỘT SỐ ĐỀ THI MẪU Đề số Bài 1: Cho bảng chữ ={a,b,c} L1={x*| x chứa từ bc kết thúc lẻ ký hiệu a} a) Xây dựng nguồn sinh ngôn ngữ L1 b) Xây dựng văn phạm tương đương với nguồn Bài 2: Cho bảng chữ ={k,m,n} L2={x*| x chứa từ kmn} a) Xây dựng văn phạm sinh ngôn ngữ L2 b) Xây dựng Otomat hữu hạn đơn định tương đương với nguồn c) Xây dựng văn phạm sinh ngôn ngữ soi gương với ngôn ngữ L2 Đề số Bài 1: Cho bảng chữ ={a,b,c} L1={x*| x bắt đầu lẻ b chứa từ ca} a) Xây dựng nguồn sinh ngôn ngữ L1 b) Xây dựng Otomat đơn định, đầy đủ tương đương với nguồn Bài 2: Cho bảng chữ ={m,n,p} L2={x*| x chứa từ mn} a) Xây dựng văn phạm G sinh ngôn ngữ L2 b) Chuyển văn phạm G dạng chuẩn Chomsky c) Xây dựng dẫn xuất sinh từ =pmnnp từ văn phạm chuẩn Chomsky Đề số Bài 1: Cho bảng chữ ={m,n,p} L1={x*| x chứa ký hiệu n, ký hiệu m,p bất kỳ} a) Xây dựng nguồn sinh ngôn ngữ L1 b) Xây dựng Otomat tương đương với nguồn Bài 2: Cho bảng chữ ={a,b,c} L2={x*| x bắt đầu a có độ dài lẻ} a) Xây dựng nguồn I sinh ngôn ngữ L2 b) Xây dựng Otomat hữu hạn tương đương với nguồn c) Xây dựng nguồn soi gương với nguồn I 63 Bài giảng môn học: Ngơn ngữ hình thức Otomat TÀI LIỆU THAM KHẢO - [1] Nguyễn Văn Ba, Ngơn ngữ hình thức, Trường Đại học Bách khoa Hà nội, 1997 - [2] Phan Đình Diệu, Lý thuyết otomat thuật tốn, Nhà xuất Đại học Trung học Chuyên nghiệp, 1971 - [3] Đỗ Đức Giáo, Đặng Huy Ruận, Ngơn ngữ hình thức, Nhà xuất KHKT, 1991 - [4] Phạm Hồng Nguyên, Giáo trình chương trình dịch, ĐH KHTN HN - [5] Nguyễn Văn Ba, Phân tích cú pháp, ĐH Bách khoa HN 64 ... Bài giảng mơn học: Ngơn ngữ hình thức Otomat Chƣơng NGÔN NGỮ PHI NGỮ CẢNH VÀ OTOMAT ĐẨY XUỐNG 3.1 Cây phép 3.2 Dạng chuẩn Chomsky 3.3 Cây dẫn xuất tính chất 3.3.1 Vấn đề vô hạn ngôn ngữ phi ngữ. .. thành phần quan trọng ngôn ngữ Như biết ngơn ngữ hình thức ngơn ngữ tập câu thỏa mãn văn phạm ngơn ngữ Ví dụ câu = chủ ngữ + vị ngữ vị ngữ = động từ + bổ ngữ v.v Trong ngơn ngữ lập trình, cú pháp... 34 Bài giảng mơn học: Ngơn ngữ hình thức Otomat Định nghĩa: Chương trình dịch chương trình thực việc chuyển đổi chương trình hay đoạn chương trình từ ngôn ngữ (gọi ngôn ngữ nguồn) sang ngôn ngữ

Ngày đăng: 11/05/2021, 00:14

Từ khóa liên quan

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

Tài liệu liên quan