Tải bản đầy đủ (.pdf) (41 trang)

BÁO CÁO THỰC TẬP-NGÔN NGỮ VÀ BIỂU DIỄN NGÔN NGỮ

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (915.65 KB, 41 trang )

Ngôn ngữ hình thức 1
2
NGÔ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 v
0
=

, v
1
= v, v
2
= vv, nói chung v
i
= v v
i-1
với i > 0
Đảo ngược của một xâu u, ký hiệu u
R
, là xâu u viết theo thứ tự ngược lại, nghĩa là
nếu u = a
1
a
2
…a
n

thì u
R
= a
n
a
n-1
…a
1
. Đả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


{

} 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
+
.
Ngôn ngữ hình thức 1
3
Đố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ụ: L
1
= {

}; L
2
= {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ụ: L
3
= {a
i
| i là số nguyên tố}
L
4
= {a
i
b
j
| i

j

0}
L
5
= {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ì aXb
L
,
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 =
{a
i
b
i

| 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



Ngôn ngữ hình thức 1
4
Vậ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à v

w.
Ta nói xâu x trên V suy dẫn trực tiếp xâu y, và viết là x
W

y hoặc viết gọn là
x

y 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à v

w là một sản xuất trong P. Nói cách khác đó là sự áp dụng sản xuất v

w
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
xy
, hoặc viết gọn là
*
x y
khi hệ W
đã rõ, khi và chỉ khi tồn tại một dãy các xâu trên V. x
0
, x
1

, …, x
k
với k

0 sao cho x
0
= x,
x
k
= y và x
i
suy dẫn trực tiếp x
i+1
với
01ik  
. 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.
4. P là tập hữu hạn các cặp
( , )

, trong đó:

*
V



**
VV



với
V  

Một cặp
( , )


P được gọi là một sản xuất (hay một quy tắc viết lại) và thường
được viết là


.
Ngôn ngữ hình thức 1
5
Như 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ệ


*

(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



**
VV


.
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ệ


*

đó 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 G
1
và G
2
(sản sinh hay đoán nhận) là tương
đương khi và chỉ khi L(G
1
) = L(G
2
)
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ì aXb
L
,
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:
G
1
=({a,b}, {X}, {X


, X→ aXb}, X) và được đoán nhận bởi văn phạm:
G
2
=({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’)
Chứng minh:
Giả sử G là văn phạm sản sinh và G’ là văn phạm đoán nhận (ngược lại lập luận
tương tự). Trước hết ta chứng minh rằng: Với mọi k

1 thì:


01

G G G k
a a a  
khi và chỉ khi
' ' 1 ' 0

k G G G
a a a  

Chứng minh quy nạp:
- Đúng với k=1, theo định nghĩa G và G’ ta có:
01G
aa
khi và chỉ khi
1 ' 0G
aa

- Giả sử đúng với k, k

1. Bởi sự đối ngẫu ta lại có
1k G k
aa


khi và chỉ khi
1'k G k
aa



. Vậy ta có
Ngôn ngữ hình thức 1
6
0 1 1

G G G k G k
a a a a

   
khi và chỉ khi
1 ' ' 0

k G k G
a a a



Vậy đúng với k+1, kết hợp với sự suy dẫn ra chính nó, ta có:

*
w
G
S 
khi và chỉ khi
*
'G
wS
. Từ đó ta có:
w L(G)
khi và chỉ khi

w L(G')
tức là: L(G) = L(G’)
Ví dụ: Xét hai văn phạm G
1
và G
2
với:
G
1
= ({a,b}, {X}, {X


, X → aXb, X → XX}, X)
G
2
= ({a,b}, {X}, {

→ X, aXb → X, XX → X}, X)
Bước xuy dẫn Sản xuất được dùng
X

XX X → XX


aXbX X → aXb


aaXbbX X → aXb



aabbX X →




aabbaXb X → aXb


aabbab X →


Vậy
1
*
aabbab
G
X 
, nghĩa là G
1
đã sản sinh xâu aabbab.
Trong G
2
:
Bước suy dẫn Sản xuất được dùng
aabbab

aabbaXb

→ X



aabbX aXb → X


aaXbbX

→ X


aXbX aXb → X


XX aXb → X


X XX → X
Vậy
2
*
G
aabbab X
, tức là G
2
đã đoán nhận xâu aabbab. Tóm lại
1
aabbab L(G )

đồng thời cũng có
2
aabbab L(G )

.
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}.
Ngôn ngữ hình thức 1
7
3. 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).

0
1
1
0
0

1
0
1


Bộ điều khiển

Ôtômát hữu hạn làm việc theo từng bước, một bước làm việc của nó thực hiện như
sau: Tuỳ theo trạng thái hiện thời của bộ điều khiển và ký hiệu mà đầu đọc quan sát được,
mà ôtômát chuyển sang một trạng thái mới, đồng thời đầu đọc dịch sang phải một ô. Quy
luật để chuyển sang trạng thái mới đó được cho bởi một hàm, gọi là hàm chuyển ∂: Q


∑ → Q. Trong đó: Q phân biệt trạng thái q
0
, gọi là trạng thái đầu và một tập F các trạng
thái gọi là trạng thái cuối. Với ôtômát hữu hạn đơn định, mỗi ký hiệu vào có đúng một
phép chuyển khỏi mỗi trạng thái (có thể chuyển về chính nó).
q
Ngôn ngữ hình thức 1
8
- 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 q
0
, 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 = {q
0
, q
1
, q
2
, q
3
}, F = {q
0
}. Hàm ∂ cho bởi ma trận sau:

Ký hiệu vào
Trạng thái
0
1
q
0
q
2
q
1
q
1
q
3
q

0
q
2
q
0
q
3
q
3
q
1
q
2
Hoặc ta biểu diễn hàm chuyển dưới dạng đồ thị định hướng, gọi là biểu đồ chuyển
như 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:
110101 110101 110101 110101 110101 110101 110101

q
0
q
1

q
0
q
2
q
3
q
1
q
0
Vì q
0


F, vậy xâu vào 110101 được đoán nhận.
q
0
q
1
q
2
q
3
Đầu
1
1
1
1
0
0

0
0
Ngôn ngữ hình thức 1
9
Đị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
M= (
0
, , , ,Q q F
) trong đó:
1) ∑ là một bộ chữ hữu hạn, gọi là bộ chữ vào;
2) Q là một tập hữu hạn các trạng thái,
Q  
;
3) ∂: Q

∑ → Q, được gọi là hàm chuyển;
4) q
0

Q là trạng thái đầu;
5) F

Q là trạng thái cuối.
Ngôn ngữ được đoán nhận bởi ÔHĐ M = (
0
, , , ,Q q F
) nếu ∂ (q
0
, w) = p với
p


F. Ngôn ngữ được chấp nhận bởi M, ký hiệu là L(M) là tập hợp:
L(M) = {w | w


*
và ∂ (q
0
, w)

F)}
Quá trình đoán nhận một xâu w = a
0
a
1
…a
n
bởi ÔHĐ M là suy dẫn: q
0
a
0
a
1
…a
n



q
1

a
1
…a
n




q
n
a
n


q
n+1
.
Ví dụ: Với ví dụ trên, quá trình đoán nhận xâu vào 110101 được thực hiện như sau:
∂ (q
0
, 1) = q
1
, ∂ (q
1
, 1) = q
0
, vậy ∂ (q
0
, 11) = ∂ (∂ (q
0

, 1), 1) = ∂ (q
1
, 1) = q
0

tiếp tục ∂ (q
0
, 0) = q
2
, vậy ∂ (q
0
, 110) = ∂ (∂ (q
0
, 11), 0) = q
2

và ∂ (q
2
, 1) = q
3
vậy tương tự ta có ∂ (q
0
, 1101) = ∂ (q
0
, 110),1) = q
3

∂ (q
0
, 11010) = q

1
; và cuối cùng ∂ (q
0
, 110101) = q
0


F,
(Hoặc viết ∂ (q
0
, 110101) = ∂ (q
1
, 10101) = ∂ (q
0
, 0101) = ∂ (q
2
, 101) = ∂ (q
3
, 01) =
∂ (q
1
, 1) = q
0


F)
Quá trình đoán nhận còn có thể viết như sau:
q
0
110101


q
1
10101

q
0
0101

q
2
101

q
3
01

q
1
1

q
0


F
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 = {q
0
, q

1
, q
2
, q
3
}, F = {q
2
}. Hàm chuyển được cho
như sau:



Một số quá trình đoán nhận:
w
1
= aabbb: q
0
aabbb

q
1
abbb

q
1
bbb

q
2
bb


q
2
b

q
2


F
w
2
= aaa: q
0
aaa

q
1
aa

q
1
a

q
1

F
w
3

= ba: q
0
ba

q
3
a

q
2

Ta có thể thấy rằng ngôn ngữ do ôtô mát M đoán nhận là:L(M) = {a
m
b
n
| m, n > 0}

a
b
q
0
q
1
q
3
q
1
q
1


q
2

q
2

q
3
q
2
q
3
q
3
q
3
q
1
q
0
q
3
q
2
đầu
a
a
a
b
b

b
a, b
Ngôn ngữ hình thức 1
10
1.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ệ
thống M = (∑, Q, ∂, q
0
, F) trong đó:
1) ∑ là một bộ chữ hữu hạn, gọi là bộ chữ vào;
2) Q là một tập hữu hạn các trạng thái,
Q  
;
3) ∂: Q

∑ → 2
Q
, được gọi là hàm chuyển;
4) q
0

Q là trạng thái đầu;
5) F

Q là trạng thái cuối.
Nếu p


∂ (q, a), thì qa → p là một sản xuất, theo quy tắc đó thì nếu ∂ (q, a) = {p
1
,
p
2
,…, p
m
} thì ta có sản xuất (gộp) là: qa → p
1
| p
2
| …| p
m

Ngôn ngữ đoán nhận bởi M là: L(M)= {w | w


*
và ∂ (q
0
, 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}, {q
0
, q
1
, q

2
, q
3
, q
4
}, ∂, q
0
, {q
2
, q
4
}). Với hàm chuyển ∂
cho như sau:

a
b
q
0
{q
0
, q
3
}
{q
0
, q
1
}
q
1



{q
2
}
q
2
{q
2
}
{q
2
}
q
3
{q
4
}


q
4
{q
4
}
{q
4
}




Cho xâu vào 01001, quá trình đoán nhận như sau:
q
0
01001

q
0
1001

q
0
001

q
3
01

q
4
1

q
4

Đâ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:
q
0
01001


q
0
1001

q
0
001

q
0
01

q
0
1

q
0


q
3
1001 q
1
001 q
3
01 q
3
1 q

1


q
4
1

q
4

Vậ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
nó, có một quá trình cho phép đọc hết xâu và dẫn ôtômát đến một trạng thái cuối.
q
0
q
1
q
2
q
3
q
4
đầu
0,1
0,1
0
0
1
1
0,1

Ngôn ngữ hình thức 1
11
1.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, ∂, q
0
, F) là ÔHK đoán nhận L, thành lập ÔHĐ M’=(∑, Q’, ∂’,
q
0
’, F’) trong đó:
Q’ = 2
Q
; 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 [q
1
, q
2

,…, q
n
], với q
1
, q
2
, , q
n


Q. Trạng thái
đầu q
0
’ = [q
0
]. Hàm chuyển của M được thành lập theo công thức:
∂’([q
1
, q
2
,…, q
k
], a) =
1
k
i
∂ (q
i
, a).
Nói cách khác, lớp các ngôn ngữ đoán nhận bởi các ôtômát hữu hạn đơn định và

lớp các ngôn ngữ đoán nhận bởi các ôtômát hữu hạn không đơn định là một. Gọi đó là
lớp các ngôn ngữ chính quy (viết tắt là lớp NNCQ).
Ví dụ: Cho M = ({0,1}, {q
0
, q
1
}, ∂, q
0
, {q
1
}) là một ÔHK trong đó:
∂(q
0
, 0) = {q
0
, q
1
}; ∂(q
0
, 1) = {q
1
}; ∂(q
1
, 0) =

; ∂(q
1
, 1) = {q
0
, q

1
}
Ta có thể lập ÔHĐ M’ = ({0, 1}, Q’, ∂’, [q
0
], F’) thừa nhận L(M) như sau: Q’ gồm
mọi tập con của {q
0
, q
1
}, ký hiệu các phần tử của Q’ bởi

, [q
0
], [q
1
], [q
0
, q
1
]. F’ = {[q
0
],
[q
0
, q
1
]}.
Bởi vì ∂(q
0
, 0) = {q

0
, q
1
}, ta có ∂’([q
0
], 0) = [q
0
, q
1
]. Tương tự ta có:
∂’([q
0
], 1) = [q
1
]; ∂’([q
1
], 0) =

; ∂’([q
1
], 1) = [q
0
, q
1
],
và ∂’(

, 0) = ∂’(

, 1) =


.
Cuối cùng là: ∂’([q
0
, q
1
], 0) = [q
0
, q
1
] vì ∂(q
0
, 0)

∂(q
1
, 0) = {q
0
, q
1
}


= {q
0
,
q
1
}. Tương tự ta cũng có: ∂’([q
0

, q
1
], 1) = [q
0
, q
1
] vì ∂(q
0
, 1)

∂(q
1
, 1) = {q
1
}

{q
0
, q
1
}
= {q
0
, q
1
}. Tập trạng thái cuối của M’ là F’ = {[q
1
], [q
0
, q

1
]}. Các biểu đồ chuyển của M
và M’ được cho dưới đây:
Ngôn ngữ hình thức 1
12


2. Ngôn ngữ chính quy
2.1. Định nghĩa.
Giả sử ∑ là bảng chữ hữu hạn không rỗng, tập con E


+
được gọi là một ngôn
ngữ trên bảng ∑.
Trên tập tất cả các ngôn ngữ ta có thể định nghĩa các phép toán hợp, giao, phần bù,
nhân và lặp các ngôn ngữ. Trong các phép toán đó, đặc biệt chú ý ba phép toán sau:
a) Phép hợp: Cho hai ngôn ngữ E
1
, E
2
trên tập ∑, ta định nghĩa phép hợp E
1


E
2

= {w | w


E
1
hoặc w

E
2
}.
b) Phép nhân: Cho hai ngôn ngữ E
1
, E
2
trên ∑, phép nhân E
1
với E
2
là E
1
E
2
=
{

|


E
1
,



E
2
}.
c) Phép lặp: Với ngôn ngữ E trên ∑ ta định nghĩa phép lặp của E là:
E
+
= E

E
2


E
3


…=
1n


E
n
, ở đây E
n
= EE E (n lần)
Giả sử ∑ = {a
1
, a
2
,…, a

n
}, ngôn ngữ

và ngôn ngữ {a
i
} (i=1,2, ,n) được gọi là
ngôn ngữ sơ cấp.
Ví dụ: Cho hai ngôn ngữ L
1
= {a, b, c} và L
2
= {a, bc} trên bảng ∑ = {a, b, c}.
- Tìm L
1


L
2
= {a, b, c }

{a, bc} = {a, b, c, bc}
- Tìm L
1
L
2
= {a, b, c}. {a, bc} = {aa, abc, ba, bbc, ca, cbc}
- Tìm L
2
+
= {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ì E

F, EF và E
+
cũng là ngôn
ngữ chính quy trên ∑.
q

0
q
1
0, 1
1
1
0
đầu
[q
0
]
[q
1
]
[q
0

, q
1
]


0, 1
0, 1
1
1
0
0
đầu
ÔHK M ÔHĐ M’

Ngôn ngữ hình thức 1
13
c) 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) = q
0
với q
0
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: Giả sử M = (∑,{q
0
, q
1
, …, q
n
}, ∂, q
0
, F).
Lập ÔHĐ M’ = (∑, Q

{q
n+1

}, ∂’, q
0
, F’). Trong đó:
∂’(q, a) =
0
10
( , ), & ( , )
, & ( , )
n
q a q Q q a q
q q Q q a q

   


  


∂’(q
n+1
, a) = ∂’(q
0
, a)
F’ =
0
10
,
{ },
n
F q F

F q q F







Dễ thấy M’ thực hiện các bước chuyển như M, trừ khi M chuyển về q
0
thì M’
chuyển sang q
n+1
, ngoài ra lại tương tự như M
(Chứng minh chi tiết xem trong giáo trình).
Định lý 1. Nếu L và L’ là các NNCQ thì L

L’ cũng là NNCQ.
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, ∂, q
0
, F) và M’ = (∑, Q’, ∂’, q
0
’, F’). Giả sử thêm Q

Q’=

(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”, ∂”, q

0
”,
F”) như sau:
Q” = Q

Q’

{q
o
”}- {q
0
, q
0
’}
F” =
   
0 0 0 0 0
' , ' , hay ' '
', neu khac
F F q q q q F q F
FF
     




∂” =(q, a) =
   
   
0

0
( , ) ,
'( , ) , ' '
q a q Q q
q a q Q q
  



  



∂”(q
0
’, a) = {∂(q
0
,a)}

{∂’(q
0
’, a)}
Bởi vì Q

Q’=

và M cùng M’ đều là các ÔHĐ không xuất phát lại, cho nên mỗi
khi bước thứ nhất trong M” đã thực hiện, thì M” bắt chước mọi bước chuyển của một
trong hai ÔHĐ M và M’. Vậy L(M”)= L


L’.
Ngôn ngữ hình thức 1
14
Đị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ì L

L’ 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}, {q
0
, q
1
}, ∂, q
0
, {q
1
}) 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}, {q

0
, q
1
}

{q
2
}, ∂’, q
0
, F’} không
xuất phát lại, trong đó:
∂’(q
0
,0) = q
2
; ∂’(q
0
, 1) = q
1
; ∂’(q
1
, 0) = q
1
; ∂’(q
1
, 1) = q
2
; ∂’(q
2
, 0) = q

2
; ∂’(q
2
, 1) = q
1
F’ = {q
1
}. Vậy sơ đồ hàm chuyển của M’ như sau:

3. Biểu thức chính quy
Lớp ngôn ngữ được chấp nhận bởi một ôtômát hữu hạn cũng có thể được mô tả
thông qua một dạng biểu thức ngắn gọn và súc tích gọi là biểu thức chính quy.
Định nghĩa: Cho

là một bộ chữ. Một biểu thức chính quy (viết tắt là BTCQ)
trên Σ và tập hợp do nó chỉ định được định nghĩa một cách đệ quy như sau:
1)

là một biểu thức chính quy, và chỉ định tập rỗng.
2) ε là một biểu thức chính quy, và chỉ định tập {ε }
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 R

S, 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).
q
0
q
2
q
1
đầu
0
0
1
1
1
0
q
0

q
1
1
1
0
0
đầu
Ngôn ngữ hình thức 1
15
Ví dụ: Một số BTCQ ký hiệu cho các ngôn ngữ
- 00 là một biểu thức chính quy chỉ định tập {00}
- (0+1)
*
chỉ định tập mọi xâu o và 1, kể cả chuỗi rỗng
={ε, 0, 1, 00, 01, 11, 000, 010, 011, 111, 0000…}
- (0+1)
*
00(0+1)
*
chỉ định tập mọi xâu 0 và 1 có chứa ít nhất hai số 0 liên tiếp.
= {00, 000, 100, 0000, 0001, 1000, 1001, 011001…}
- (1+10)
*
chỉ định mọi tập xâu 0 và 1, bắt đầu bằng số 1 và không có hai số 0 liên
tiếp
= {ε, 1, 10, 11, 110, 101, 1010, 111, 101010…}
- (0+ε)(1+10)
*
chỉ định tập mọi xâu 0 và 1, không chứa hai số 0 liên tiếp.
= {ε, 01, 1, 10, 010, 01010, 0111…}

- (0+1)
*
011 chỉ định tập mọi xâu 0, 1 kết thúc bởi 011
= {011, 0011, 1011, 00011, 11011…}
- 0
*
1
*
2
*
chỉ định tập mọi xâu có bất kỳ số các số 0, theo sau là số bất kỳ các số 1,
theo sau nữa là số bất kỳ các số 2.
= {ε, 0, 1, 2, 01, 02, 12, 012, 0012, 01122…}
- 00
*
11
*
22
*
chỉ định tập các xâu trong 0
*
1
*
2
*
. Biểu thức thường được viết là
0
+
1
+

2
+
.
Các tính chất của BTCQ:
1. r + s = s + r 2. r + r = r
3. r + (s+t) = (r+s) + t 4. r (st) = (rs) t
5. r (s+t) = rs + rt 6. (r+s) t = rt + st
7. rε = ε r = r 8.

r = r

=


9. r +

= r 10.

*
=


11. (ε + r)
*

= r
*

12. r + r
*


= r
*

13. ( r
*

)
*

= r
*

14. ( r
*

s
*

)
*

= (r+s)
*


Trong đó, ta có r = s có nghĩa là L(r) = L(s).
Đị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: L(M) =




q
0
Ngôn ngữ hình thức 1
16



2) BTCQ {ε} được đoán nhận bởi M: L(M) = {ε}

3) BTCQ {a} được đoán nhận bởi M: L(M) = {a}

4) Giả sử A, B

Σ
*
là hai BTCQ được đoán nhận tương ứng bởi hai ôtômát sau:
M
1
:



M
2
:

a) A

B được đoán nhận bởi ôtômát M có dạng: (L(M) = L(M
1
)

L(M
2
)







b) AB được đoán nhận bởi M (L(M) = L(M
1
)L(M
2
)





c) A
*
được đoán nhận bởi M: (L(M) = A
*
=
0
n
n
A


)




d) A
+
được đoán nhận bởi M: (L(M) = A
+
=
1
n
n
A


)






q
0
q
0
q

a


M
1


M
2
M
1

M
2
q
0
q

ε
ε
ε

ε
M
1
M
2
q
0
M
1
q

ε
ε
ε
ε
q
0
M
1
q

ε
ε
ε
Ngôn ngữ hình thức 1
17
Ví 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
a) ({0, 1}, {p, q, r, s}, ∂
1
, p, {s})
b) ({0, 1}, {p, q, r, s}, ∂
2
, p, {p, s})
Với các ∂
1
và ∂
2
cho bởi các bảng sau:

1
0
1


2
0
1
P
{p, q}
{p}

p
{q, s}
{q}
A


B

D

đầu
a
a
b
b
a
b
C

A

B

C

đầu
1
0
0
1
0
1
1
A
B


C
đầu
0
0
1
0, 1
A
B
C
D
đầu
0
0
0
0
1
1
1
1
Ngôn ngữ hình thức 1
18
Q
{r}
{r}

q
{r}
{q, r}
R

{s}



r
{s}
{p}
S
{s}
{s}

s


{p}
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:
a) 10 + (0 + 11)0
*
1
b) 01[((10)
*
+ 111)
*
+ 0]
*

1
c) ((0 + 1)(0 + 1))
*
+ ((0 + 1)(0 + 1)(0 + 1))
*

6. Tìm các BTCQ tương ứng với các biểu đồ chuyển sau:


6. Văn phạm chính quy
Như trong nội dung nghiên cứu trước ta đã biết, lớp ngôn ngữ được chấp nhận bởi
ôtômát hữu hạn được gọi là ngôn ngữ chính quy và chúng có thể được ký hiệu một cách
đơn giản bằng việc dùng một biểu thức chính quy. Phần này giới thiệu một cách khác để
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 :
- Văn phạm G
1

({S}, {a, b}, P
1
, S) với các luật sinh được cho như sau :
B

A

C

đầu
0
0
1
1
1
0
Ngôn ngữ hình thức 1
19
S → aS | a
là văn phạm chính quy phải.
- Văn phạm G
2
({S, A, B}, {a, b}, P
2

, 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, ∂, q
0
, F) là ÔHĐ. Ta thành lập văn phạm G = (Σ,
Δ, P, q
0
), 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, q

Q
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 = a
1
a
2
…a
n
, n

1. Vậy thì
∂(q
0
, a
1
) = p
1
, ∂(p
1
, a
2
) = p
2
, …, ∂(p
n-1
, a
n
)

F (1)
Vậy trong G lại có các sản xuất: q

0
→ a
1
p
1
, p
1
→ a
2
p
2
, …, p
n-1
→ a
n
(2)
Suy ra trong G có suy dẫn:
q
0


a
1
p
1

a
1
a
2

p
2




a
1
a
2
…p
n-1
→ a
1
a
2
…a
n
= w. Do đó w

L(G) (3)
- Ngược lại, xét w

L(G), w = a
1
a
2
…a
n
, n


1. Như thế phải có một suy dẫn
trong G từ q
0
ra w như dạng (3), do đó các sản xuất trong (2) cũng phải có mặt trong G.
Từ đó suy ra các bước chuyển ở (1) trong ôtômát M. Vậy w

L(M).
Định lý 2: Nếu G là một VPCQ phải, thì L(G) là một NNCQ.
Chứng minh:
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 = a
1
a
2
…a
n


L(G), n

1. Có một suy dẫn:
Ngôn ngữ hình thức 1
20
S

a
1
A
1


a
1

a
2
A
2




a
1
a
2
…A
n-1


a
1
a
2
…a
n
(1)
Như vậy, trong G phải có các sản xuất:
S → a
1
A
1
, A
1

→ a
2
A
2
, …, A
n-1
→ a
n
(2)
Từ đó suy ra trong M:
A
1

∂(S, a
1
), A
2


∂(A
1
, a
2
), …, A
n-1

∂(A
n-2
, a
n-1

), D

∂(A
n-1
, a
n
) (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
B

F trong ÔH M, khi nó đọc xong xâu w. Vậy w

L(M).
- Ngược lại, nếu xâu w = a
1
a
2
…a
n
đượ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
w

L(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 L
R
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’ = L
R
.
Đị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:
A → xB hoặc A → x, với x

Σ
+
và A, B

Δ.
- Một VPPNC được gọi là văn phạm tuyến tính trái (VPTT trái) nếu mỗi sản xuất
của nó ở một trong hai dạng sau:
A → Bx hoặc A → x, với x

Σ
+

và A, B

Δ.
Như vậy VPCQ trái (phải) là VPTT trái (phải) với |x| = 1
Định lý 5. Nếu G là một VPTT phải thì L(G) là một NNCQ
Chứng minh :
Lập VPCQ phải G’ từ văn phạm G như sau :
Ngôn ngữ hình thức 1
21
- Thay mỗi sản xuất của G dạng A → a
1
a
2
…a
n
B, n >1 bởi các sản xuất :
A → a
1
B
1
, B → a
2
B
2
, … B
n-2
→ a
n-1
B
n-1

, B
n-1
→ a
n
B. Trong đó, B
1
, B
2
, …,
B
n-1
là các biến mới.
- Cũng thay mỗi sản xuất của G dạng A → a
1
a
2
…a
n
, n>1, bởi dãy các sản xuất
tương tự, trừ sản xuất cuối cùng là B
n-1
→ a
n
.
Dễ dàng thấy rằng G’ là VPCQ phải và L(G) = L(G’), do đó L(G) cũng là NNCQ.
Định lý 6. Nếu G là một VPTT trái thì L(G) là một NNCQ.


VĂN PHẠM PHI NGỮ CẢNH


1. Văn phạm phi ngữ cảnh
1.1. Xuất xứ
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:
<câu đơn> → <chủ ngữ> <vị ngữ>
<chủ ngữ> → <danh ngữ>
<danh ngữ> → <danh từ> <tính từ>
<vị ngữ> → <động từ> <bổ ngữ>
<bổ ngữ> → <danh ngữ>.
Trong các móc nhọn như <câu đơn>, <chủ ngữ>, <vị ngữ>… là các phạm trù cú
pháp, cho ta vai trò của các bộ phận hợp thành một câu. Ta có thể viết các quy tắc cú
pháp để diễn tả câu “bò vàng gặm cỏ non” như sau:
<danh từ> → bò
<danh từ> → cỏ
<tính từ> → vàng
<tính từ> → non
<động từ> → gặm
Các quy tắc cú pháp như trên chính là thuộc dạng của các quy tắc trong văn phạm
phi ngữ cảnh. Như vậy, văn phạm phi ngữ cảnh có thể chọn làm mô hình cho các văn
phạm của ngôn ngữ tự nhiên được.
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
Ngôn ngữ hình thức 1
22
hạn, để định nghĩa một biểu thức số học bao gồm các toán hạng (biểu diễn bằng các ký
hiệu db) tham gia vào các phép toán +, * hoặc biểu thức con lồng trong dấu ngoặc đơn ,

ta viết :
<biểu thức> ::= <biểu thức> + <biểu thức>
<biểu thức> ::= <biểu thức> * <biểu thức>
<biểu thức> ::= (<biểu thức>)
<biểu thức> ::= db
Ví dụ: Biểu thức (db + db) * db được sinh ra bởi quá trình diễn tả bởi cây sau đây:

Việc nghiên cứu các văn phạm phi ngữ cảnh đã tạo nên một cơ sở lý luận vững
chắc cho việc biểu diễn các ngôn ngữ lập trình, cho việc tìm kiếm các giải thuật phân tích
cú pháp vận dụng trong các chương trinh dịch và cho nhiều ứng dụng khác về xử lý các
xâu.
1.2. Định nghĩa
Định nghĩa: Một văn phạm phi ngữ cảnh, viết tắt là VPPNC, là một hệ thống:
G = (Σ, Δ, P, S). Trong đó:
1) Σ là một 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à một tập các hữu hạn các ký hiệu, gọi là ký hiệu không kết thúc (hay còn
gọi là các biến) với Σ

Δ =

.
3) S

Δ gọi là ký hiệu đầu
4) P là một tập hữu hạn các sản xuất có dạng:
A → α với A

Δ và α




Δ)
*
Với các sản xuất trong P, văn phạm G trở nên một hệ viết lại sản sinh (V, P) với
bảng chữ V = Σ

Δ và tiên đề S. Ta định nghĩa ngôn ngữ sản sinh bởi văn phạm G là:
L(G) = {w | w

Σ
*
và S
*

w}
L(G) được gọi là ngôn ngữ phi ngữ cảnh (NNPNC).
<Biểu thức>

<Biểu thức>

<Biểu thức>

<Biểu thức>

<Biểu thức>

<Biểu thức>

(


)

+

*

db

db

db

Ngôn ngữ hình thức 1
23
Hai văn phạm G
1
, G
2
được gọi là các văn phạm tương đương nếu L(G
1
) = L(G
2
).
Nếu α



Δ)
*

và S
*

α thì α được gọi là một dạng câu.
Ví dụ 1 : Văn phạm G ({a, b}, {S, A, B}, P, S ), trong đó P gồm các luật sinh sau:
S → AB
A → aA
A → a
B → bB
B → b
Quy ước ký hiệu:
- Các chữ in hoa A, B, C, D, E, và S ký hiệu các biến (S thường được dùng làm
ký hiệu bắt đầu ).
- Các chữ nhỏ a, b, c, d, e, ; các chữ số và một số ký hiệu khác ký hiệu cho các
ký hiệu kết thúc.
- Các chữ in hoa X, Y, Z là các ký hiệu có thể là ký hiệu kết thúc hoặc biến.
- Các chữ Hi-lạp α, β, γ, biểu diễn cho xâu gồm các ký hiệu kết thúc và biến.
Ta sẽ biểu diễn văn phạm một cách tóm tắt bằng cách chỉ liệt kê các luật sinh của
nó. Nếu A → α
1
, A → α
2
, , A → α
k
là các luật sinh của biến A trong văn phạm nào đó,
ta sẽ ghi ngắn gọn là A → α
1
| α
2
| | α

k

Ví dụ 2 : Văn phạm trong Ví dụ 1 trên có thể viết gọn là :
S → AB
A → aA | a
B → bB | b
2. Cây suy dẫn và sự nhập nhằng trong VPPNC
2.1. Cây suy dẫn
Để dễ hình dung sự sản sinh ra sự sản sinh ra một xâu trong một VPPNC ta
thường diễn tả một suy dẫn bởi một cây. Một cách hình thức, ta định nghĩa cây suy dẫn
trong một VPPNC G = (Σ, Δ, P, S) là một cây, trong đó:
1) Mọi nút có một nhãn, là một ký hiệu trong Σ

Δ

{ε}
2) Nhãn của gốc là S
3) Nếu một nút có nhãn A là một nút trong thì A

Δ
4) Nếu nút n có nhãn là A và các nút n
1
, n
2
,…, n
k
là các con của nút n, theo thứ tự
từ trái sang phải, và lần lượt mang các nhãn X
1
, X

2
,…, X
k
thì A → X
1
X
2
…X
k
phải là một
sản xuất trong P
5) Nếu nút n mang nhãn là ε, thì n phải là một lá, và là con duy nhất của cha nó
Ví dụ 1: Cho VPPNC G = ({a, b}, {S, A}, P, S), với P gồm:
S → aAS | a; A → SbA | SS | ba
Ngôn ngữ hình thức 1
24
Ta có một cây suy dẫn như sau :

Trong một cây có thứ tự thì các con của một nút được sắp từ “trái sang qua phải”.
Ta có thể mở rộng thứ tự “từ trái qua phải” đó cho các lá của cây. Nếu đọc các nhãn của
các lá, theo thứ tự từ “trái qua phải” ta có một dạng câu và gọi đó là kết quả của cây suy
dẫn. Vậy với hình trên, kết quả của cây là aabbaa.
Ta gọi cây con của một cây suy dẫn là một nút nào đó cùng với các nút bề dưới
của nó, các nhánh nối chúng và các nhãn kèm theo. Cây con cũng giống cây suy dẫn, chỉ
khác là nhãn của gốc không nhất thiết là ký hiệu đầu S. Nếu nhãn của nó là A thì gọi đó
là một A-cây. Một cây con (A-cây) của cây suy dẫn trên là:








Ví dụ 2: Cho VPPNC G = ({a, b}, {S, A}, P, S) với P gồm:
S → Sa | Aa | aAb | ab. Cây suy dẫn như sau:
S
S
a
a
b
A
S
A
a
b
a
b
A
S
A
a
b
a
Ngôn ngữ hình thức 1
25

2.2. Các suy dẫn bên trái nhất và bên phải nhất
Ta gọi suy dẫn bên trái nhất (hay suy dẫn trái), nếu ở mỗi bước suy dẫn, biến
được thay thế là biến nằm bên trái nhất trong dạng câu. Tương tự ta gọi suy dẫn bên phải
nhất (hay suy dẫn phải) nếu ở mỗi bước suy dẫn, biến được thay thế là biến nằm bên phải

nhất trong dạng câu.
Mỗi cây suy dẫn với kết quả α tương ứng với nhiều suy dẫn S
*

α. Các suy dẫn
này có cùng độ dài, vì áp dụng cùng một số các sản xuất như nhau (đó là các sản xuất
tương ứng với các nút trong của cây). Chúng chỉ khác nhau ở thứ tự áp dụng các sản xuất
đó. Trong số các suy dẫn này chỉ có một suy dẫn bên trái nhất và một suy dẫn bên phải
nhất.
Ví dụ : Xét cây dẫn xuất ở Ví dụ 1 trên
Dẫn xuất trái nhất của cây :
S

aAS

aSbAS

aabAS

aabbaS

aabbaa.
Dẫn xuất phải nhất tương ứng là :
S

aAS

aAa

aSbAa


aSbbaa

aabbaa.
Tuy nhiên, với một xâu α

L(G), rất có thể có nhiều cây suy dẫn với kết quả
chung α. Điều đó có nghĩa là xâu α có thể phân tích cú pháp theo nhiều cách khác nhau.
2.3. Sự nhập nhằng
Ta nói một VPPNC G là nhập nhằng nếu có một xâu α là kết quả của hai cây suy
dẫn khác nhau trong G. Vì thế, có thể nói rằng văn phạm G là nhập nhằng nếu có một xâu
α với hai suy dẫn bên trái nhất (hay hai suy dẫn bên phải nhất) S
*

α.
Một NNPNC L được gọi là ngôn ngữ nhập nhằng cố hữu nếu mọi VPPNC sản
sinh ra L đều nhập nhằng.
I
I
I
A
A
A
A
a
a
a
a
a
a

b
b
b
Ngôn ngữ hình thức 1
26
Ví dụ: Xét VPPNC G cho bởi các sản xuất sau:
E → E + E | E * E | (E) | a
Văn phạm này cho ta viết các biểu thức số học với các phép toán + và *. Với
chuỗi a + a * a ta có:
- Suy dẫn bên trái nhất ứng với cây suy dẫn đó là:
E

E * E

E + E * E

a + E * E

a + a * E

a + a * a
- Suy dẫn bên phải nhất
E

E * E

E * a

E + E * a


E + a * a

a + a * a
Với hai cây suy dẫn như sau:

Điều đó có nghĩa là biểu thức a + a * a có thể hiểu theo hai cách khác nhau: thực
hiện phép cộng trước hay thực hiện phép nhân trước. Để khắc phục sự nhập nhằng G đó,
ta có thể:
- Hoặc là quy định rằng các phép cộng và nhân luôn luôn được thực hiện theo thứ
tự từ trái qua phải (trừ khi gặp ngoặc đơn). Quy định đó được thể hiện trong văn phạm G
1

dưới đây, tương đương với G nhưng không còn nhập nhằng nữa.
E → E + T | E * T | T
T → (E) | a
- Hoặc là quy định rằng, khi không có ngoặc đơn ngăn cách, thì phép * được ưu
tiên trước phép +. Quy định đó được thể hiện trong văn phạm G
2
dưới đây, cũng tương
đương với G và không còn nhập nhằng nữa:
E → E + T | T
T → T * F | F
F → (E) | a

3. Giản lược các VPPNC
Thường thì một VPPNC có thể còn chứa đựng một vài yếu tố thừa, vô ích. Chẳng
hạn như theo các đặc tính trên, có những ký hiệu không thực sự tham gia vào quá trình
dẫn xuất ra câu, hoặc sẽ có những luật sinh dạng A → B làm kéo dài chuỗi dẫn xuất một
cách không cần thiết. Vì vậy, việc giản lược văn phạm phi ngữ cảnh là nhằm loại bỏ
E

a
E
E
*
E
E
a
a
+
E
E
+
E
E
a
a
*
E
a

×