LỜI CẢM ƠN Trước hết, em xin chân thành cảm ơn các thầy cô giáo trong khoa Công nghệ thông tin Trường ĐH Kỹ thuật – Hậu cần CAND đã trang bị những kiến thức cơ bản, cần thiết và quý báu để em thực hiện chuyên đề của mình. Đặc biệt, em xin bày tỏ lòng kính trọng và biết ơn sâu sắc tới thầy Nghiêm Văn Hưng, giáo viên giảng dạy, và thầy Cao Xuân Trường, người đã tận tình hướng dẫn, chỉ bảo và tạo mọi điều kiện thuận lợi giúp em trong quá trình thực hiện chuyên đề. Mặc dù đã rất cố gắng cùng nhận được sự giúp đỡ tận tâm của thầy giáo hướng dẫn, xong do trình độ còn hạn chế, tài liệu chưa được phong phú, và nội dung này khá khó đối với em nên không tránh khỏi những thiếu sót trong quá trình tiếp nhận kiến thức. Em rất mong nhận được sự quan tâm giúp đỡ, chỉ dẫn của thầy cô và sự góp ý từ bạn bè để trong thời gian tới em có thể tiếp tục tìm hiểu và xây dựng chuyên đề một cách hoàn thiện nhất. Em xin chân thành cảm ơn GIỚI THIỆU TỔNG QUAN VỀ CHUYÊN ĐỀ Tên chuyên đề: Nghiên cứu Ngôn ngữ hình thức, Văn phạm phi ngữ cảnh và Automata đẩy xuống Sinh viên thực hiện: Hoàng Văn Thao Lớp: B3D2B Giáo viên hướng dẫn: Thiếu úy Cao Xuân Trường Tính cấp thiết của chuyên đề: Lý thuyết ngôn ngữ hình thức và Automata đóng một vai trò rất quan trọng trong các cơ sở toán học của tin học. Ngôn ngữ hình thức được sử dụng trong việc xây dựng các ngôn ngữ lập trình, lý thuyết về các chương trình dịch. Các ngôn ngữ hình thức tạo thành một công cụ mô tả đối với các mô hình tính toán cả cho dạng thông tin vào ra lẫn kiểu thao tác. Lý thuyết ngôn ngữ hình thức, chính vì thực chất của nó là một lĩnh vực khoa học liên ngành; nhu cầu mô tả hình thức văn phạm được phát sinh trong nhiều ngành khoa học khác nhau từ ngôn ngữ học đến sinh vật học. Do đó những khía cạnh thích hợp của lý thuyết ngôn ngữ hình thức sẽ có tầm quan trọng quyết định trong các giáo trình về Lý thuyết ngôn ngữ hình thức và Automata. Lĩnh vực mà lý thuyết ngôn ngữ hình thức nghiên cứu là những mẫu hình (pattern) có cấu trúc bên trong ngôn ngữ hình thức, và đó là những khía cạnh hoàn toàn mang tính chất có cú pháp. Ngôn ngữ hình thức không còn đơn giản chỉ là để định nghĩa ngôn ngữ tự nhiên, mà nó vượt ra ngoài khỏi phạm vi đó và nó cũng là một cách để thể hiện được những quy tắc có cú pháp của ngôn ngữ tự nhiên. Mục tiêu của chuyên đề: Nghiên cứu tổng quan về văn phạm hình thức và các Automata, là những công cụ sinh ngôn ngữ, đồng thời đề cập đến các tính chất của ngôn ngữ chính quy, ngôn ngữ phi ngữ cảnh. Ngoài ra, cũng giới thiệu sơ lược về Trình biên dịch, một phần quan trọng của học phần Chương trình dịch gắn bó chặt chẽ với Lý thuyết ngôn ngữ hình thức và Automata, trong đó Văn phạm phi ngữ cảnh là cơ sở lý thuyết để xây dựng Bộ phân tích cú pháp, là thành phần quan trọng nhất trong một Trình biên dịch. Đối tượng nghiên cứu: Ngôn ngữ hình thức và lý thuyết Automata. Phạm vi nghiên cứu: Ngôn ngữ phi ngữ cảnh cùng hai phương tiện để xác định chúng là Văn phạm phi ngữ cảnh; Automata đẩy xuống. Phương pháp nghiên cứu: Phương pháp nghiên cứu tài liệu; Phương pháp chuyên gia; Phương pháp thực nghiệm. Nội dung nghiên cứu: Lý thuyết về Ngôn ngữ hình thức, Văn phạm phi ngữ cảnh và Automata đẩy xuống; Các tính chất của Ngôn ngữ hình thức, Văn phạm phi ngữ cảnh và Automata đẩy xuống; Ứng dụng của Ngôn ngữ hình thức và Automata với trình biên dịch. Chuyên đề gồm 5 chương: Chương I: Nhập môn về văn phạm và ngôn ngữ hình thức 1.1 Khái niệm ngôn ngữ 1.2 Văn phạm và ngôn ngữ sinh bởi văn phạm 1.3 Một số tính chất của ngôn ngữ Chương II: Văn phạm phi ngữ cảnh 2.1 Suy dẫn phi ngữ cảnh 2.2 Biến đổi các Văn phạm phi ngữ cảnh Chương III: Automata đẩy xuống 3.1 Automata đẩy xuống không tiền định 3.2 Automata đẩy xuống và Văn phạm phi ngữ cảnh Chương IV: Tổng quan về trình biên dịch 4.1 Ngôn ngữ lập trình 4.2 Trình biên dịch 4.3 Ứng dụng của Văn phạm phi ngữ cảnh và Automata đẩy xuống với trình biên dịch Chương V: Demo một bài toán 5.1 Bài toán và cơ sở lý thuyết 5.2 Demo ví dụ về sự tương đương giữa BTCQ và NFAε Sản phẩm: Báo cáo chuyên đề; Chương trình demo cơ bản. MỤC LỤC LỜINÓIĐẦU 1 CHƯƠNG 1. NHẬP MÔN VỀ VĂN PHẠM VÀ NGÔN NGỮ HÌNH THỨC 3 1.1. Khái niệm ngôn ngữ 3 1.1.1. Các khái niệm cơ bản 3 1.1.2. Các phép toán trên các từ 4 1.1.3. Cácphéptoántrênngônngữ. 6 1.2. Văn phạm và ngôn ngữ sinh bởi văn phạm 9 1.2.1. Định nghĩavănphạm 10 1.2.2. Ngôn ngữ sinh bởivăn phạm 11 1.2.3. Phân loạivăn phạm theo Chomsky 12 1.3. Một số tính chất của ngôn ngữ 14 1.3.1. Một số tính chất của văn phạm và dẫn xuất 14 1.3.2. Tínhđóng của lớpngôn ngữ sinhbởi văn phạm 15 CHƯƠNG 2. VĂN PHẠM PHI NGỮ CẢNH 17 2.1. Suy dẫn phi ngữ cảnh 17 2.1.1. Các thí dụ về văn phạm phi ngữ cảnh 17 2.1.2. Tính chất cơ bản (phân rã các suy dẫn phi ngữ cảnh) 19 2.1.3. Cây suy dẫn 20 2.1.4. Suy dẫn trái, suy dẫn phải và tính nhập nhằng 23 2.2. Biến đổi các văn phạm phi ngữ cảnh 26 2.2.1. Loại bỏ các ký hiệu vô ích 27 2.2.2. Loại bỏ các εsản xuất 31 2.2.3. Loại bỏ các sản xuất đơn 33 2.2.4. Dạng chuẩn Chomsky 35 CHƯƠNG 3. Ô TÔ MÁT ĐẨY XUỐNG 37 3.1. Ô tô mát đẩy xuống không tiền định 37 3.1.1. Khái niệm và định nghĩa 37 3.1.2. Các tính chất cơ bản của ô tô mát đẩy xuống 38 3.1.3. Tương đương giữa hai loại ô tô mát đẩy xuống thừa nhận theo stack rỗng và thừa nhận theo trạng thái cuối 41 3.2. Tương đương giữa ô tô mát đẩy xuống và văn phạm phi ngữ cảnh 44 3.2.1. Từ văn phạm phi ngữ cảnh đến ô tô mát đẩy xuống 44 3.2.2. Từ ô tô mát đẩy xuống đến văn phạm phi ngữ cảnh 46 CHƯƠNG 4. TỔNG QUANVỀTRÌNHBIÊNDỊCH 49 4.1. Ngôn ngữ lập trình 49 4.1.1. Mởđầu 49 4.1.2. Phânloại 49 4.1.3. Cúpháp và ngữ nghĩa 50 4.2. Trình biên dịch 51 4.2.1. Định nghĩa 51 4.2.2. Cácphầncủatrìnhbiêndịch 52 4.3. Ứng dụng của ngôn ngữ hình thức và ôtômat với trình biên dịch 57 4.3.1. Bộtiềnxửlý 58 4.3.2. Trìnhbiêndịchhợpngữ 59 4.3.3. Trìnhbiêndịchhợpngữhaichuyến(twopassassembler) 59 4.3.4. Bộcấtliênkếtsoạnthảo(loaderlinkeditor): 61 CHƯƠNG 5. DEMO MỘT BÀI TOÁN 63 5.1. Cơ sở lý thuyết 63 5.1.1. Bài toán chuyển từ BTCQ sang NFAε 63 5.1.2. Phương hướng giải quyết 63 5.2. Demo ví dụ về sự tương đương giữa BTCQ và NFAε 65 5.2.1. Giao diện ban đầu 65 5.2.2. Giao diện kết quả 66 KẾT LUẬN 69 TÀI LIỆU THAM KHẢO 70
LỜI CẢM ƠN Trước hết, em xin chân thành cảm ơn thầy cô giáo khoa Công nghệ thông tin Trường ĐH Kỹ thuật – Hậu cần CAND trang bị kiến thức bản, cần thiết quý báu để em thực chuyên đề Đặc biệt, em xin bày tỏ lòng kính trọng biết ơn sâu sắc tới thầy Nghiêm Văn Hưng, giáo viên giảng dạy, thầy Cao Xuân Trường, người tận tình hướng dẫn, bảo tạo điều kiện thuận lợi giúp em trình thực chuyên đề Mặc dù cố gắng nhận giúp đỡ tận tâm thầy giáo hướng dẫn, xong trình độ hạn chế, tài liệu chưa phong phú, nội dung khó em nên không tránh khỏi thiếu sót trình tiếp nhận kiến thức Em mong nhận quan tâm giúp đỡ, dẫn thầy cô góp ý từ bạn bè để thời gian tới em tiếp tục tìm hiểu xây dựng chuyên đề cách hoàn thiện Em xin chân thành cảm ơn! GIỚI THIỆU TỔNG QUAN VỀ CHUYÊN ĐỀ Tên chuyên đề: Nghiên cứu Ngôn ngữ hình thức, Văn phạm phi ngữ cảnh Automata đẩy xuống Sinh viên thực hiện: Hoàng Văn Thao Lớp: B3-D2B Giáo viên hướng dẫn: Thiếu úy Cao Xuân Trường Tính cấp thiết chuyên đề: Lý thuyết ngôn ngữ hình thức Automata đóng vai trò quan trọng sở toán học tin học Ngôn ngữ hình thức sử dụng việc xây dựng ngôn ngữ lập trình, lý thuyết chương trình dịch Các ngôn ngữ hình thức tạo thành công cụ mô tả mô hình tính toán cho dạng thông tin vào - lẫn kiểu thao tác Lý thuyết ngôn ngữ hình thức, thực chất lĩnh vực khoa học liên ngành; nhu cầu mô tả hình thức văn phạm phát sinh nhiều ngành khoa học khác từ ngôn ngữ học đến sinh vật học Do khía cạnh thích hợp lý thuyết ngôn ngữ hình thức có tầm quan trọng định giáo trình Lý thuyết ngôn ngữ hình thức Automata Lĩnh vực mà lý thuyết ngôn ngữ hình thức nghiên cứu mẫu hình (pattern) có cấu trúc bên ngôn ngữ hình thức, khía cạnh hoàn toàn mang tính chất có cú pháp Ngôn ngữ hình thức không đơn giản để định nghĩa ngôn ngữ tự nhiên, mà vượt khỏi phạm vi cách để thể quy tắc có cú pháp ngôn ngữ tự nhiên Mục tiêu chuyên đề: Nghiên cứu tổng quan văn phạm hình thức Automata, công cụ sinh ngôn ngữ, đồng thời đề cập đến tính chất ngôn ngữ quy, ngôn ngữ phi ngữ cảnh Ngoài ra, giới thiệu sơ lược Trình biên dịch, phần quan trọng học phần Chương trình dịch gắn bó chặt chẽ với Lý thuyết ngôn ngữ hình thức Automata, Văn phạm phi ngữ cảnh sở lý thuyết để xây dựng Bộ phân tích cú pháp, thành phần quan trọng Trình biên dịch Đối tượng nghiên cứu: Ngôn ngữ hình thức lý thuyết Automata Phạm vi nghiên cứu: Ngôn ngữ phi ngữ cảnh hai phương tiện để xác định chúng Văn phạm phi ngữ cảnh; Automata đẩy xuống Phương pháp nghiên cứu: Phương pháp nghiên cứu tài liệu; Phương pháp chuyên gia; Phương pháp thực nghiệm Nội dung nghiên cứu: Lý thuyết Ngôn ngữ hình thức, Văn phạm phi ngữ cảnh Automata đẩy xuống; Các tính chất Ngôn ngữ hình thức, Văn phạm phi ngữ cảnh Automata đẩy xuống; Ứng dụng Ngôn ngữ hình thức Automata với trình biên dịch Chuyên đề gồm chương: Chương I: Nhập môn văn phạm ngôn ngữ hình thức 1.1 Khái niệm ngôn ngữ 1.2 Văn phạm ngôn ngữ sinh văn phạm 1.3 Một số tính chất ngôn ngữ Chương II: Văn phạm phi ngữ cảnh 2.1 Suy dẫn phi ngữ cảnh 2.2 Biến đổi Văn phạm phi ngữ cảnh Chương III: Automata đẩy xuống 3.1 Automata đẩy xuống không tiền định 3.2 Automata đẩy xuống Văn phạm phi ngữ cảnh Chương IV: Tổng quan trình biên dịch 4.1 Ngôn ngữ lập trình 4.2 Trình biên dịch 4.3 Ứng dụng Văn phạm phi ngữ cảnh Automata đẩy xuống với trình biên dịch Chương V: Demo toán 5.1 Bài toán sở lý thuyết 5.2 Demo ví dụ tương đương BTCQ NFAε Sản phẩm: Báo cáo chuyên đề; Chương trình demo MỤC LỤC MỤC LỤC HÌNH MỤC LỤC BẢNG LỜI NÓI ĐẦU Ngôn ngữ phương tiện để giao tiếp, giao tiếp hiểu giao tiếp người với nhau, giao tiếp người với máy, hay giao tiếp máy với máy Ngôn ngữ để người giao tiếp với gọi ngôn ngữ tự nhiên, chẳng hạn tiếng Anh, tiếng Nga, tiếng Việt… ngôn ngữ tự nhiên Các quy tắc cú pháp ngôn ngữ tự nhiên nói chung phức tạp yêu cầu nghiêm ngặt ngữ nghĩa lại thiếu chặt chẽ, chẳng hạn từ hay câu ta hiểu chúng theo nghĩa khác tùy theo ngữ cảnh cụ thể Con người muốn giao tiếp với máy tính tất nhiên thông qua ngôn ngữ Để có giao tiếp người với máy hay máy với nhau, cần phải có ngôn ngữ với quy tắc cú pháp chặt chẽ so với ngôn ngữ tự nhiên, nói cách khác, với từ hay câu ngữ nghĩa chúng phải mà không phụ thuộc vào ngữ cảnh Những ngôn ngữ gọi ngôn ngữ hình thức Con người muốn máy tính thực công việc, phải viết yêu cầu đưa cho máy ngôn ngữ máy hiểu Việc viết yêu cầu gọi lập trình Ngôn ngữ dùng để lập trình gọi ngôn ngữ lập trình Các ngôn ngữ lập trình ngôn ngữ hình thức Cả ngôn ngữ hình thức lẫn ngôn ngữ tự nhiên xem tập từ, tức xâu hữu hạn phần tử chữ sở Về mặt truyền thống, lý thuyết ngôn ngữ hình thức liên quan đến đặc tả cú pháp ngôn ngữ nhiều đến vấn đề ngữ nghĩa Một đặc tả cú pháp ngôn ngữ có hữu hạn từ, nguyên tắc, cho cách liệt kê từ Điều áp dụng ngôn ngữ có vô hạn từ Nhiệm vụ lý thuyết ngôn ngữ hình thức nghiên cứu cách đặc tả hữu hạn ngôn ngữ vô hạn Lý thuyết ngôn ngữ hình thức ôtômat đóng vai trò quan trọng sở toán học tin học Ngôn ngữ hình thức sử dụng việc xây dựng ngôn ngữ lập trình, lý thuyết chương trình dịch Các ngôn ngữ hình thức tạo thành công cụ mô tả mô hình tính toán cho dạng thông tin vào-ra lẫn kiểu thao tác Lý thuyết ngôn ngữ hình thức, thực chất lĩnh vực khoa học liên ngành; nhu cầu mô tả hình thức văn phạm phát sinh nhiều ngành khoa học khác từ ngôn ngữ học đến sinh vật học Báo cáo nhằm trình bày văn phạm hình thức ôtômat đẩy xuống, công cụ sinh ngôn ngữ, đồng thời đề cập đến tính chất ngôn ngữ quy, ngôn ngữ phi ngữ cảnh, ngôn ngữ đệ quy ngôn ngữ đệ quy đếm Ngoài giới thiệu sơ lược trình biên dịch, phần quan trọng học phần Chương trình dịch/ Chuyên đề gồm phần chính: Lời mở đầu: Giới thiệu chuyên đề Chương I: Nhập môn văn phạm ngôn ngữ hình thức Chương II: Văn phạm phi ngữ cảnh Chương III: Automata đẩy xuống Chương IV: Tổng quan trình biên dịch Chương V: Giới thiệu chương trình Demo Kết luận: Đưa số đánh giá tổng quan kết nghiên cứu, nêu hướng phát triển thời gian tới Tài liệu tham khảo: Đưa tài liệu trích dẫn, tham khảo thực chuyên đề NHẬP MÔN VỀ VĂN PHẠM VÀ NGÔN NGỮ HÌNH THỨC 1.1 Khái niệm ngôn ngữ 1.1.1 Các khái niệm 1.1.1.1 Bảng chữ Theo tài liệu [3], tác giả: Phan Đình Diệu, có viết “Một dãy hữu hạn hay 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).” Từ ta có Định nghĩa I.1 Định nghĩa I.1 Tập Σ khác rỗng gồm hữu hạn hay vô hạn ký hiệu gọi bảng chữ Mỗi phần tử a∈ Σ gọi chữ hay ký hiệu Thí dụ 1.1: Dưới bảng chữ cái: ∑ = {a, b, c, …, x, y, z}, Δ = {α, β, γ, δ, ε, η, ϕ, κ, µ, χ, ν, π, θ, ρ, σ, τ, ω,ξ, ψ}, Г = {0, 1}, W = {if, then, else, a, b, c, d, e, f, +, −, ∗, /, =, ≠} 1.1.1.2 Từ Định nghĩa I.2 Giả sử có bảng chữ Σ = {a1, a2, …, am}, dãy chữ α = ai1 ai2 … ait, với aij ∈ Σ (1 ≤ j ≤ t) gọi từ hay xâu bảng chữ Σ Tổng số vị trí ký hiệu xuất xâu α gọi độ dài từ α ký hiệu | α | Như vậy, từ bảng chữ Σ xâu hữu hạn gồm số lớn hay không chữ Σ, chữ xuất nhiều lần Xâu chữ gọi từ rỗng ký hiệu ε Rõ ràng từ rỗng từ thuộc bảng chữ Hai từ α = a1a2…an β = b1b2… bm gọi nhau, ký hiệu α = β, n = m = bi với i = 1, 2, …, n Nếu α từ bảng chữ Σ, Σ ⊆ Δ α từ bảng *, chữ Δ Tập từ bảng chữ Σ ký hiệu Σ tập từ + + * khác rỗng bảng chữ Σ ký hiệu Σ Như Σ = Σ \ {ε} * + * + Σ = Σ ∪ {ε} Dễ thấy tập Σ Σ vô hạn * Về cấu trúc đại số Σ vị nhóm tự sinh Σ với đơn vị từ + rỗng ε, Σ nửa nhóm tự sinh Σ Có thể chứng minh * + tập Σ Σ vô hạn đếm Thí dụ 1.2: Ta có ε , 0, 01, 101, 1010, 110011 từ bảng chữ Г = {0,1} Các xâu ε, beautiful, happy, holiday từ bảng chữ Σ = {a, b, c, …, z} 1.1.1.3 Ngôn ngữ Định nghĩa I.3 * Cho bảng chữ Σ, mỗt tập L ⊆ Σ gọi ngôn ngữ hình thức (hay ngôn ngữ) bảng chữ Σ Tập rỗng, ký hiệu ∅, ngôn ngữ không gồm từ gọi ngôn ngữ rỗng Vậy ngôn ngữ rỗng ngôn ngữ bảng chữ Chú ý ngôn ngữ rỗng: L = ∅ khác với ngôn ngữ gồm từ rỗng: L = {ε} Thí dụ 1.3: * + • Σ ngôn ngữ gồm tất từ Σ Σ ngôn ngữ gồm tất từ khác từ trống Σ • L = { ε, 0, 1, 01, 10, 00, 11, 011,100} ngôn ngữ bảng chữ Г = {0, 1} • L = {a, b, c, aa, ab, ac, abc} ngôn ngữ bảng chữ Σ = {a, b, c} n n • L1 = {ε, a, b, abb, aab, aaa, bbb, abab}, L2 = {a b | n∈ N} hai ngôn ngữ bảng chữ Σ = {a, b}, L1 ngôn ngữ hữu hạn L2 ngôn ngữ vô hạn Mỗi từ thuộc ngôn ngữ L2 có số chữ a số chữ b với a b không xen kẽ, a nằm phía trái b phía phải từ 1.1.2 Các phép toán từ 1.1.2.1 Phép nhân ghép Theo tài liệu [5], tác giả: Nguyễn Văn Định, có viết “Tích ghép (hay nhân ghép) hai từ α = a1a2…am từ β = b1b2…bn bảng chữ Σ, từ γ = a1a2…amb1b2…bn bảng chữ Σ Kí hiệu phép nhân ghép γ = α.β (hay γ = αβ).” Từ ta có Định nghĩa I.4 Định nghĩa I.4 Tích ghép (hay nhân ghép) hai từ α = a1a2…am từ β = b1b2… bn bảng chữ Σ, từ γ = a1a2…amb1b2…bn bảng chữ Σ Kí hiệu phép nhân ghép γ = α.β (hay γ = αβ) Thí dụ 1.4: Trên bảng chữ W = {if, then, else, a, b, c, d, e, f, +, −, ∗, /, =, ≠}, ta có từ α = if a+b=c then c∗d=e β = else c/d=f, αβ từ: if a+b=c then c∗d=e else c/d=f Cho Σ = {a, b, c}, đó: Từ ω = abcbcb chứa vị trí bcb, a*bcb*cb abc*bcb*, φ = bcb từ ω Từ ω chứa vị trí ký hiệu a, *a*bcbcb Từ ω = 010111001 bảng chữ {0, 1} có độ dài 9, 0101 tiền tố 11001 hậu tố ω 1.1.2.2 Phép lấy từ ngược Theo tài liệu [5], tác giả: Nguyễn Văn Định, có viết “Giả sử có từ khác rỗng ω = a1a2 …am bảng chữ Σ, từ am am-1… a2a1 gọi R ^ từ ngược (hay từ soi gương) từ ω, ký hiệu ω , hay ω R Khi ω = ε ta quy ước ε = ε.” Từ ta có Định nghĩa I.5 Định nghĩa I.5 Giả sử có từ khác rỗng ω = a1a2 …am bảng chữ Σ, từ am am-1… a2 a1 gọi từ ngược (hay từ soi gương) từ ω, ký hiệu R, ^ ω hay ω Khi ω = ε ta quy ước εR = ε Thí dụ 1.5: Cho từ α = 100110 β = aabb bảng chữ {0,1,a,b}, theo định nghĩa ta có: R RR R α = 011001 (α ) = (011001) = 100110 = α R RR R β = bbaa (β ) = (bbaa) = aabb = β Cho từ happy oto bảng chữ ∑ = {a, b, c, …x, y, z}, ta 10 id1 := temp p1 + 65.0 Việc thu giảm thực bước tối ưu mã Bước chuyển số nguyên sang số thực thực thời gian dịch, phép toán intoreal bỏ Xem lại (4-1), ta thấy mã thứ tư id1 := temp p3, với temp p3 dùng có lần gán trị vào id1, ghép mã thứ thứ thành mã thứ (4-2) Còn nhiều trường hợp khác mà trình biên dịch thực tối ưu mã Ở vấn đề nảy sinh thực tối ưu mã thời gian biên dịch làm thời gian dịch tăng lên giai đoạn Tuy nhiên số trường hợp tối ưu mã cho phép thời gian thực thi chương trình đích rút ngắn mà không làm biên dịch lâu 4.2.2.7 Sinh mã đối tượng Giai đoạn cuối trình biên dịch sinh mã đối tượng Mã đối tượng mã máy định vị lại địa mã hợp ngữ Thí dụ 4.5: Ta sử dụng hai ghi 2, để dịch mã trung gian (4-2) sang mã hợp ngữ: movF id2, R1 movF id3, R2 addF R2, R1 (4-3) mulF # 65.0, R1 movF R1, id1 Lưu ý movF, addF, mulF phép tính với số thực Chỉ thị đầu thực chuyển trị từ vị trí nhớ có tên PRICE, thuộc loại token id2 vào ghi R1 Chỉ thị thứ hai thực chuyển trị vị trí nhớ có tên TAX thuộc loại token id3 vào ghi R2 Chỉ thị thứ ba thực phép cộng nội dung hai ghi R1 R2, kết phép toán cất R1 Chỉ thị thứ tư thực phép nhân có trị số thực 65.0 với trị nằm ghi R1 Chỉ thị cuối chuyển nội dung ghi R1 vào vị trí nhớ có tên COST thuộc loại token id1 4.3 Ứng dụng ngôn ngữ hình thức ôtômat với trình biên dịch Các phần trước chương ta có nói chuỗi ký tự nhập vào trình biên dịch văn chương trình nguồn Đúng vậy, song văn lại sản phẩm đầu nhiều tiền xử lý (preprocessor) sản phẩm đầu trình biên dịch lại tiếp tục xử lý trước trở thành mã máy máy tính thật Trong phần ta nói tới mối liên quan 66 4.3.1 Bộ tiền xử lý Bộ tiền xử lý tạo chuỗi nhập vào trình biên dịch Bộ tiền xử lý thực chức sau: Xử lý macro (macro processing) Bộ tiền xử lý cho phép người sử dụng định nghĩa macro Macro hiểu cách viết ngắn gọn cho cấu trúc dài Chêm tập tin (file inclusion) Bộ tiền xử lý “nhét” tập tin vào chương trình văn Chẳng hạn, tiền xử lý ngôn ngữ C “nhét” nội dung tập tin vào thay cho phát biểu # include xử lý tập tin có chứa phát biểu Bộ xử lý hoà hợp (Rational processor) Bộ tiền xử lý loại tạo nên hoà hợp ngôn ngữ cổ điển với cấu trúc điều khiển, cấu trúc liệu đại Chẳng hạn, tiền xử lý giúp cho người sư dụng dùng phát biểu có cấu trúc while, if ngôn ngữ lập trình, mà tự thân ngôn ngữ phát biểu Thực tế phát biểu while, if macro, người sử dụng viết chương trình ngôn ngữ cổ điển có dùng tới hai loại phát biểu có cấu trúc cần biên dịch ngôn ngữ máy tiền xử lý làm việc trước Tất nơi có hai phát biểu while, if thay chuỗi phát biểu mà ngôn ngữ lập trình cổ điển có Mở rộng ngôn ngữ (language extension) Bộ tiền xử lý tăng khả cho ngôn ngữ số macro nội Thí dụ ngôn ngữ Equel ngôn ngữ hỏi đáp với sở liệu nhúng vào ngôn ngữ C Các phát biểu bắt đầu hai dấu # # C tiền xử lý, xử lý, phát biểu truy xuất sở liệu, không liên quan đến C, dịch thành phát biểu gọi thủ tục, gọi trình đặc nhiệm mã máy để thực việc truy xuất sở liệu Bây ta nói kỹ xử lý macro Bộ xử lý thường làm việc với hai loại phát biểu: định nghĩa macro sử dụng macro Định nghĩa macro bao gồm: từ khoá define macro, tên macro Theo sau thân (body) macro Chẳng hạn, \define {} Thông thường xử lý macro cho phép thông số hình thức (formal parameter) định nghĩa, chúng ký hiệu bị thay trị (chuỗi ký tự) sau macro dùng Phát biểu dùng macro bao gồm: tên macro thông số thực (actual parameter), trị thông số hình thức thân macro 67 Thí dụ 4.5: Hệ thóng đánh máy typesetting có phương tiện macro với phát biểu định nghĩa macro sau: \define {} : tên macro : danh sách thông số hình thức : thân macro Macro định nghĩa ve trích dẫn tạp chí ACM sau: \define\JACM #1; #2; #3 {{\S1 J.ACM}{\bf #1}: #2, pp #3} Tên macro \JACM Các thông số hình thức #1, #2, #3 ngăn cách dấu ‘;’ kết thúc dấu ‘.’ Khi dùng macro, người sử dụng viết sau: \JACM 17; 4; 715 – 728 hiểu sau: J.ACM 17: 4, pp 715 – 728 4.3.2 Trình biên dịch hợp ngữ Một số trình biên dịch cho sản phẩm đầu mã hợp ngữ, chuỗi mã hợp ngữ đưa sang trình biên dịch hợp ngữ xử lý tiếp Một số trình biên dịch khác thực công việc assembler, nghĩa dịch mã máy khả định vị (relocatable machine code), mã máy chuyển trực tiếp đến phận “loader/link editor Mã hợp ngữ phiên gợi nhớ mã máy, tên dùng thay cho mã nhị phân tác vụ tên đại diện cho địa vị trí nhớ Chẳng hạn, chuỗi thị mã hợp ngữ phát biểu gán b := a+2 mov a, R1 add #2, R1 (4-4) mov R1, b Ba thị thực việc chuyển nội dung địa a vào ghi R1, sau cộng số với nội dung R1 kết giữ lại ghi R1, cuối chuyển nội dung R1 vào địa b Sau thực ba thị máy thực thực phát biểu gán b:=a+2 Thông thường hợp ngữ có phương tiện macro tiền xử lý macro 4.3.3 Trình biên dịch hợp ngữ hai chuyến (two pass assembler) Trình biên dịch hợp ngữ đơn giản biên dịch hai chuyến liệu nhập vào Chuyến coi lần đọc tập tin nhập trọn vẹn Ở 68 chuyến đầu, toàn danh biểu, đại diện cho vị trí nhớ nhặt ra, cất vào bảng danh biểu Bảng IV.2 Bảng danh biểu Danh biểu Địa tương đối a b Theo bảng bên, ta giả sử địa đánh cho từ (một từ byte) a danh biểu đại diện cho địa bắt đầu byte b thứ Ở chuyến thứ hai, trình biên dịch hợp ngữ rà lại tập tin nhập lần Lần dịch mã gợi nhớ (được đặt tên) tác vụ sang chuỗi mã máy – mã nhị phân phần tên danh biểu đại diện cho vị trí nhớ thay địa tương đối danh biểu bảng danh biểu Thí dụ 4.6: Đoạn thị (4-4) dịch sang mã máy là: 0001 010000000000* 0011 011000000010* (4-5) 0100 010000000100* bit đầu mã tác vụ 0001, 0011, 0100 mã load, add, store Hai bit 01 ba thị mã ghi bit mã thông báo cho biết bit theo sau địa hay toán hạng Hai bit gọi mode địa 00 mode trực tiếp – toán hạng 10 Vì bit thị địa chỉ, ngược lại thị 2, 00000010 toán hạng, nguyên có trị Đầu chuyến thứ hai trình biên dịch hợp ngữ mã máy khả định vị, nghĩa chương trình dạng chứa vào nhớ vị trí L Như địa tương đối bảng danh biểu tính lại, trở thành địa tuyệt đối, cách lấy L cộng với địa tương đối, việc thực cho tất danh biểu bảng danh biểu Quay lại (4-5), ta thấy thị bit sau địa tương đối danh biểu a, b Giả sử L=00001111, địa tuyệt đối a, b 00001111, 00010011 Ba thị (4-5) viết lại dạng mã máy tuyệt đối: 0001010000001111 0011011000000010 (4-6) 0010010000010011 4.3.4 Bộ cất liên kết soạn thảo (loader/link editor) 69 Loader chương trình, thực hai nhiệm vụ sau: cất soạn thảo liên kết Quá trình cất bao gồm lấy mã máy khả định vị tính lại địa thành địa tuyệt đối thí dụ Sau ta đem cất tất thị với địa tuyệt đối danh biểu liệu vào nhớ vị trí tương ứng (4-6) Link editor cho phép ta tạo chương trình từ nhiều tập tin dạng mã máy khả định vị lần biên dịch riêng biệt từ tập tin thư viện, hệ thống cung cấp Sự liên kết tạo điều kiện thuận lợi cho chương trình cần tới chúng thực thi Nếu có số tập tin chương trình khác tham chiếu, chúng tham chiếu (external reference) Trong mã tập tin tham chiếu đến vị trí nhớ tập tin khác Có nghĩa vị trí nhớ chứa liệu khai báo tập tin lại truy xuất tập tin khác Hoặc thủ tục khai báo tập tin lại gọi tập tin khác Hình 4.5 Sơ đồ hoạt động loader Mã khả định vị phải lưu giữ thông tin bảng danh biểu tên thủ tục Vì ta biết toàn chương trình dạng mã khả định vị chứa đâu nhớ nhớ ngoài, toàn 70 bảng danh biểu phải lưu giũ đầy đủ phần chương trình mã khả định vị 71 CHƯƠNG DEMO MỘT BÀI TOÁN 5.1 Cơ sở lý thuyết 5.1.1 Bài toán chuyển từ BTCQ sang NFAε Nếu r BTCQ tồn NFA với ε-dịch chuyển chấp nhận L(r) Tức là, đưa BTCQ, có năm biểu diễn BTCQ Bộ năm là: M=(S, ∑,δ,s0,F) Trong đó: S tập hữu hạn trạng thái, S={s0,s1,….sn} ∑ bảng chữ vào s0 ∈ S trạng thái đầu F ⊆ S tập trạng thái thừa nhận hay trạng thái cuối hàm dịch chuyển δ :S x {∑ ∪ {ε}}→tập S Việc tìm NFAε 5.1.2 Phương hướng giải Chúng ta giả toán theo quy nạp theo số phép toán Xét r phép toán Start S0 r=ε Start S1 r=∅ S0 a St r=a Xét r có I phép toán: r = r1 + r2, r = r1r2 r = r* • Xây dựng NFAε M1 = (S1, Σ1, δ1, s1, {f1}) M2 = (S2, Σ2, δ2, s2, {f2}) cho L(M1) = L(r1) L(M2) = L(r2) 72 • Xây dựng NFAε M sau: + Trường hợp 1: r = r1 + r2 + Trường hợp 2: r = r1r2 + Trường hợp 3: r = r* 73 5.2 Demo ví dụ tương đương BTCQ NFAε 5.2.1 Giao diện ban đầu Sau khởi động, ta vào giao diện làm việc phần mềm Hình 5.1 Giao diện làm việc Demo 74 Tại giao diện này, ta tiến hành nhập BTCQ cần chuyển vào ô textbox Chú ý cần nhập theo thích giao diện Trên giao diện nhập BTCQ: r = 01 * |1 (ký hiệu “|” tương đương với “+”) Hình 5.2 Nhập BTCQ cần chuyển Sau nhập BTCQ, click vào button “Chuyển sang NFAε” để chuyển BTCQ sang NFAε 5.2.2 Giao diện kết Kết chuyển sang NFAε hiển thị dạng bảng trạng thái 75 Hình 5.3 Kết bảng biểu diễn NFAε 76 Bảng trạng thái giao diên kết thể NFAε chuyên BTCQ: r = 01* |1 (hay r = 01* + 1) NFAε biểu diễn hình vẽ hình 5.4 Hình 5.4 Một cách biểu diễn khác NFAε 77 KẾT LUẬN Kết đạt được: Hoàn thành tìm hiểu tổng quan văn phạm hình thức Automata, sâu tìm hiểu văn phạm phi ngữ cảnh Automata đẩy xuống Hoàn thành tìm hiểu giới thiệu sơ lược Trình biên dịch, phần quan trọng học phần Chương trình dịch gắn bó chặt chẽ với Lý thuyết ngôn ngữ hình thức Automata Xây dựng báo cáo chuyên đề hoàn chỉnh, chương trình Demo thể tương đương DFA NFA, dạng toán Automata đẩy xuống Hạn chế: Do chuyên đề rộng, tài liệu phần ít, trình độ hạn chế nên chưa tìm hiểu kỹ lý thuyết ngôn ngữ hình thức Chương trình Demo sơ sài, đơn giản, thể dạng toán số nhiều toán chuyên đề Phương hướng phát triển: Tiếp tục nghiên cứu tìm hiểu ngôn ngữ hình thức lý thuyết Automata, mà chủ yếu văn phạm phi ngữ cảnh Automata đẩy xuống Tìm hiểu thêm ứng dụng ngôn ngữ hình thức Automata trình biên dịch số lĩnh vực khác Xây dựng chương trình Demo giải nhiều toán lĩnh vực nghiên cứu 78 TÀI LIỆU THAM KHẢO Tài liệu: [1] PGs Ts Nguyễn Văn Ba, Lý thuyết ngôn ngữ tính toán(2007), NXB Đại học Quốc gia, Hà Nội [2] ThS Trần Văn Lộc, Bài giảng Automat hữu hạn(2007), Tài liệu ngành CNTT [3] Phan Đình Diệu, Bài giảng Ngôn ngữ hình thức Ôtômat (2008), Đại học Duy Tân, Hải Phòng [4] Nguyễn Thị Trúc Viên, Bài giảng Lý thuyết Ôtômát ngôn ngữ hình thức (2006), Đại học Bách khoa, Tp.HCM [5] Ts Nguyễn Văn Định, Otomat Ngôn ngữ hình thức (2008), Tài liệu ngành CNTT [6] Nguyễn Gia Định, Lý thuyết Ngôn ngữ hình thức Ôtômát (2006), Đại học Khoa học, Đại học Huế [7] PGs Ts Phan Huy Khánh, Giáo trình Ngôn ngữ hình thức Ôtômat(2008), Đại học Đà Nẵng [8] PGs Ts Đoàn Văn Ban, ThS.Nguyễn Hiền Trinh, Giáo trình Ngôn ngữ hình thức Ôtômát (2010), NXB Đại học Thái Nguyên [9] Nguyễn Quốc Thắng – Nguyễn Lâm Tùng, Giáo trình Lý thuyết văn phạm, ngôn ngữ ôtômat(2009), Đại học Thăng long [10] Trần Văn Cảnh, Bài giảng Lý thuyết Ngôn ngữ Automat(2010), Đại học Vinh Website tham khảo: [11] Tailieu.vn [12] Ebook.edu.vn [13] Wordpress.com 79 NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN GV HƯỚNG DẪN SINH VIÊN THỰC HIỆN Thiếu úy Cao Xuân Trường Hoàng Văn Thao 80