rèn luyện thêm kỹ năng lập trình.
Bài tập Lý thuyết Ngôn ngữ Hình thức và Automata Trường ĐH Bách Khoa - Khoa CNTT - Người soạn: Hồ Văn Quân 1/5 BÀI TẬP LÝ THUYẾT NNHT&AUTOMATA PHẦN NGÔN NGỮ CHÍNH QUI 1. Tìm các dfa cho các ngôn ngữ sau: L1 = {w ∈ {a, b}*: na(w) mod 2 = 0, nb(w) mod 2 = 1} L2 = {w ∈ {0, 1}*: mỗi chuỗi 00 được theo ngay sau bởi một số 1} L3 = {tập tất cả các danh hiệu của Pascal} Mô tả danh hiệu: bắt đầu bằng một kí tự chữ (a đến z, A đến Z) hoặc dấu gạch dưới (_) sau đó là một chuỗi bất kỳ bao gồm các kí tự chữ, số (0 đến 9) và dấu gạch dưới. L4 = {tập tất cả các số nguyên của Pascal} Mô tả số nguyên: 12, +12, -12 {tập tất cả các số thực của Pascal} Mô tả số thực: 12.5, +12.5, -12.5, 12E3, +12E3, -12E3, 12E-3, +12E+3, -12E+3, +12E3, -12E3, 12E-312.5, +12.5, -12.5, . Có thể có bao nhiêu số 0 đi đầu đều được, ví dụ: 012, 0012, +012, -012, 012.5, . Có thể được viết dưới dạng khoa học như sau: 12E3, 12.5E3, +12.5E3, -12.5E3, 12.5E+3, 12.5E-3, -12.5E-3, . 2. Tìm các dfa cho các tập sau trên Σ = {a, b} bao gồm: L5 = {tất cả các chuỗi có đúng một kí hiệu a} L6 = {tất cả các chuỗi có ít nhất một kí hiệu a} L7 = {tất cả các chuỗi có không nhiều hơn ba kí hiệu a} 3. Một “run” trong một chuỗi là một chuỗi con có chiều dài tối thiểu 2 kí tự, dài nhất có thể và bao gồm toàn các kí tự giống nhau. Chẳng hạn, chuỗi abbbaabba chứa một “run” của b có chiều dài 3, một “run” của a có chiều dài 2 và một “run” của b có chiều dài 2. Tìm các nfa và dfa cho mỗi ngôn ngữ sau trên {a, b}. L9 = {w: w không chứa “run” nào có chiều dài nhỏ hơn 3} L10 = {w: mỗi “run” của a có chiều dài hoặc 2 hoặc 3} L11 = {w: có tối đa hai “run” của a có chiều dài 3} 4. Tìm các dfa cho các tập trên Σ = {0, 1} được định nghĩa như sau: L12 = {kí hiệu trái nhất khác với kí hiệu phải nhất.} L13 = {mỗi chuỗi con bốn kí hiệu có tối đa hai kí hiệu 0. Chẳng hạn, 001110 và 011001 là thuộc ngôn ngữ, còn 10010 thì không.} L14 = {kí hiệu thứ tư từ bên phải khác với kí hiệu trái nhất.} 5. Xây dựng một dfa mà chấp nhận các chuỗi trên {0, 1} nếu và chỉ nếu giá trị của chuỗi, được diễn dịch như là biểu diễn nhị phân của một số nguyên, là bằng 0 trong modulo của 5. Chẳng hạn, 0101 và 1111, biểu diễn tương ứng các số nguyên 5 và 15, là được chấp nhận. 6. Tìm dfa chấp nhận ngôn ngữ sau trên {a, b}: L15 = {vwv: w ∈{a, b}*, v= 2}; 7. Tìm các nfa cho các ngôn ngữ sau: L1 = {vwvR ∈ {a, b}*: |v| = 2} L2 = {ababn: n ≥ 0} ∪ {aban: n ≥ 0} (với điều kiện nfa có không nhiều hơn 5 trạng thái) L3 = {anbm : (n+m) mod 3 = 0} L4 = {w ∈ {a, b}*: na(w) chẵn, nb(w) lẽ} L5 = {w ∈ {0, 1}*: giá trị thập phân của w chia hết cho 6} L6 = {w ∈ {a, b}*: số kí tự a trong chuỗi là một số lẽ} L7 = {ab, abc}* (với điều kiện nfa chỉ có 3 trạng thái) L8 = {an: n ≥ 0} ∪ {bna: n ≥ 1} (với điều kiện nfa chỉ có 4 trạng thái) 8. Biến đổi các nfa sau, được cho dưới dạng đồ thị và/hoặc dạng bảng truyền, thành các dfa tương đương: Bài tập Lý thuyết Ngôn ngữ Hình thức và Automata Trường ĐH Bách Khoa - Khoa CNTT - Người soạn: Hồ Văn Quân 2/5 Dfa M1 Dfa M2 Dfa M3 Dfa M4 a b λ a b λ a b λ a b λ q0 q1 q3 q1 q0 q1, q3 q3 q3 q0 q1 q2 q1 q0 q0, q1 q2 q1 q2 q2, q0 q1 q2 q2 q0 q1 q1, q2 q3 q3 q1 q2 q3 q0 q2 q1 q2 q1 q2 q0, q2 q2 q3 q3 q3 q0, q4 q3 q4 q3 q4 q4 q3 q2, q3 q3 q1, q2 q0 q4 q3, q4 q4 q4 q4 q3 F = {q0} F = {q2} F = {q2} F = {q4} 9. Hãy rút gọn các dfa sau (có thể là dfa mở rộng) được cho dưới dạng đồ thị và/hoặc dạng bảng truyền, thành các dfa tương đương. Dfa M1 Dfa M2 Dfa M3 Dfa M4 a b a b a b a b q0 q1 q4 q0 q1 q2 q0 q1 q2 q0 q1 q3 q1 q4 q2 q1 q2 q3 q1 q2 q3 q1 q2 q4 q2 q4 q3 q2 q2 q3 q2 q1 q4 q2 q0 q3 q3 q3 q3 q5 q4 q3 q4 q0 q3 q1 q4 q4 q4 q5 q4 q5 q3 q4 q3 q0 q4 q2 q3 q5 q4 q6 q5 q5 q5 F = {q3, q4} F = {q3, q4} q6 q7 q6 q6 q1 q7 q7 q7 q7 q6 q4 F = {q1, q4} F = {q5} a λ λ q0 q1 q2 M6 01 0, 11 0, λq0q1q2M7a, b a a λb λ q0 q1 q3 q2q4ba a M8 aaabb b a aa ab b bq0q2q1q5q4 q6q3 b M6 bbab b bb b a aaa a q0 q2 q1 q5q4 q6q3 a M7 b a b b ab ba a baaabA B F D C GE M8 0 1 0,10 0 1 1 0,10,1q0 q1 q2 q3q4q5M5 Bài tập Lý thuyết Ngôn ngữ Hình thức và Automata Trường ĐH Bách Khoa - Khoa CNTT - Người soạn: Hồ Văn Quân 3/5 10. Tìm dfa tối giản cho các ngôn ngữ sau: L1 = {anbm: n ≥ 2, m ≥ 1} L2= {anb: n ≥ 0} U {bna: n ≥ 1}} L3 = {an: n ≥ 0, n ≠ 3} 11. Tìm các BTCQ cho các ngôn ngữ sau: L1 = {w ∈ {a, b}*: số kí tự a trong chuỗi là một số lẽ} L2 = {w ∈ {0, 1}*: chuỗi con 00 xuất hiện tối đa một lần} (Ghi chú : chẳng hạn nếu w có chứa 000 thì xem như chuỗi con 00 xuất hiện đến 2 lần.) L3 = {w ∈ {0, 1}*: w bắt đầu bằng 0 kết thết bằng 1 và không chứa chuỗi con 00} 12. Tìm biểu thức chính qui cho các nfa sau: Nfa M1 Nfa M2 a B a b q0 q1 q1 q0 q1 q2 q1 q2 q1 q1 q3 q2 q1 q2 q1 F = {q2} q3 q2 F = {q3} 13. Xây dựng các nfa và các dfa cho các BTCQ sau: r1 = aa* + aba*b* r2 = ab(a + ab)* (b + aa) r3 = ab*aa + bba*ab r4 = a*b(ab + b)*a* r5 = (ab* + a*b)(a + b*a)* b r6 = (b + a*)(ba* + ab)*(b*a + ab) 14. Cho VPTT-P sau: S → aS|bA a) Xây dựng nfa cho VPTT-P trên. A → bB|a b) Tìm BTCQ biểu thị cho ngôn ngữ được sinh ra bởi văn phạm trên. B → aS|b c) Xây dựng VPTT-T tương đương với VPTT-P trên. 15. Cho hai ngôn ngữ L1 và L2 có hai dfa tương ứng M1 và M2 sau. Tìm dfa cho thương đúng của L1/L2. 16. Cho hai ngôn ngữ có hai dfa tương ứng sau. Tìm dfa giao của hai dfa đã cho. M1: M2: 17. Sử dụng bổ đề bơm để chứng minh các ngôn ngữ sau là không chính qui: L1 = {a2nbl: n ≥ 0, l ≥ n + 2} L2 = {anblck: n = l+1 hoặc l ≠ k + 2} 18. Áp dụng tính đóng của họ NNCQ đối với các phép toán để chứng minh ngôn ngữ sau đây là không chính qui: L1 = {anblct : n, l, t ≥ 0, t ≠ n + l} L2 = {anbl: n + l là hợp số} biết rằng các ngôn ngữ L3 = {anbn: n ≥ 0} và L4 = {an: n là nguyên tố} là không chính qui. M1: a b a b a, b M2:a ba a, ba b b b p0 p1 p2 b b a a q0q2q1 Bài tập Lý thuyết Ngôn ngữ Hình thức và Automata Trường ĐH Bách Khoa - Khoa CNTT - Người soạn: Hồ Văn Quân 4/5 PHẦN NGÔN NGỮ PHI NGỮ CẢNH 19. Tìm các VPPNC cho các ngôn ngữ sau: L1 = {a2n+1bn+2: n ≥ 0} L2 = {w ∈ {a, b}*: na(w) = nb(w) + 1} L3 = {anwwRbn+2: w ∈ {a, b}*} L4 = {w ∈ {a, b}*: na(w) > nb(w)} L5 = {anbm: 2n ≤ m ≤ 3n} 20. Hãy sử dụng phương pháp phân tích cú pháp vét cạn để phân tích các chuỗi w1, w2 sau có được sinh ra bởi văn phạm sau hay không: w1 = aababb, w2 = abababb. S → aSb|SS|aA A → aAa|bAb|a|b. 21. Hãy phân tích cú pháp cho các chuỗi w sau trên các văn phạm G tương ứng. Trình bày dẫn xuất trái nhất nếu chuỗi thuộc văn phạm G1: S → aAS | bBS | λ (1, 2, 3) A → aAA | b (4, 5) B → bBB | a (6, 7) w1 = aababb, w2 = ababb G2: S → aS | bXaS (1, 2) X → aXbX | bXaX | λ (3, 4, 5) w1 = aababb, w2 = baabaa 22. Hãy biến đổi các văn phạm sau sang văn phạm-s tương ứng: G1: S → aSb|aAb G2: S → aSb | aab A → bAa|ba. Dựa vào đặc điểm của văn phạm-s hãy phân tích chuỗi w = aabbaabb có được sinh ra bởi văn phạm G1 trên hay không. 23. Chứng minh văn phạm sau đây là nhập nhằng sau đó hãy xây dựng một văn phạm không nhập nhằng tương đương cho nó: S → aS|AB A → aA|b|λ B → b|bb. 24. Hãy cho một ví dụ về việc loại bỏ luật sinh-rỗng có thể sinh ra luật sinh đơn vị, luật sinh-vô dụng loại 1; việc loại bỏ luật sinh-đơn vị có thể sinh ra luật sinh vô dụng loại 2; việc loại bỏ luật sinh vô dụng loại 1 có thể sinh ra luật sinh vô dụng loại 2. 25. Hãy loại bỏ đồng thời các luật sinh-rỗng, luật sinh-đơn vị, luật sinh-vô dụng của văn phạm sau: S → aABC D → b|bS A → λ E → cEF B → λ F → d|dF. C → AB|D|aE 26. Hãy biến đổi các văn phạm sau sang các văn phạm có dạng chuẩn Greibach tương đương: G1: S → BAbABa G2: S → SAa A → aAb A → SbASa B → bBaAa 27. Sử dụng giải thuật CYK để xác định các chuỗi w1 = abab, w2 = abaa có được sinh ra bởi các văn phạm tương ứng G1, G2 sau đây hay không, nếu có hay đưa ra các dẫn xuất trái nhất cho chúng: G1: S → ABBB G2: S → AB A → BAa A → BBa B → AAab B → BAb 28. Hãy xây dựng các npda cho các ngôn ngữ sau và tìm dãy chuyển hình trạng để chấp nhận các chuỗi được cho tương ứng ở bên cạnh. L1 = {anbmcn+m: n, m ≥ 0} w1 = aabccc L2 = {anbn+mcm: n, m ≥ 1} w2 = abbbcc L3 = {anbm: 2n ≤ m ≤ 3n} w3 = aabbbbb Bài tập Lý thuyết Ngôn ngữ Hình thức và Automata Trường ĐH Bách Khoa - Khoa CNTT - Người soạn: Hồ Văn Quân 5/5 L4 = {w: na(w) = nb(w) + 2} w4 = abaaba L5 = {w: na(w) = 2nb(w)} w5 = abbaaa L6 = {w: 2nb(w) ≤ na(w) ≤ 3nb(w)} w5 = ababaaa 29. Hãy xây dựng các npda cho các văn phạm có dạng chuẩn Greibach sau: G1: S → aSCaS1BaB G2: S → aABB|aAA S1→ aS1BaB A → aBB|a B → b B → bBB|A C → c Xét chuỗi w1 = aaabbc. Hãy chỉ ra dẫn xuất trái nhất cho chuỗi này trong văn phạm G1 đồng thời hãy chỉ ra dãy chuyển hình trạng tương ứng trong npda tương ứng để chấp nhận chuỗi này. 30. Hãy xây dựng npda cho các văn phạm sau và tìm dẫn xuất trái nhất cùng dãy chuyển hình trạng cho các chuỗi w tương ứng: G1: S → aAS | bBS | λ (1, 2, 3) A → aAA | b (4, 5) B → bBB | a (6, 7) w1 = abba, w2 = bbaaab G2: S → aS | bXaS (1, 2) X → aXbX | bXaX | λ (3, 4, 5) w1 = abaab, w2 = baaab 31. Hãy xây dựng các dpda cho các ngôn ngữ sau và tìm các dãy chuyển hình trạng để chấp nhận các chuỗi được cho tương ứng ở bên cạnh. L1 = {anb2n: n ≥ 0} w1 = aabbbb L2 = {w: na(w) = nb(w)} w2 = abbaab L3 = {w: na(w) > nb(w)} w3 = abbaaab 32. Chứng minh văn phạm sau cho ngôn ngữ L = {w: na(w) = nb(w)} không là văn phạm LL: S → aSbbSaSSλ. 33. Tìm các văn phạm LL cho các ngôn ngữ sau (chỉ ra k bằng bao nhiêu) và dựa vào tính chất của họ văn phạm này hãy phân tích các chuỗi được cho tương ứng ở bên cạnh có được sinh ra bởi văn phạm hay không. L1 = {w: na(w) = nb(w)} w1 = abbaab L2 = {w: na(w) > nb(w)} w2 = abbaaba L3 = L(a*ba) ∪ L(abbb*) w3 = abbb 34. Hãy xét xem các ngôn ngữ cho sau đây có PNC hay không. Nếu không hãy sử dụng bổ đề bơm cho NNPNC để chứng minh. L1 = {anbjck: k = jn} L5 = { anbjanbj: n ≥ 0, j ≥ 0} L2 = {anbjck: k > n, k > j} L6 = { anbjakbl: n + j ≤ k + l} L3 = {anbjck: n < j, n ≤ k ≤ j} L7 = { anbjakbl: n ≤ k, j ≤ l} L4 = {w: na(w) < nb(w) < nc(w)} L8 = {anbncj: n ≤ j} 35. Hãy xét xem các ngôn ngữ cho sau đây có PNC tuyến tính hay không. Nếu không hãy sử dụng bổ đề bơm cho NNPNC tuyến tính để chứng minh. L1 = {anbnambm: n, m ≥ 0} L2 = { w: na(w) ≥ nb(w)} L3 = {anbj: j ≤ n ≤ 2j - 1} L4 = L(G) với G được cho như sau: E → T|E + T T → F|T * F F → I|(E) I → a|b|c 36. Cho văn phạm G sau. Hãy phân tích cú pháp cho các chuỗi w1 = (a+b*c)*a và w2 = (a + b)*+c theo phương pháp Earley. G: E → T|E + T F → I|(E) T → F|T * F I → a|b|c . Bài tập Lý thuyết Ngôn ngữ Hình thức và Automata Trường ĐH Bách Khoa - Khoa CNTT - Người soạn: Hồ Văn Quân 1/5 BÀI TẬP LÝ THUYẾT NNHT& ;AUTOMATA. a a q0q2q1 Bài tập Lý thuyết Ngôn ngữ Hình thức và Automata Trường ĐH Bách Khoa - Khoa CNTT - Người soạn: Hồ Văn Quân 4/5 PHẦN NGÔN NGỮ PHI NGỮ CẢNH 19.