LINK DOWNLOAD MIỄN PHÍ TÀI LIỆU "Bai giang NNHT otomat ": http://123doc.vn/document/536883-bai-giang-nnht-otomat.htm
từ α, β và mọi số tự nhiên n, thì:
|αβ| = |α| + |β|, và
|α
n
| = n|α|.
Và rõ ràng là với phần tử đơn vị, tức là từ rỗng ε, thì | ε | = 0.
Chứng minh các kết quả trên là khá dễ dàng, xin dành cho sinh viên như là bài tập.
Một vài khái niệm liên quan
• Đối với các từ ω, t
1
, φ, t
2
trên bảng chữ cái Σ mà ω = t
1
φt
2
thì *φ * ( * không phải là một
ký hiệu của Σ) gọi là một vị trí của φ trên Σ.
• Xâu φ được gọi là một từ con trong ω nếu tồn tại ít nhất một vị trí của φ trong ω.
• Nếu t
1
= ε, tức là ω = φ t
2
thì φ được gọi là tiền tố (phần đầu) của từ ω, nếu t
2
= ε, tức là ω
= t
1
φ thì φ được gọi là hậu tố (phần cuối) của từ ω. Dễ thấy rằng từ rỗng ε là phần đầu,
phần cuối và là từ con của một từ ω bất kỳ trên bảng chữ cái Σ.
• Trường hợp | φ | = 1, tức là φ chỉ gồm 1 ký hiệu, chẳng hạn φ = b ∈ Σ, thì *b* được gọi là
một vị trí của b trong từ ω, cũng gọi là một điểm trong ω.
• Số vị trí của kí hiệu a trong từ ω được ký hiệu là I
a
(ω), hay |ω|
a
hoặc đơn giản hơn là ω|
a
.
Thí dụ 2.1
1. Trên bảng chữ cái W = {if, then, else, a, b, c, d, e, f, +, −, ∗, /, =, ≠}, ta có các từ α = if
a+b=c then c∗d=e và β = else c/d=f , còn αβ là từ: if a+b=c then c∗d=e else c/d=f.
2. Cho Σ = {a, b, c}, khi đó: Từ ω = abcbcb chứa 2 vị trí của bcb, đó là a*bcb*cb và
abc*bcb*, φ = bcb là một từ con của ω. Từ ω chứa một vị trí của ký hiệu a, đó là
*a*bcbcb.
3. Từ ω = 010111001 trên bảng chữ cái {0, 1} có độ dài 9, trong đó 0101 là tiền tố và 11001
là hậu tố của ω.
2.2 Phép lấy từ ngược
Định nghĩa 2.2 Giả sử có từ khác rỗng ω = a
1
a
2
…a
m
trên bảng chữ cái Σ, khi đó từ a
m
a
m-1
… a
2
a
1
được gọi là từ ngược (hay từ soi gương) của từ ω, và được ký hiệu là ω
R
, hay ω
^
.
Khi ω = ε ta quy ước ε
R
= ε.
Nhận xét: Dễ thấy rằng phép lấy từ ngược có các tính chất sau:
• (ω
R
)
R
= ω.
• (αβ)
R
= β
R
α
R
• | α
R
| = | α |.
5
Chứng minh các kết quả trên là khá dễ dàng, xin dành cho sinh viên như là bài tập.
Thí dụ 2.2
1. Cho các từ α = 100110 và β = aabb trên bảng chữ cái {0,1,a,b}, theo định nghĩa ta có:
α
R
= 011001 và (α
R
)
R
= (011001)
R
= 100110 = α.
β
R
= bbaa và (β
R
)
R
= (bbaa)
R
= aabb = β.
2. Cho các từ happy và oto trên bảng chữ cái ∑ = {a, b, c, …x, y, z}, khi đó ta có:
(happy)
R
= yppah và (oto)
R
= oto.
Ngoài ra ta có: | (happy)
R
| = | yppah| = | happy | = 3.
2.3 Phép chia từ
Là phép toán ngắt bỏ phần đầu hay phần cuối của một từ. Ta có các định nghĩa sau:
Định nghĩa 2.3 Phép chia trái của từ α cho từ β (hay thương bên trái của α và β) cho kết quả
là phần còn lại của từ α sau khi ngắt bỏ phần đầu β trong từ α, và được ký hiệu là
β
\
α
.
Định nghĩa 2.4 Phép chia phải của từ α cho từ γ (hay thương bên phải của α và γ) cho kết
quả là phần còn lại của từ α sau khi ngắt bỏ phần cuối γ trong từ α, và được ký hiệu là
α
/
γ
.
Nhận xét: Dễ thấy rằng các phép chia từ có tính chất sau:
• Trong phép chia trái của từ α cho từ β thì β phải là tiền tố của từ α, tương tự, trong phép
chia phải từ α cho từ γ thì γ phải là hậu tố của từ α.
•
ε
\
α
=
α
/
ε
= α .
•
α
\
α
=
α
/
α
= ε.
• Nếu α = β.γ thì
β
\
α
= γ, còn
α
/
γ
= β
• (
β
\
α
)
R
= α
R
/ β
R
.
• (
α
/
γ
)
R
= γ
R
\ α
R
.
Chứng minh các kết quả trên là khá dễ dàng, xin dành cho sinh viên như là bài tập.
Thí dụ 2.3 Cho các từ α = abcaabbcc, β = abc, γ = bcc trên bảng chữ cái ∑ = {a, b, c}, khi
đó ta có
1.
β
\
α
= aabbcc và
α
/γ = abcaab.
2. (
β
\
α
)
R
= (aabbcc)
R
= ccbbaa =
ccbbaacba
/ cba = α
R
/ β
R
6
§3. Các phép toán trên ngôn ngữ.
Các họ ngôn ngữ cụ thể thường được đặc trưng một cách tiện lợi qua các phép toán xác định
trên ngôn ngữ, họ đó gồm các ngôn ngữ nhận được bằng việc tổ hợp từ một số ngôn ngữ cho
trước bởi một số phép toán nào đó. Vì mỗi ngôn ngữ là một tập hợp nên ta có các phép toán
đại số tập hợp như là phép giao, phép hợp, phép hiệu, phép lấy bù trên các ngôn ngữ. Chẳng
hạn, với L
1
và L
2
là hai ngôn ngữ trên bảng chữ cái Σ thì ta cũng có các ngôn ngữ mới sau đây
trên bảng chữ cái Σ: L
1
∪ L
2
, L
1
∩ L
2
, L
1
.L
2
, Σ
*
\ L
1
.
Dưới đây chúng ta sẽ trình bày các phép toán trên ngôn ngữ
3.1 Phép hợp
Định nghĩa 3.1 Hợp của hai ngôn ngữ L
1
và L
2
trên bảng chữ cái ∑, ký hiệu L
1
∪ L
2
, là một
ngôn ngữ trên bảng chũ cái ∑, đó là tập từ:
L = {ω ∈ Σ* | ω ∈ L
1
hoặc ω ∈ L
2
}
Định nghĩa phép hợp có thể mở rộng cho một số hữu hạn các ngôn ngữ, tức là hợp của các
ngôn ngữ L
1
, L
2
, …, L
n
trên bảng chữ cái Σ, là tập từ:
= {ω ∈ Σ* | ω ∈ L
U
n
i
i
L
1=
i
, với i nào đó, 1 ≤ i ≤ n }
Nhận xét: Dễ dàng thấy rằng phép hợp các ngôn ngữ có các tính chất sau:
• Phép hợp hai ngôn ngữ có tính giao hoán: L
1
∪ L
2
= L
2
∪ L
1
.
• Phép hợp các ngôn ngữ có tính kết hợp: (L
1
∪ L
2
) ∪ L
3
= L
1
∪ ( L
2
∪ L
3
).
• Với mọi ngôn ngữ L trên Σ thì: L ∪ ∅ = ∅ ∪ L = L và L ∪ Σ
*
= Σ
*
.
Chứng minh các kết quả trên là khá dễ dàng, xin dành cho sinh viên như là bài tập.
3.2 Phép giao
Định nghĩa 3.2 Giao của hai ngôn ngữ L
1
và L
2
trên bảng chữ cái ∑, ký hiệu L
1
∩ L
2
, là một
ngôn ngữ trên bảng chữ cái ∑, đó là tập từ:
L = {ω ∈ Σ* | ω ∈ L
1
và ω ∈ L
2
}
Định nghĩa phép giao có thể mở rộng cho một số hữu hạn các ngôn ngữ, tức là giao của các
ngôn ngữ L
1
, L
2
, …, L
n
trên bảng chữ cái Σ, là tập từ:
= {ω ∈ Σ* | ω ∈ L
I
n
i
i
L
1=
i
, với mọi i, 1 ≤ i ≤ n }
Nhận xét: Dễ dàng thấy ràng, phép giao các ngôn ngữ có tính chất sau:
• Phép giao hai ngôn ngữ có tính giao hoán: L
1
∩ L
2
= L
2
∩ L
1
.
7
• Phép giao các ngôn ngữ có tính kết hợp: (L
1
∩ L
2
) ∩ L
3
= L
1
∩ ( L
2
∩ L
3
).
• Phép giao các ngôn ngữ có tính phân phối đối với phép hợp:
(L
1
∩ L
2
) ∪ L
3
= (L
1
∪ L
3
) ∩ ( L
2
∪ L
3
).
(L
1
∪ L
2
) ∩ L
3
= (L
1
∩ L
3
) ∪ ( L
2
∩ L
3
).
• Với mọi ngôn ngữ L trên Σ thì: L ∩ ∅ = ∅ ∩ L = ∅ và L ∩ Σ
*
= L.
Chứng minh các kết quả trên là khá dễ dàng, xin dành cho sinh viên như là bài tập.
3.3 Phép lấy phần bù
Định nghĩa 3.3 Ngôn ngữ phần bù của ngôn ngữ L trên bảng chữ cái Σ, ký hiệu C
Σ
L (hay
đơn giản là CL, nếu không gây nhầm lẫn), là một ngôn ngữ trên bảng chữ cái ∑, đó là tập từ:
C
Σ
L = {ω ∈ Σ* | ω ∉ L }
Nhận xét: Dễ dàng thấy rằng phép lấy phần bù các ngôn ngữ có các tính chất sau:
} = Σ
+
, C
Σ
+
= {ε}. • C
Σ
{ε Σ
• C
Σ
∅ = Σ
*
, C
Σ
Σ
*
= ∅.
• C(CL
1
∪ CL
2
) = L
1
∩ L
2
.
Chứng minh các kết quả trên là khá dễ dàng, xin dành cho sinh viên như là bài tập.
Thí dụ 3.1
1. Cho ngôn ngữ L
1
= {ε, 0, 01}, L
2
= {ε, 01, 10} trên bảng chữ cái Σ = {0, 1}, khi đó ta có:
L
1
∪ L
2
= {ε, 0, 01, 10},
L
1
∩ L
2
= {ε, 01}.
2. Cho ngôn ngữ L = {ω ∈ ∑*, với | ω | là một số chẵn }, khi đó ta có:
C
Σ
L = {ω ∈ ∑
+
, với | ω | là một số lẻ}.
3.4 Phép nhân ghép
Định nghĩa 3.4 Cho hai ngôn ngữ L
1
trên bảng chữ Σ
1
và L
2
trên bảng chữ Σ
2
. Nhân ghép
hay tích của hai ngôn ngữ L
1
và L
2
là một ngôn ngữ trên bảng chữ Σ
1
∪ Σ
2
, ký hiệu L
1
L
2
,
đuợc xác định bởi:
L
1
L
2
= {αβ | α∈L
1
và β∈L
2
}.
Nhận xét: Dễ dàng nhận thấy phép nhân ghép (tích) các ngôn ngữ có các tính chất sau:
• Phép nhân ghép có tính kết hợp: với mọi ngôn ngữ L
1
, L
2
và L
3
, ta có:
(L
1
L
2
)L
3
= L
1
(L
2
L
3
).
8
∅L = L∅ = ∅, {ε}L = L{ε} = L,
• Phép nhân ghép có tính phân phối đối với phép hợp, nghĩa là
L
1
(L
2
∪ L
3
) = L
1
L
2
∪ L
1
L
3
, (L
2
∪ L
3
)L
1
= L
2
L
1
∪ L
3
L
1
.
• Đặc biệt: Phép nhân ghép không có tính phân phối đối với phép giao. Phép hợp, phép giao
không có tính phân phối đối với phép nhân ghép (xem thí dụ 3.2). Tức là với mọi ngôn
ngữ L
1
, L
2
và L
3
, thì:
L
1
(L
2
∩ L
3
) ≠ (L
1
L
2
) ∩ (L
1
L
3
) và
L
1
∪ (L
2
L
3
) ≠ (L
1
∪ L
2
)(L
1
∪ L
3
),
L
1
∩ (L
2
L
3
) ≠ (L
1
∩ L
2
)(L
1
∩ L
3
).
Thí dụ 3.2 Đây là một phản ví dụ để chỉ ra rằng phép nhân ghép không có tính phân phối đối
với phép giao. Phép hợp, phép giao không có tính phân phối đối với phép nhân ghép.
Xét các ngôn ngữ L
1
= {0, 01}, L
2
= {01, 10}, L
3
= {0} trên bảng chữ cái Σ = {0, 1}.
1. Có thể kiểm tra được rằng phép nhân ghép không có tính phân phối đối với phép giao:
Ta có: L
2
∩ L
3
= ∅, do đó:
L
1
(L
2
∩ L
3
) = ∅,
Mặt khác, ta có L
1
L
2
= {001, 010, 0101, 0110} và L
1
L
3
= {00, 010}, do đó:
(L
1
L
2
) ∩ (L
1
L
3
) = {010}.
Vậy L
1
(L
2
∩ L
3
) ≠ (L
1
L
2
) ∩ (L
1
L
3
), tức là phép nhân ghép không có tính phân phối đối với
phép giao.
2. Kiểm tra tính phân phối của phép hợp, phép giao đối với phép nhân ghép:
Ta có: L
2
L
3
= {010, 100}, do đó:
L
1
∪ (L
2
L
3
) = {0, 01, 010, 100},
Mặt khác ta cũng có L
1
∪ L
2
= {0, 01, 10} và L
1
∪ L
3
= {0, 01}, do đó:
(L
1
∪ L
2
)(L
1
∪ L
3
) = {00, 001, 010, 0101, 100, 1001}.
Vậy L
1
∪ (L
2
L
3
) ≠ (L
1
∪ L
2
)(L
1
∪ L
3
), tức là phép hợp không có tính phân phối đối với
phép nhân ghép.
Tương tự, đối với phép giao, ta có:
L
2
L
3
= {010, 100}, do đó:
L
1
∩ (L
2
L
3
) = ∅.
Mặt khác L
1
∩ L
2
= {01}, L
1
∩ L
3
= {0}, do đó:
(L
1
∩ L
2
)(L
1
∩ L
3
) = {010}.
Vậy L
1
∩ (L
2
L
3
) ≠ (L
1
∩ L
2
)(L
1
∩ L
3
). Tức là phép giao không có tính phân phối đối với
phép nhân ghép.
9
Vì phép ghép ngôn ngữ có tính kết hợp nên ký hiệu L
n
được dùng với mọi ngôn ngữ L và số
tự nhiên n theo nghĩa quen thuộc sau:
⎪
⎩
⎪
⎨
⎧
>
=
=
=
1.n khi
1,n khi
0,n khi }{
1-n
LL
LL
n
ε
3.5 Phép lặp
Định nghĩa 3.5 Cho ngôn ngữ L trên bảng chữ cái Σ, khi đó:
• Tập từ {ε} ∪ L ∪ L
2
∪ … ∪ L
n
∪ … = được gọi là ngôn ngữ lặp của ngôn ngữ L
(hay bao đóng ghép của ngôn ngữ L), ký hiệu L
U
∞
=0n
n
L
*
.
Vậy ngôn ngữ lặp của L là hợp của mọi luỹ thừa của L: L
*
= .
U
∞
=0n
n
L
• Tập từ L ∪ L
2
∪ … ∪ L
n
∪ … = được gọi là ngôn ngữ lặp cắt của ngôn ngữ L, ký
hiệu L
U
∞
=1n
n
L
+
,
Vậy ngôn ngữ lặp cắt của L là hợp của mọi luỹ thừa dương của L: L
+
= .
U
∞
=1n
n
L
Thí dụ 3.3
1. Xét ngôn ngữ L = {0, 1} trên bảng chữ Σ = {0, 1}. Ta có:
L
2
= {00, 01, 10, 11}, tập hợp các xâu nhị phân độ dài 2;
L
3
= {000, 001, 010, 011, 100, 101, 110, 111}, tập hợp các xâu nhị phân độ dài 3.
Tương tự, L
n
là tập hợp các xâu nhị phân độ dài n.
Vì vậy, L
*
là tập hợp tất cả các xâu nhị phân.
2. Xét hai ngôn ngữ trên bảng chữ Σ = {a}:
L
1
= {a
2n
| n ≥ 1},
L
2
= {a
5n+3
| n ≥ 0}.
Khi đó, ta có L
1
= {a
2
}
+
, L
2
= {a
5
}
*
{a
3
}.
3.6 Phép lấy ngôn ngữ ngược
Định nghĩa 3.6 Cho ngôn ngữ L trên bảng chữ cái Σ, khi đó ngôn ngữ ngược của L là một
ngôn ngữ trên bảng chữ cái ∑, được ký hiệu là L
R
hay L
^
, là tập từ:
L
R
= {ω ∈ Σ* / ω
R
∈ L}
10
Nhận xét: Dễ dàng thấy rằng phép lấy ngôn ngữ ngược có các tính chất sau:
• (L
R
)
R
= L.
R
= { ε}. {ε}•
• (∅)
R
= ∅.
Chứng minh các kết quả trên là khá dễ dàng, xin dành cho sinh viên như là bài tập.
Thí dụ 3.4 Cho L = {ε, ab, abc, cbaa} là một ngôn ngữ trên bảng chữ cái Σ = {a, b, c}, khi đó
L
R
= {ε, ba, cba, aabc} là ngôn ngữ ngược của L.
3.7 Phép chia ngôn ngữ
Định nghĩa 3.7 Cho ngôn ngữ X và Y
trên bảng chữ cái Σ, khi đó thương bên trái của ngôn
ngữ X
cho ngôn ngữ Y là một ngôn ngữ trên ∑, được ký hiệu là
Y
\
X
, là tập từ:
Y
\
X
= {z ∈ Σ* / x ∈ X, y ∈ Y mà x = yz}
Định nghĩa 3.8 Cho ngôn ngữ X và Y
trên bảng chữ cái Σ, khi đó thương bên phải của ngôn
ngữ X
cho ngôn ngữ Y là một ngôn ngữ trên ∑, được ký hiệu là
X
/
Y
, là tập từ:
X
/
Y
= {z ∈ Σ* / x ∈ X, y ∈ Y mà x = zy}
Nhận xét: Dễ dàng thấy rằng phép chia ngôn ngữ có các tính chất sau:
\
L
=
L
/ = L •
{ε} {ε}
•
∅
\
L
=
L
/
∅
= L
•
L
\
Σ*
=
Σ*
/
L
= Σ
*
•
L
\
Σ+
=
Σ+
/
L
= Σ
+
•
(
Y
\
X
)
R
=
X
R
/ Y
R
, (
X
/
Y
)
R
=
Y
R.
\ X
R
.
Chứng minh các kết quả trên là khá dễ dàng, xin dành cho sinh viên như là bài tập.
Thí dụ 3.5 Cho X = {a, b, abc, cab, bcaa} và Y = {ε, c, ab} là các ngôn ngữ trên bảng chữ
cái Σ = {a, b, c}, khi đó:
1.
Y
\
X
= {a, b, abc, cab, bcaa, ab, c}
2.
X
/
Y
= {a, b, abc, cab, bcaa, ab, c}
3.
X
\
Y
= {b}
4.
Y
/
X
= {a}
5.
X
\
X
= {ε , bc, caa}
6.
Y
\
Y
= {ε, c, ab}
11
§4. Văn phạm và ngôn ngữ sinh bởi văn phạm
Mở đầu
Ta có thể hình dung một văn phạm như một “thiết bị tự động” mà nó có khả năng sinh
ra một tập hợp các từ trên một bảng chữ cái cho trước. Mỗi từ được sinh ra sau một số hữu
hạn bước thực hiện các quy tắc của văn phạm.
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 từ 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 từ đó.
Cách 2. “Thiết bị tự động” có khả năng lần lượt sinh ra tất cả các từ trong ngôn ngữ đã cho.
Cách 3. Với mỗi từ ω cho trước, “thiết bị tự động” có thể cho biết từ đó 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 rằng ba cách thức trên là tương
đương nhau hay văn phạm làm việc theo các cách trên là tương đương nhau. Vì vậy, ở đây ta
quan tâm đến cách thứ nhất, tức là ta xét văn phạm như là một “thiết bị tự động” sinh ra các
từ. Vì lẽ đó mà người ta còn gọi các “thiết bị tự động” đó là văn phạm sinh.
Việc sinh ra các từ có thể được thực hiện bằng nhiều cách khác nhau. Các từ có thể được sinh
ra bởi các văn phạm, bởi các Otomat, bởi các máy hình thức như máy Turing, …Ở đây ta đề
cập đến cách của CHOMSKY đưa ra vào những năm 1956-1957.
4.1. Định nghĩa văn phạm
Định nghĩa 4.1 Văn phạm G là một bộ sắp thứ tự gồm 4 thành phần:
G = < Σ, Δ, S, P >,
trong đó:
+ Σ là một bảng chữ cái, gọi là bảng chữ cái cơ bản (hay bảng chữ cái kết thúc), mỗi phần tử
của nó được gọi là một ký hiệu kết thúc hay ký hiệu cơ bản;
+ Δ là một bảng chữ cái, Δ ∩ Σ = ∅, gọi là bảng ký hiệu phụ (hay báng chữ cái không kết
thúc), mỗi phần tử của nó được gọi là một ký hiệu không kết thúc hay ký hiệu phụ.
+ S ∈ Δ được gọi là ký hiệu xuất phát hay tiên đề;
+ P là tập hợp các quy tắc sinh có dạng α→β, α được gọi là vế trái và β được gọi là vế phải
của quy tắc này, với α, β ∈ (Σ ∪ Δ)
*
và trong
α
chứa ít nhất một ký hiệu không kết thúc.
P = {α→β | α = α’Aα’’, với A ∈ Δ, α’, α’’, β ∈ (Σ ∪ Δ)
*
}
12
Chẳng hạn, với Σ = {0,1}, Δ = {S, A, B} thì các quy tắc S → 0S1A, 0AB → 1A1B, A → ε,…
là các quy tắc hợp lệ vì vế trái luôn chứa ít nhất 1 ký hiệu phụ thuộc Δ. Nhưng các quy tắc
dạng 0 → A, 01 → 0B,… là các quy tắc không hợp lệ.
Thí dụ 4.1 Các bộ bốn sau là các văn phạm:
1. G
1
= <{0, 1}, {S}, S, {S→0S1, S→ε}>,
2. G
2
= <{a, b}, {S, A}, S, {S→Ab, A→aAb, A→ε}>,
3. G
3
= <{a, b, c}, {S, A, B, C}, S, {S→ABC, A→aA, B→bB, C→cC, A→a, B→b, C→c}>
4. G
4
= <Σ, Δ, S, P>, trong đó:
Σ = {tôi, anh, chị, ăn, uống, cơm, phở, sữa, café},
Δ = {<câu>, <chủngữ>, <vịngữ>, <độngtừ1>, <độngtừ2>, <danhtừ1>, <danhtừ2>},
S = <câu>,
P = {<câu>→<chủngữ><vịngữ>, <chủngữ>→tôi, <chủngữ>→anh, <chủngữ>→chị,
<vịngữ>→<độngtừ1><danhtừ1>, <vịngữ>→<độngtừ2><danhtừ2>, <độngtừ1>→ăn,
<độngtừ2>→uống, <danhtừ1>→cơm, <danhtừ1>→phở, <danhtừ2>→sữa,
<danhtừ2>→café}.
Chú ý: Nếu các quy tắc có vế trái giống nhau có thể viết gọn lại: hai quy tắc α→ β, α→ γ có
thể được viết là α→ β | γ. Chẳng hạn, như trong văn phạm G
1
ở thí dụ 4.1, ta có thể viết hai
quy tắc của nó dưới dạng S→0S1 | ε.
4.2 Ngôn ngữ sinh bởi văn phạm
Định nghĩa 4.2 Cho văn phạm G = < Σ, Δ, S, P > và η, ω∈(Σ ∪ Δ)
*
. Ta nói ω được suy dẫn
trực tiếp từ η trong G, ký hiệu η├
G
ω hay ngắn gọn là η├ ω (nếu không sợ nhầm lẫn), nếu
tồn tại quy tắc α→β∈P và γ, δ∈(Σ ∪ Δ)
*
sao cho η = γαδ, ω = γβδ.
Điều này có nghĩa là nếu η nhận vế trái α của quy tắc α→β như là từ con thì ta thay α
bằng β để được từ mới ω.
Định nghĩa 4.3 Cho văn phạm G = < Σ, Δ, S, P > và η, ω∈(Σ ∪ Δ)*. Ta nói ω được suy dẫn
từ η trong G, ký hiệu η╞
G
ω hay ngắn gọn là η╞ ω (nếu không sợ nhầm lẫn), nếu η = ω hoặc
tồn tại một dãy D = ω
0
, ω
1
,…, ω
k
∈(Σ ∪ Δ)* sao cho ω
0
= η, ω
k
= ω và ω
i-1
├ ω
i
, với i = 1, 2, , k.
Dãy D = ω
0
, ω
1
, …, ω
k
được gọi là một dẫn xuất của ω từ η trong G và số k được gọi
là độ dài của dẫn xuất này. Nếu ω
0
= S và ω
k
∈ Σ* thì dãy D gọi là dẫn xuất đầy đủ.
Nếu ω
i
được suy dẫn trực tiếp từ ω
i-1
bằng việc áp dụng một quy tắc p nào đó trong G
thì ta nói quy tắc p được áp dụng ở bước thứ i.
Định nghĩa 4.4 Cho văn phạm G = < Σ, Δ, S, P >. Từ ω∈Σ* được gọi là sinh bởi văn phạm
G nếu tồn tại suy dẫn S╞ ω. Ngôn ngữ sinh bởi văn phạm G, ký hiệu L(G), là tập hợp tất cả
các từ sinh bởi văn phạm G:
L(G) = {ω∈Σ
*
| S ╞
G
ω}.
13
Định nghĩa 4.5 Hai văn phạm G
1
= < Σ
1
, Δ
1
, S
1
, P
1
> và G
2
= < Σ
2
, Δ
2
, S
2
, P
2
> được gọi là
tương đương nếu L(G
1
) = L(G
2
).
Thí dụ 4.2
1. Xét văn phạm G
1
trong thí dụ 4.1. Từ ω = 00001111 được suy dẫn từ S bằng dãy dẫn
xuất độ dài 5: S├ 0S1├ 00S11├ 000S111├ 0000S1111 ├ 00001111 (có thể viết ngắn
gọn là ω = 0
4
1
4
).
Bằng việc sử dụng n lần (n ≥ 0) quy tắc 1 rồi quy tắc 2, ta có: S╞ 0
n
1
n
.
Do đó L(G
1
) = {0
n
1
n
| n ≥ 0}.
2. Xét văn phạm G
2
trong thí dụ 4.1. Sử dụng quy tắc 1, rồi n lần (n ≥ 0) quy tắc 2, sau đó
quy tắc 3 để kết thúc, ta có: S├ Ab╞ a
n
Ab
n
b├ a
n
b
n+1
.
Do đó L(G
2
) = {a
n
b
n+1
| n ≥ 0}.
3. Xét văn phạm G
3
trong thí dụ 4.1. Sử dụng quy tắc 1, rồi m -1 lần (m ≥ 1) quy tắc 2, n-1
lần (n ≥ 1) quy tắc 3, k-1 lần (k ≥ 1) quy tắc 4 (các quy tắc có thể xen kẻ), sau đó kết thúc
bởi các quy tắc 5, 6, 7, ta có: S ├ ABC ╞ a
m
Ab
n
Bc
k
C ╞ a
m
b
n
c
k
.
Do đó L(G
3
) = {a
m
b
n
c
k
| m ≥ 1, n ≥ 1, k ≥ 1}.
4. Dễ dàng thấy rằng: L(G
4
) = {tôi ăn cơm, anh ăn cơm, chị ăn cơm, tôi ăn phở, anh ăn phở,
chị ăn phở, tôi uống sữa, anh uống sữa, chị uống sữa, tôi uống café, anh uống café, chị
uống café}.
Ta có thể biểu diễn việc dẫn xuất từ <câu> đến một từ trong L(G
4
), chẳng hạn “tôi ăn cơm”
bằng một cây gọi là cây dẫn xuất hay cây phân tích cú pháp như dưới đây. Tất nhiên, theo
quan điểm phân tích cú pháp thực tế, việc xem xét các quy tắc theo hướng ngược lại là từ phải
qua trái. Điều đó có nghĩa là cây dưới đây được xử lý từ dưới lên trên chứ không phải là từ
trên xuống dưới. (H.1).
H. 2.1 Cây dẫn xuất cho ví dụ 4.2
14
Không có nhận xét nào:
Đăng nhận xét