Như vậy định nghĩa trên cho một quy tắc viết lại xâu, qua đó ta có thể sản sinh bất cứ xâu nào của ngôn ngữ L = {aibi | i = 0, 1, 2…} Ví dụ 2: Ngôn ngữ L được định nghĩa là tập tất cả cá
Trang 1NGÔN NGỮ VÀ BIỂU DIỄN NGÔN NGỮ
1 Khái niệm chung về ngôn ngữ
Ngôn ngữ là phương tiện giao tiếp Sự giao tiếp ở đây có thể là giữa người với nhau hoặc giữa người và máy, hoặc giữa máy và máy Để xây dựng một ngôn ngữ hình thức cần có một tập hợp hữu hạn khác trống các ký hiệu nào đó gọi là bảng chữ Dãy hữu hạn các phần tử của bảng chữ cái được gọi là một từ hay xâu trên bảng chữ Một tập hợp các từ trên bảng chữ được gọi là ngôn ngữ
1.1 Bảng chữ
Cho V là một tập hợp các ký hiệu nào đó mà ta gọi là bảng chữ Bảng chữ không
nhất thiết hữu hạn, nhưng trong các ứng dụng thực tiễn thì các bảng chữ đều hữu hạn
Ví dụ: - Bảng chữ của ngôn ngữ tiếng Việt gồm 29 kí tự V = {a, b, …, y}
- Để có các xâu nhị phân ta thường dùng bảng chữ gồm 0 và 1, V = {0, 1}
1.2 Xâu
Một xâu là một dãy hữu hạn các ký hiệu xếp liền nhau trên bảng chữ V
Ví dụ: - Một xâu 010001 là một xâu trên bảng chữ V= {0, 1}
- Information là một xâu trên bảng chữ cái V = {a, b, , y}
Độ dài của xâu w ký hiệu bởi |w|, là số các ký tự hợp thành xâu
Ví dụ: Xâu 010001 có độ dài là 6
Xâu rỗng là xâu có độ dài bằng 0, được ký hiệu là
Xâu v được gọi là xâu con của xâu w nếu v được tạo bởi một dãy các ký hiệu kề nhau trong w Ví dụ 00 là một xâu con của 010001 Tiền tố của một xâu là một xâu con nằm ở đầu xâu đó Hậu tố của một xâu là một xâu con nằm ở cuối xâu đó
Ví dụ: Xâu abc có , a, ab, abc là các tiền tố, các hậu tố là , c, bc, abc
Ghép tiếp của hai xâu v và w, ký hiệu bởi vw, là một xâu tạo được bằng cách viết v
rồi viết w tiếp theo sau Ví dụ ghép tiếp của ab và cde là abcde Đơn vị của phép ghép
tiếp là xâu rỗng, vì w = w = w
Ta thường viết v0 = , v1 = v, v2 = vv, nói chung vi = v vi-1 với i > 0
Đảo ngược của một xâu u, ký hiệu uR, là xâu u viết theo thứ tự ngược lại, nghĩa là nếu u = a1a2…an thì uR = anan-1…a1 Đảo ngược của một xâu rỗng R =
1.3 Ngôn ngữ
Ta gọi ngôn ngữ là một tập các xâu trên một bộ chữ V nào đó Chẳng hạn và { } là các ngôn ngữ trên mọi bộ chữ V bất kỳ (lưu ý và { } là khác nhau) Tập tất cả các xâu kể cả xâu rỗng trên một bộ chữ V ký hiệu là V* Ví dụ với V = {0,1} thì V* = { ,
0, 1, 00, 01, 10, 11, 000, 001…}
Tập tất cả các xâu trên bộ chữ V, loại trừ xâu rỗng được ký hiệu là V+
Trang 2Đối với một ngôn ngữ L V*, người ta thường quan tâm đến một số vấn đề sau:
- Với xâu bất kỳ w trong L, làm thế nào để sinh ra w (vấn đề sinh)
- Với một xâu w V* bất kỳ cho trước, một vấn đề đặt ra là xâu w có thuộc ngôn ngữ L cho trước hay không (vấn đề đoán nhận)
Đó là những vấn đề liên quan đến biểu diễn ngôn ngữ
2 Hệ viết lại và vấn đề biểu diễn ngôn ngữ
Như đã định nghĩa, một ngôn ngữ L trên một bộ chữ V là một tập con của tập V* Vậy vấn đề đặt ra là, đối với một ngôn ngữ L làm sao có thể chỉ rõ các xâu thuộc L và đó
là vấn đề biểu diễn ngôn ngữ
Đối với các ngôn ngữ hữu hạn thì để biểu diễn chúng chỉ cần liệt kê tất cả các xâu
Ví dụ: L1 = { }; L2 = {a, ba, aaba, bbbbb}
Tuy nhiên, đối với các ngôn ngữ vô hạn thì ta không thể liệt kê hết, vậy cần phải tìm một cách biểu diễn hữu hạn cho một ngôn ngữ vô hạn Đối với những trường hợp không phức tạp lắm, ta có thể xác định các xâu của ngôn ngữ bằng cách chỉ rõ một đặc điểm cốt yếu của mỗi xâu đó
Ví dụ: L3 = {ai | i là số nguyên tố}
L4 = {aibj | i j 0}
L5 = {w {ab}* | số a trong w = số b trong w}
Người ta thường biểu diễn ngôn ngữ nhờ một văn phạm hay nhờ một ôtômat Văn phạm là cơ chế cho phép sản sinh ra mọi xâu của ngôn ngữ, còn ôtômat lại là một cơ chế cho phép đoán nhận một xâu bất kỳ có thuộc ngôn ngữ hay không
Ví dụ 1: Cho L là một ngôn ngữ trên bộ chữ {a, b}, định nghĩa như sau:
1) L
2) Nếu X L, thì aXbL,
3) Không còn xâu nào khác thuộc L
Ban đầu ta có xâu Xem đó là X ta lại có a b tức là xâu ab, tiếp tục (do 2) ta lại
có aabb, aaabbb… tiếp tục như vậy ta thu được các xâu của L Như vậy định nghĩa trên cho một quy tắc viết lại xâu, qua đó ta có thể sản sinh bất cứ xâu nào của ngôn ngữ L = {aibi | i = 0, 1, 2…}
Ví dụ 2: Ngôn ngữ L được định nghĩa là tập tất cả các xâu có thể thu về xâu rỗng bằng một dãy phép thay thế các xâu con ab bởi (định nghĩa này cho ta một cách đoán nhận một xâu có thuộc ngôn ngữ hay không) Chẳng hạn đây là một quá trình đoán nhận trong
đó xâu thay thế được gạch dưới:
aabbab
abab
ab
Trang 3Vậy xâu aabbab là thuộc ngôn ngữ L
Định nghĩa hệ viết lại: Một hệ viết lại là một bộ đôi W = (V, P), trong đó V là một bộ chữ
và P là một tập hữu hạn các cặp xâu trên V Một phần tử (v, w) của P được gọi là một quy
tắc viết lại hay một sản xuất và thường viết là vw
Ta nói xâu x trên V suy dẫn trực tiếp xâu y, và viết là xWy hoặc viết gọn là
xy khi hệ W đã rõ, khi và chỉ khi tồn tại các xâu x 1 , v, x 2 và w sao cho x = x 1 vx 2 , y =
x 1 wx 2 và vw là một sản xuất trong P Nói cách khác đó là sự áp dụng sản xuất vw
lên xâu x để thu được xâu y, bằng cách thay thế xâu con v của x bởi xâu w
Ta nói xâu x suy dẫn xâu y, và viết là *
W
x y, hoặc viết gọn là *
x ykhi hệ W
đã rõ, khi và chỉ khi tồn tại một dãy các xâu trên V x0, x1, …, xk với k0 sao cho x0 = x,
xk = y và xi suy dẫn trực tiếp xi+1 với 0 i k 1 Dãy trên được gọi là một suy dẫn của xâu y từ xâu x trong W Số k được gọi là độ dài của suy dẫn
3 Văn phạm
Văn phạm có thể được hình dung như một “thiết bị tự động” có khả năng sinh ra một tập hợp các từ trên một bảng chữ cho trước Việc xác định một ngôn ngữ trên bảng chữ cái cho trước có thể được thực hiện bằng một trong các cách thức sau:
Cách 1: Đối với mỗi xâu thuộc ngôn ngữ đã cho ta có thể chọn một quy cách hoạt động của “thiết bị tự động” để sau một số hữu hạn bước làm việc nó dừng và sinh ra chính xâu đó
Cách 2: “Thiết bị tự động” có khả năng lần lượt sinh ra tất cả các xâu trong ngôn ngữ đã cho
Cách 3: Với 1 xâu w cho trước, “thiết bị tự động” có thể cho biết xâu đó có thuộc
ngôn ngữ đã cho hay không
Trong lý thuyết văn phạm người ta đã chứng minh được ba cách trên là tương đương nhau Vì vậy, ở đây cách thứ nhất là ta xét văn phạm như một “thiết bị tự động” sinh ra các từ, người ta còn gọi các “thiết bị tự động đó” là văn phạm sinh
Định nghĩa: Một văn phạm sản sinh là một hệ thống G = (,, P, S) trong đó:
1 là tập hữu hạn các ký hiệu, gọi là ký hiệu kết thúc (còn gọi là ký hiệu cuối)
2 là hữu hạn các ký hiệu, gọi là ký hiệu không kết thúc (còn gọi là ký hiệu trung gian hay biến),
3 S gọi là ký hiệu đầu
Trang 4Như vậy, mỗi văn phạm sản sinh G tạo thành một hệ viết lại W = (V, P) với tiên
đề {S}, trong đó được thiết lập các quan hệ và *(suy dẫn trực tiếp và suy dẫn) Từ
đó ngôn ngữ sản sinh bởi G được định nghĩa là:
L(G) = {w | w*và S*w}
Định nghĩa: Một văn phạm đoán nhận là một hệ thống G = (,, P, S) trong đó
∑, ∆, S được cho như trên, còn P là hữu hạn các cặp ( , ) với *
V
và V* V* Như vậy một văn phạm đoán nhận G cũng tạo thành một hệ viết lại W = (V, P) với tiên đề {S}, trong đó có các quan hệ và *đó là ngôn ngữ đoán nhận bởi G được định nghĩa là:
L(G) = {w | w*và w *S}
Trong cả hai trường hợp sản sinh hay đoán nhận, ngôn ngữ được gọi chung là ngôn ngữ xác định bởi G Hai văn phạm G1 và G2 (sản sinh hay đoán nhận) là tương đương khi và chỉ khi L(G1) = L(G2)
Ví dụ:
Ví dụ 1(ở trên) Cho L là một ngôn ngữ trên bộ chữ {a, b}, định nghĩa như sau: 1) L
2) Nếu X L, thì aXbL,
3) Không còn xâu nào khác thuộc L
Ngôn ngữ này được sản sinh bởi văn phạm:
G1=({a,b}, {X}, {X, X→ aXb}, X) và được đoán nhận bởi văn phạm:
G2=({a,b}, {X}, { → X, aXb → X}, X)
Đối với ngôn ngữ trên thì hai văn phạm sản sinh và đoán nhận ngôn ngữ đều có chung các thành phần ∑, ∆, S và điều khác biệtlà ở các sản xuất: Nếu là sản xuất thuộc văn phạm này, thì thuộc văn phạm kia Hai văn phạm như vậy (một sản
sinh và một đoán nhận) được gọi là các văn phạm đối ngẫu
Định lý: Nếu G=(∑, ∆, P, S) là văn phạm (sản sinh hay đoán nhận) và G’=(∑, ∆,
P’, S) là văn phạm đối ngẫu với nó thì L(G) = L(G’)
- Đúng với k=1, theo định nghĩa G và G’ ta có: a0G a1 khi và chỉ khi a1G' a0
- Giả sử đúng với k, k1 Bởi sự đối ngẫu ta lại có a k G a k1 khi và chỉ khi
1 '
a a Vậy ta có
Trang 50 G 1 G G k G k 1
a a a a khi và chỉ khi a k1G' a k G' a0
Vậy đúng với k+1, kết hợp với sự suy dẫn ra chính nó, ta có:
*w
Ta thấy rằng, khi cho một văn phạm G, bao giờ cũng có văn phạm đối ngẫu với nó
và cả hai cùng xác định một ngôn ngữ chung Sau này ta chỉ cần đề cập đến một trong hai văn phạm đối ngẫu đó, quy ước rằng khi nói văn phạm thì ta hiểu đó là văn phạm sản sinh
Bài tập:
1 Cho A = {0, 1, 2} và R = {(0, 1), (1, 2)} Tìm R* và R+
2 Hãy cho biết các thứ tự cho phép liệt kê các phần tử của các ngôn ngữ sau:
a) {a,b}*b) {a}* {b}*{c}*c) {w | w {a, b}* và trong w số các a bằng số các b}
Trang 63 Một xâu hình tháp có thể định nghĩa là một xâu đọc ngược hay xuôi đều như nhau, hoặc cũng có thể định nghĩa như sau:
1) là xâu hình tháp
2) Nếu a là một ký hiệu bất kỳ, thì xâu a là xâu hình tháp
3) Nếu a là một ký hiệu bất kỳ và X là một xâu hình tháp, thì aXa là một xâu hình tháp
4) Không còn xâu hình tháp nào ngoài các xâu cho bởi (1) đến (3)
Hãy chứng minh quy nạp rằng hai cách định nghĩa là tương đương
ÔTÔMÁT HỮU HẠN VÀ BIỂU THỨC CHÍNH QUY
1 Ôtômát hữu hạn
Ngoài các văn phạm, ta còn sử dụng một phương tiện khác để xác định ngôn ngữ
là ôtômát Ôtômát là là một loại “máy trừu tượng”, gọi là ôtômát hữu hạn, chúng là các công cụ đoán nhận một lớp các ngôn ngữ khá đơn giản gọi là các ngôn ngữ chính quy
1.1 Ôtômát hữu hạn đơn định
Một cách trực quan, ta có thể quan niệm ôtômát hữu hạn như một “máy” đoán nhận xâu, mà các bộ phận và cung cách làm việc của nó như sau:
- Có một băng vào, dùng để ghi xâu vào (xâu cần được đoán nhận); mỗi ký hiệu của xâu vào (thuộc một bộ chữ ∑ ) được ghi trên một ô của băng vào
- Có một đầu đọc, ở mỗi thời điểm quan sát một ô trên băng vào
- Có một bộ điều khiển Q gồm một số hữu hạn trạng thái; ở mỗi thời điểm nó có một trạng thái (hình sau)
q
Trang 7- Ta nói ôtômát đoán nhận (hay thừa nhận) một xâu v *nếu ôtômát xuất phát từ trạng thái đầu q0, với đầu đọc trỏ vào ký hiệu bên trái nhất của v, sau một số hữu hạn bước làm việc, nó đọc xong xâu v (tức là đầu đọc vượt khỏi nút phải của v) vào một trong các trạng thái cuối
- Tập hợp mọi xâu được đoán nhận bởi ôtômát hợp thành ngôn ngữ được đoán nhận bởi ôtômát đó
Ví dụ: Xét ôtômát hữu hạn đơn định M, trong đó:
∑ = {0, 1}, Q = {q0, q1, q2, q3 }, F = {q0 } Hàm ∂ cho bởi ma trận sau:
- Mỗi nút tương ứng với một trạng thái,
- Nút đầu trỏ bởi mũi tên với chữ “đầu”,
- Nút cuối được ký hiệu bởi 2 vòng:
- Nếu ∂(q, a) = p thì có một cung đi từ nút q đến nút p, và cung đó mang nhãn a Biểu đồ chuyển cho ôtômát hữu hạn trên:
Cho xâu vào 110101 Quá trình đoán nhận xâu vào đó được diễn tả bằng các bước chuyển như sau:
Trang 8Định nghĩa: Một ôtômát hữu hạn đơn định (viết tắt là ÔHĐ) là một hệ thống
Ngôn ngữ được đoán nhận bởi ÔHĐ M = (, , ,Q q F0, ) nếu ∂ (q0, w) = p với
pF Ngôn ngữ được chấp nhận bởi M, ký hiệu là L(M) là tập hợp:
Vậy xâu 110101 được đoán nhận bởi M hay 110101 L(M)
Ví dụ: Cho ÔHĐ M với ∑ = {a, b}, Q = {q0, q1, q2, q3}, F = {q2} Hàm chuyển được cho như sau:
Trang 91.2 Ôtômát hữu hạn không đơn định
1.2.1 Định nghĩa:
Với ôtômát hữu hạn không đơn định có thể mở rộng từ mô hình ÔHĐ với khả năng có không, một hoặc nhiều hơn một phép chuyển từ một trạng thái trên cùng một ký hiệu vào (tức là có thể chứa các sản xuất có cùng vế trái)
Định nghĩa: Ta gọi ôtômát hữu hạn không đơn định, viết tắt là ÔHK, là một hệ
Ngôn ngữ đoán nhận bởi M là: L(M)= {w | w∑* và ∂ (q0, w)F} (điều khác biệt
ở đây so với ÔHĐ là quá trình đoán nhận xâu vào là không đơn định)
Ví dụ: Xét ÔHK M = ({0,1}, {q0, q1, q2, q3, q4}, ∂, q0, {q2, q4}) Với hàm chuyển ∂ cho như sau:
Đây chỉ là một quá trình đoán nhận trong nhiều quá trình có thể khác Nếu xét tất
cả các quá trình, ta có một cây như sau:
q001001 q01001 q0001 q001 q01 q0
q31001 q1001 q301 q31 q1
q41q4Vậy, xâu 01001 đã được đoán nhận bởi M, vì trong tất cả các quá trình đoán nhận
Trang 101.2.2 Sự tương đương giữa ÔHĐ và ÔHK
Ta sẽ thấy rằng sự mở rộng ÔHĐ thành ÔHK không tăng thêm khả năng đoán nhận ngôn ngữ Theo định nghĩa, mỗi ÔHĐ cũng là một ÔHK, và với L(ÔHĐ) và
L(ÔHK) lần lượt trỏ vào lớp các ngôn ngữ đoán nhận được bởi ÔHĐ và bởi các ÔHK cho nên ta có:
L(ÔHĐ) L(ÔHK)
Xét chiều ngược lại với định lý sau (đã được chứng minh):
Định lý: Nếu L là một ngôn ngữ được đoán nhận bởi một ÔHK, thì cũng có một ÔHĐ
đoán nhận L Nói cách khác: L(ÔHK) L(ÔHĐ)
Và qua đó ta chứng minh được L(M) = L(M’) với M là ÔHK và M’ là ÔHĐ Vậy, ta có hệ quả sau: L(ÔHĐ) = L(ÔHK)
Giả sử M = (∑, Q, ∂, q0, F) là ÔHK đoán nhận L, thành lập ÔHĐ M’=(∑, Q’, ∂’,
q0’, F’) trong đó:
Q’ = 2Q; F’ là tập mọi trạng thái trong Q’ có chứa một trạng thái cuối nào đó của
M Mỗi phần tử trong Q’ được ký hiệu bởi [q1, q2,…, qn], với q1, q2, , qn Q Trạng thái đầu q0’ = [q0] Hàm chuyển của M được thành lập theo công thức:
lớp các ngôn ngữ chính quy (viết tắt là lớp NNCQ)
Ví dụ: Cho M = ({0,1}, {q0, q1}, ∂, q0, {q1}) là một ÔHK trong đó:
∂(q0, 0) = {q0, q1}; ∂(q0, 1) = {q1}; ∂(q1, 0) = ; ∂(q1, 1) = {q0, q1}
Ta có thể lập ÔHĐ M’ = ({0, 1}, Q’, ∂’, [q0], F’) thừa nhận L(M) như sau: Q’ gồm mọi tập con của {q0, q1}, ký hiệu các phần tử của Q’ bởi , [q0], [q1], [q0, q1] F’ = {[q0], [q0, q1]}
= {q0, q1} Tập trạng thái cuối của M’ là F’ = {[q1], [q0, q1]} Các biểu đồ chuyển của M
và M’ được cho dưới đây:
Trang 11ngôn ngữ sơ cấp
Ví dụ: Cho hai ngôn ngữ L1 = {a, b, c} và L2 = {a, bc} trên bảng ∑ = {a, b, c}
- Tìm L1 L2 = {a, b, c } {a, bc} = {a, b, c, bc}
- Tìm L1L2 = {a, b, c} {a, bc} = {aa, abc, ba, bbc, ca, cbc}
- Tìm L2+ = {a, bc} {a, bc} {a, bc} {a, bc} {a, bc} {a, bc}…
= {a, bc} {aa, abc, bca, bcbc}{aaa, aabc, abca, abcbc, bcaa, bcabc, bcbca, bcbcbc)…
- Còn với L* = L+ { }
Định nghĩa:
a) Các ngôn ngữ sơ cấp trên ∑ được gọi là ngôn ngữ chính quy (NNCQ) trên ∑
b) Nếu E và F là hai ngôn ngữ chính quy trên ∑ thì EF, EF và E+ cũng là ngôn ngữ chính quy trên ∑
Trang 12c) Không có ngôn ngữ chính quy nào khác trên ∑ ngoài các ngôn ngữ chính quy được định nghĩa trong hai bước a) và b) trên
Thông thường, để diễn đạt các ngôn ngữ chính quy người ta đưa vào biểu thức chính quy
2.2 Các tính chất đóng của lớp các NNCQ
Lớp các ngôn ngữ đoán nhận bởi các ÔHĐ và lớp các ngôn ngữ được đoán nhận bởi các ÔHK, gọi đó là lớp các ngôn ngữ chính quy
Định nghĩa: Một ÔHĐ là không xuất phát lại nếu không tồn tại cặp (q, a) để cho
∂(q, a) = q0 với q0 là trạng thái đầu
Bổ đề: Có giải thuật cho phép biến đổi một ÔHĐ M đã cho thành ÔHĐ không
xuất phát lại M’ sao cho L(M’) = L(M)
Chứng minh: Từ bổ đề trên ta có thể giả thiết rằng, L và L’ được đoán nhận bởi
hai ÔHĐ không xuất phát lại
M = (∑, Q, ∂, q0, F) và M’ = (∑, Q’, ∂’, q0’, F’) Giả sử thêm QQ’=(nếu không chỉ việc thay đổi các ký hiệu trỏ các trạng thái) Lập ÔHK M” = (∑, Q”, ∂”, q0”, F”) như sau:
Trang 13Định lý 2 Nếu L ∑* là một NNCQ, thì ∑* - L cũng là NNCQ
Định lý 3 Nếu L và L’ là các NNCQ, thì LL’ cũng là NNCQ
Định lý 4 Nếu L và L’ là các NNCQ thì LL’ cũng là NNCQ
(Chứng minh các định lý trên xem trong tài liệu)
Ví dụ: Cho một ÔHĐ M=({0,1}, {q0, q1}, ∂, q0, {q1}) với hàm chuyển được biểu diễn như sau:
Biến đổi ÔHĐ M trên thành ÔHĐ M’= ({0, 1}, {q0, q1}{q2}, ∂’, q0, F’} không xuất phát lại, trong đó:
∂’(q0,0) = q2; ∂’(q0, 1) = q1; ∂’(q1, 0) = q1; ∂’(q1, 1) = q2; ∂’(q2, 0) = q2; ∂’(q2, 1) = q1 F’ = {q1} Vậy sơ đồ hàm chuyển của M’ như sau:
3) Với mỗi a Σ thì a là một biểu thức chính quy, và chỉ định tập {a}
4) Nếu r và s là các biểu thức chính quy, lần lượt chỉ định các tập R và S, thì (r+s), (rs) và (r*) là các biểu thức chính quy và lần lượt chỉ định các tập RS, RS và R*
Trong khi viết BTCQ ta có thể bỏ bớt các dấu ngoặc đơn với lưu ý thứ tự ưu tiên của các phép toán là (theo mức giảm dần): *, ghép tiếp rồi đến hợp(+) Ví dụ: ((0(1*))+0)
có thể viết thành 01*+0 Ta cũng thường viết tắt biểu thức rr* hay r*r thành r+ Tập hợp được chỉ định bởi một BTCQ r được ký hiệu bởi L(r)
Trang 14Ví dụ: Một số BTCQ ký hiệu cho các ngôn ngữ
Định lý: Một ngôn ngữ L được chỉ định bởi một BTCQ khi và chỉ khi nó được đoán
nhận bởi một ôtômát hữu hạn
Nói cách khác, lớp các ngôn ngữ do BTCQ chỉ định và lớp các ngôn ngữ do ôtômát hữu hạn đoán nhận là một Đó là lớp các ngôn ngữ chính quy
Thuật toán Thompson: Thuật toán xây dựng các ôtômát hữu hạn từ một BTCQ
trên bảng ký hiệu Σ Gồm các bước sau:
1) BTCQ được đoán nhận bởi M: q0 L(M) =
Trang 152) BTCQ {ε} được đoán nhận bởi M: L(M) = {ε}
4) Giả sử A, BΣ* là hai BTCQ được đoán nhận tương ứng bởi hai ôtômát sau:
M1:
M2: a) A B được đoán nhận bởi ôtômát M có dạng: (L(M) = L(M1)L(M2)
b) AB được đoán nhận bởi M (L(M) = L(M1)L(M2)
c) A* được đoán nhận bởi M: (L(M) = A* =
Trang 16Ví dụ: 1) Cho biểu đồ chuyển sau: Tìm BTCQ tương ứng
Biểu thức chính quy tương ứng với sơ đồ chuyển trên là: 0*11*(01)* 1*00 + ε 2) Lập ôtômát hữu hạn tương đương với BTCQ sau: a*a(bc)*a + a*b + ε
Bài tập:
1 Hãy mô tả các ngôn ngữ đoán nhận bởi các ôtômát hữu hạn với biểu đồ chuyển trạng thái cho như sau:
2 Tìm các ÔHĐ và ÔHK đoán nhận các ngôn ngữ sau:
a) Tập các xâu trên {0, 1} có chứa một số chẵn các con số 0 và một số lẻ các con
số 1
b) Tập các xâu trong ∑* có độ dài chia đúng cho 3
c) Tập các xâu trên {0, 1} không chứa xâu con nào là 101 cả
3 Lập các ÔHĐ tương đương với các ÔHK
Trang 17Q {r} {r} q {r} {q, r}
4 Tìm các BTCQ chỉ định chỉ định ngôn ngữ trên {0, 1} sau đây:
a) Tập mọi xâu trong đó mọi cặp 0 liên tiếp đều xuất hiện trước mọi cặp 1 liên tiếp
b) Tập mọi xâu chứa nhiều nhất một cặp 0 liên tiếp và nhiều nhất và nhiều nhất một cặp 1 liên tiếp
5 Lập các ôtômát hữu hạn tương đương với các BTCQ sau:
mô tả ngôn ngữ chính quy thông qua cơ chế sản sinh ngôn ngữ - đó là văn phạm chính quy
Định nghĩa văn phạm chính quy
- Một VPPNC được gọi là một văn phạm chính quy phải nếu các sản xuất của nó chỉ có hai dạng:
A → aB hay A → a, với a Σ và A, BΔ
- Một VPPCN được gọi là một văn phạm chính quy trái nếu các sản xuất của nó chỉ có hai dạng:
A → Ba hay A → a, với a Σ và A, BΔ Các văn phạm chính quy phải và trái được gọi chung là văn phạm chính quy (viết tắt là VPCQ)
Ví dụ: Các văn phạm sau đây là văn phạm chính quy :
B
A
Cđầu
Trang 18S → aS | a
là văn phạm chính quy phải
- Văn phạm G2({S, A, B}, {a, b}, P2, S) với các luật sinh được cho như sau :
S → Ab
A → Ab | B
B → a
là văn phạm chính quy trái
Người ta dùng từ chính quy để đặt tên cho các văn phạm trên vì chúng sản sinh ra các ngôn ngữ chính quy (sai khác xâu ε), tức là các ngôn ngữ được đoán nhận bởi các ôtômát hữu hạn, hay được chỉ định bởi các BTCQ
Định lý 1: Cho L là một NNCQ, thì có một văn phạm chính quy phải cho G sao
cho: L - {ε} = L(G)
Chứng minh:
Giả sử L = L(M) với M = (Σ, Q, ∂, q0, F) là ÔHĐ Ta thành lập văn phạm G = (Σ,
Δ, P, q0), trong đó Δ = Q và P gồm các sản xuất như sau:
1) q → ap nếu ∂(q, a) = p
2) q → a nếu ∂(q, a) F
Với mọi a Σ và p, qQ
Như vậy, G là VPCQ phải, ta chứng minh rằng L(G) = L - {ε}
- Trước hết xét w L, wε Giả sử w = a1a2…an, n 1 Vậy thì
∂(q0, a1) = p1, ∂(p1, a2) = p2, …, ∂(pn-1, an) F (1) Vậy trong G lại có các sản xuất: q0 → a1p1, p1 → a2p2, …, pn-1 → an (2)
Suy ra trong G có suy dẫn:
Giả sử G = (Σ, Δ, P, S) Ta thành lập một ÔHK M đoán nhận L(G) như sau :
M = (Σ, Δ{D}, ∂, S, {D}) trong đó D không thuộc ΔΣ và hàm chuyển ∂ được thành lập như sau :
Gọi ∂1(A, a) = {B | A → aB là một sản xuất trong G}
∂2(A, a) = {D} nếu A → a là một sản xuất trong G
= nếu khác Vậy thì, ∂(A, a) = ∂1(A, a) ∂2(A, a) với mọi aΣ và A, BΔ
- Giả sử w = a1a2…an L(G), n1 Có một suy dẫn:
Trang 19S a1A1 a1a2A2 … a1a2…An-1 a1a2…an (1) Như vậy, trong G phải có các sản xuất:
S → a1A1, A1 → a2A2, …, An-1 → an (2)
Từ đó suy ra trong M:
A1∂(S, a1), A2∂(A1, a2), …, An-1∂(An-2, an-1), D∂(An-1, an) (3)
Có nghĩa là đã có các bước chuyển trạng thái từ trạng thái đầu S đến trạng thái
BF trong ÔH M, khi nó đọc xong xâu w Vậy wL(M)
- Ngược lại, nếu xâu w = a1a2…an được đoán nhận bởi M thì có một dãy các bước chuyển như ở (3) Suy ra có các sản xuất như (2) ở trong G, cho ta suy dẫn (1) Vậy
wL(G)
Kết hợp định lý 1 và 2 ở trên ta có:
Định lý 3: Một ngôn ngữ L là chính quy khi và chỉ khi có một văn phạm chính
quy phải G sao cho L - {ε} = L(G)
Chú ý rằng mọi VPCQ phải đều là VPPNC, vậy ta có:
Bổ đề 1: Mọi NNCQ đều là NNPNC (mệnh đề đảo ngược là không đúng vì có
những NNPNC mà không phải là NNCQ)
Định nghĩa văn phạm chính quy đối ngẫu:
Hai VPCQ trái và phải, G và G’, được gọi là các VPCQ đối ngẫu nếu:
- Một sản xuất dạng A → Ba thuộc G khi và chỉ khi A → aB thuộc G’
- Một sản xuất dạng A → a thuộc G khi và chỉ khi A → a thuộc G’
Dễ thấy rằng, nếu ký hiệu LR là ngôn ngữ đảo ngược của L, tức là tập các xâu đảo ngược của mọi xâu trong L, ta sẽ có:
Bổ đề 2: Nếu L = L(G) và L’ = L(G’) với G, G’ là hai văn phạm chính quy đối
ngẫu, thì L’ = LR
Định lý 4 Một ngôn ngữ L là chính quy khi và chỉ khi có một VPCQ trái G sao
cho L - {ε} = L(G)
Định nghĩa: Văn phạm tuyến tính
- Một VPPNC được gọi là văn phạm tuyến tính phải (VPTT phải) nếu mỗi sản xuất của nó ở một trong hai dạng sau:
Trang 20- Thay mỗi sản xuất của G dạng A → a1a2…anB, n >1 bởi các sản xuất :
Xuất xứ đầu tiên của văn phạm phi ngữ cảnh là việc mô tả các ngôn ngữ tự nhiên
Ta có quy tắc cú pháp như sau:
Tuy nhiên, trong khoa học máy tính, với nhu cầu biểu diễn các ngôn ngữ lập trình, văn phạm phi ngữ cảnh còn được thiết kế thành một dạng tương đương gọi là văn phạm
BNF (Backus - Naur Form) Đây cũng là văn phạm phi ngữ cảnh với những thay đổi nhỏ
về dạng thức và một số ký hiệu viết tắt mà các nhà khoa học máy tính thường ứng dụng trong việc diễn tả cú pháp của các ngôn ngữ lập trình cấp cao (như ALGOL, PASCAL ) Trong dạng thức của văn phạm BNF, ký hiệu ::= được dùng thay cho ký hiệu → Chẳng