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

Văn Phạm và các chủ đề liên quan

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 (828.33 KB, 34 trang )

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN TOÁN ỨNG DỤNG VÀ TIN HỌC
──────── * ───────

BÁO CÁO MÔN HỌC

LÝ THUYẾT OTOMAT VÀ NGÔN NGỮ
HÌNH THỨC

CHỦ ĐỀ

VĂN PHẠM VÀ CÁC VẤN ĐỀ LIÊN QUAN

Sinh viên thực hiện :

Nhóm 7
Toán tin 2 – K59

Giáo viên hướng dẫn:

ThS. Ngô Thị Hiền

HÀ NỘI 5-2018
Sinh viên thực hiện: Nhóm 7

1


MỤC LỤC
LỜI NÓI ĐẦU ....................................................................................................................... 4
LÝ THUYẾT CƠ SỞ ............................................................................................................ 5


1.

2.

3.

Các khái niệm cơ bản về ngôn ngữ hình thức ................................................... 5
1.1.

Bảng chữ cái .................................................................................................. 5

1.2.

Từ ................................................................................................................... 5

1.3.

Ngôn ngữ ....................................................................................................... 6

Các phép toán trên các từ.................................................................................... 6
2.1.

Phép nhân ghép ............................................................................................. 6

2.2.

Phép lấy từ ngược......................................................................................... 7

2.3.


Phép chia từ ................................................................................................... 7

Các phép toán trên ngôn ngữ .............................................................................. 7
3.1.

Phép hợp ........................................................................................................ 7

3.2.

Phép giao ....................................................................................................... 8

3.3.

Phép lấy phần bù ........................................................................................... 8

3.4.

Phép nhân ghép ............................................................................................. 8

3.5.

Phép lặp ......................................................................................................... 8

3.6.

Phép lấy ngôn ngữ ngược ............................................................................ 8

3.7.

Phép chia ngôn ngữ ...................................................................................... 9


VĂN PHẠM ........................................................................................................................ 10
1.

2.

3.

4.

5.

Định nghĩa ........................................................................................................... 10
1.1.

Mở đầu ......................................................................................................... 10

1.2.

Định nghĩa .................................................................................................... 10

Ngôn ngữ sinh bởi văn phạm ............................................................................ 11
2.1.

Ngôn ngữ sinh bởi văn phạm ..................................................................... 11

2.2.

Thuật toán G  L(G) ................................................................................... 12


Phân cấp văn phạm theo chomsky. Cây dẫn xuất ........................................... 13
3.1.

Phân cấp văn phạm theo Chomsky ............................................................ 13

3.2.

Ví dụ ............................................................................................................. 13

3.3.

Cây dẫn xuất ................................................................................................ 15

Văn phạm tuyến tính .......................................................................................... 18
4.1.

Văn phạm tuyến tính ................................................................................... 18

4.2.

Xây dựng văn phạm tuyến tính phải từ văn phạm tuyến tính trái ............ 18

Sự tương đương giữa văn phạm chính quy và otomat hữu hạn .................... 20
5.1.

Sự tương đương giữa văn phạm chính quy và otomat hữu hạn ............. 20

Sinh viên thực hiện: Nhóm 7

2



6.

5.2.

Xây dựng NFA từ văn phạm tuyến tính phải ............................................. 21

5.3.

Xây dựng văn phạm tuyến tính từ NFA...................................................... 24

Giải thuật CYK .................................................................................................... 27
6.1.

Văn phạm phi ngữ cảnh (CFG) và Chuẩn Chomsky (CNF) ....................... 27

6.2.

Giải thuật Coke- Kasami – Younger (CYK): ............................................... 29

Sinh viên thực hiện: Nhóm 7

3


LỜI NÓI ĐẦU
Lý thuyết tính toán cũng như của nhiều ngành khác nhau của nó, chẳng hạn
mật mã học, có liên quan mật thiết với lý thuyết ngôn ngữ. Các tập vào và ra của một
thiết bị tính toán có thể được xem như các ngôn ngữ và nói một cách sâu sắc hơn thì

các mô hình tính toán có thể được đồng nhất với các lớp các đặc tả ngôn ngữ theo
nghĩa.
Trong các chương trước của bài giảng chúng ta đã được theo dõi ngôn ngữ là
gì, bản chất cũng như các tính chất của ngôn ngữ. Trong báo cáo này chúng em sẽ
trình bày về CÂY DẪN XUẤT VÀ THUẬT TOÁN CYK. Tất cả đều liên quan đến
văn phạm, một đối tượng rất thú vị trong ngôn ngữ hình thức. Văn phạm có thể được
coi là “hàm sinh” ra ngôn ngữ. Từ một tập khởi đầu và các quy tắc sinh trong văn
phạm ta sẽ thu được một tập hợp từ ngữ của một ngôn ngữ nhất định. Như vậy văn
phạm có thể liên quan mật thiết tới otomat hay không khi văn phạm là đối tượng sinh
ra một ngôn ngữ còn otomat là máy để đoán nhận ngôn ngữ. Liệu một otomat đoán
nhận cùng ngôn ngữ sinh bởi văn phạm có tương đồng gì với nhau hay không.

1.
2.
3.
4.
5.

6.

Qua báo cáo này chúng em sẽ tìm hiểu lần lượt qua các nội dung:
Định nghĩa văn phạm
Ngôn ngữ sinh bởi văn phạm - Thuật toán sinh ngôn ngữ từ văn phạm G
Phân loại văn phạm theo Chomsky
Cây dẫn xuât
Văn phạm tuyến tính
Thuật toán chuyển từ văn phạm tuyến tính trái -> văn phạm tuyến tính phải
Sự tương đương văn phạm chính quy và otomat hữu hạn
Thuật toán chuyển văn phạm tuyến tính phái -> NFA
Thuật toán chuyển từ NFA -> văn phạm tuyến tính phải

Giải thuật CYK

Báo cáo được hoàn thành trong thời gian ngắn chắc chắn sẽ không tránh khỏi
thiếu sót, chúng em rất mong được cô giáo và các bạn góp ý!
Chúng em xin chân thành cảm ơn.

Sinh viên thực hiện: Nhóm 7

4


LÝ THUYẾT CƠ SỞ
1. Các khái niệm cơ bản về ngôn ngữ hình thức
1.1. Bảng chữ cái
Định nghĩa 1.1 Tập Σ khác rỗng gồm hũu hạn hay vô hạn các ký hiệu được
gọi là bảng chữ cái. Mỗi phần tử a∈ Σ được gọi là một chữ cái hay một ký
hiệu.
Thí dụ 1.1 Dưới đây là các bảng chữ cái
 ∑ = {a, b, c, … , x, y, z}
 Δ = {α, β, γ, δ, ε, η, ϕ, κ, μ, χ, ν, π, θ, ρ, σ, τ, ω,ξ, ψ},
 Г = {0, 1},
 W = {if, then, else, a, b, c, d, e, f, +, -, ∗, /, =, ≠}

1.2.

Từ

Định nghĩa 1.2 Giả sử có bảng chữ cái Σ = {a1, a2, …, am}, một dãy các chữ
cái α = ai1 ai2…ait, với aij ∈ Σ (1 ≤ j ≤ t) được gọi là một từ hay một xâu trên
bảng chữ cái Σ.

Tổng số vị trí của các ký hiệu xuất hiện trong xâu α được gọi là độ dài
của từ α và ký hiệu là | α |.
Như vậy, một từ trên bảng chữ cái Σ là một xâu hữu hạn gồm một số
lớn hơn hay bằng không các chữ cái của Σ, trong đó một chữ cái có thể xuất
hiện nhiều lần.
Xâu không có chữ cái nào được gọi là từ rỗng và được ký hiệu là ε. Rõ
ràng từ rỗng là từ thuộc mọi bảng chữ cái.
Hai từ α = a1a2…an và β = b1b2…bm được gọi là bằng nhau, và được
ký hiệu là α = β, nếu n = m và ai = bi với mọi i = 1, 2, …, n.
Nếu α là một từ trên bảng chữ cái Σ, và Σ ⊆ Δ thì α cũng là từ trên bảng
chữ cái Δ.
Tập mọi từ trên bảng chữ cái Σ được ký hiệu là Σ* , còn tập mọi từ khác
rỗng trên bảng chữ cái Σ được ký hiệu là Σ+. Như vậy
Σ+ = Σ* \ {ε} và Σ* = Σ+ ∪ {ε}.
Dễ thấy rằng các tập Σ* và Σ+ là vô hạn.
Về cấu trúc đại số thì Σ* là một vị nhóm tự do sinh bởi Σ với đơn vị là
từ rỗng ε, còn Σ+ là một nửa nhóm tự do sinh bởi Σ. Có thể chứng minh được
rằng các tập Σ* và Σ+ là vô hạn đếm được.
Sinh viên thực hiện: Nhóm 7

5


Thí dụ 1.2
1. Ta có ε , 0, 01, 101, 1010, 110011 là các từ trên bảng chữ cái Г = {0,1}
2. Các xâu ε, beautiful, happy, holiday là các từ trên bảng chữ cái Σ = {a, b, c,
…, z}.

1.3.


Ngôn ngữ

Định nghĩa 1.3 Cho bảng chữ cái Σ, mỗt tập con L ⊆ Σ* được gọi là một ngôn
ngữ hình thức (hay ngôn ngữ) trên bảng chữ cái Σ.
Tập rỗng, ký hiệu ∅, là một ngôn ngữ không gồm một từ nào và được
gọi là ngôn ngữ rỗng.
Vậy ngôn ngữ rỗng là ngôn ngữ trên mọi bảng chữ cái.
Chú ý rằng ngôn ngữ rỗng: L = ∅ là khác với ngôn ngữ chỉ gồm một từ
rỗng: L = {ε}.
Thí dụ 1.3
1. Σ* là ngôn ngữ gồm tất cả các từ trên Σ còn Σ+ là ngôn ngữ gồm tất cả các
từ khác từ trống trên Σ.
2. L={ ε, 0, 1, 01, 10, 00, 11, 011,100} là một ngôn ngữ trên bảng chữ cái
Г={0, 1}.
3. L = {a, b, c, aa, ab, ac, abc} là ngôn ngữ trên bảng chữ cái Σ = {a, b, c}.
4. L1 = {ε, a, b, abb, aab, aaa, bbb, abab}, L2 = {anbn | n∈ N} là hai ngôn ngữ
trên bảng chữ Σ = {a, b}, L1 là ngôn ngữ hữu hạn trong khi L2 là ngôn ngữ vô
hạn. Mỗi từ thuộc ngôn ngữ L2 có số chữ cái a bằng số chữ cái b với a và b
không xen kẽ, a nằm ở phía trái và b ở phía phải của từ

2. Các phép toán trên các từ
Các phép toán dưới đây thực hiện trên các từ trên cùng một bảng chữ
cái Σ, tạo nên các từ mới cũng thuộc cùng một bảng chữ cái.

2.1.

Phép nhân ghép

Định nghĩa 2.1 Tích ghép (hay nhân ghép) của hai từ α = a1a2…am và từ β =
b1b2…bn trên bảng chữ cái Σ, là từ γ = a1a2…amb1b2…bn trên bảng chữ cái Σ.

Kí hiệu phép nhân ghép là γ = α.β (hay γ = αβ).
Sinh viên thực hiện: Nhóm 7

6


2.2.

Phép lấy từ ngược

Định nghĩa 2.2 Giả sử có từ khác rỗng ω = a1a2 …am trên bảng chữ cái Σ, khi
đó từ am am-1… a2 a1 đượ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 = ε.

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à α/γ
.


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 L1 và L2 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 Σ: L1 ∪ L2, L1 ∩ L2, L1.L2, Σ*
\ L1 .
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ữ L1 và L2 trên bảng chữ cái ∑, ký hiệu
L1∪ L2, là một ngôn ngữ trên bảng chũ cái ∑, đó là tập từ:
L = {ω ∈ Σ* | ω ∈ L1 hoặc ω ∈ L2 }
Đị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ữ L1, L2, …, Ln trên bảng chữ cái Σ, là tập từ:
𝑛

⋃ 𝐿𝑖 = {ω ∈ Σ ∗ |ω ∈ Li , với i nào đó, 1 ≤ i ≤ n}
𝑖=1

Sinh viên thực hiện: Nhóm 7

7



3.2.

Phép giao

Định nghĩa 3.2 Giao của hai ngôn ngữ L1 và L2 trên bảng chữ cái ∑, ký hiệu
L1∩ L2 , là một ngôn ngữ trên bảng chữ cái ∑, đó là tập từ:
L = {ω ∈ Σ* | ω ∈ L1 và ω ∈ L2 }
Đị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ữ L1, L2, …, Ln trên bảng chữ cái Σ, là tập từ:
𝒏

⋂{ω ∈ Σ ∗ |ω ∈ Li , với mọi 1 ≤ i ≤ n}
𝒊=𝟏

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 }

3.4.

Phép nhân ghép

Định nghĩa 3.4 Cho hai ngôn ngữ L1 trên bảng chữ Σ1 và L2 trên bảng chữ Σ2.
Nhân ghép hay tích của hai ngôn ngữ L1 và L2 là một ngôn ngữ trên bảng chữ
Σ1 ∪ Σ2, ký hiệu L1L2, đuợc xác định bởi:

L1L2 = {αβ | α∈L1 và β∈L2}.

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 ∪ L2 ∪ … ∪ Ln ∪ … = ⋃∞
𝑛=0 𝐿 đượ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*.
𝑛
Vậy ngôn ngữ lặp của L là hợp của mọi luỹ thừa của L: 𝐿∗ ⋃∞
𝑛=0 𝐿
𝑛
 Tập từ L ∪ L2 ∪ … ∪ Ln ∪ … = ⋃∞
𝑛=1 𝐿 được gọi là ngôn ngữ lặp cắt
của ngôn ngữ L, ký hiệu 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+=⋃∞
𝑛=1 𝐿

3.6.

Phép lấy ngôn ngữ ngược

Sinh viên thực hiện: Nhóm 7


8


Đị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à LR hay L^, là tập
từ:
LR = {ω ∈ Σ* / ωR ∈ 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}

Sinh viên thực hiện: Nhóm 7

9


VĂN PHẠM
1. Định nghĩa
1.1. 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.
Văn phạm phải có các đặc điểm sau:
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 văn phạm để sau một số hữu hạn bước làm việc nó dừng và sinh
ra chính từ đó.
2. Văn phạm có khả năng lần lượt sinh ra tất cả các từ trong ngôn ngữ
đã cho.
3. Với mỗi từ ω cho trước, văn phạm có thể cho biết từ đó có thuộc
ngôn ngữ đã cho hay không.

1.2.

Định nghĩa

Văn phạm G là một bộ sắp thứ tự gồm 4 thành phần:
G = < N, T, S, P >
Trong đó:
- N (Nonterminal) là một bảng chữ cái, T ∩ N = ∅, 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ụ.
- T (Terminal) 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;
- S (Start) ∈ T đượ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 α, β ∈ (N ∪ T)* và trong α chứa ít
nhất một ký hiệu không kết thúc.
P = {α→β | α = α’Aα’’, với A ∈ T, α’, α’’, β ∈ (N ∪ T)* }
Ví dụ:

G = <{S}, {0, 1}, S, {S→0S1, S→ε}>

Sinh viên thực hiện: Nhóm 7

10


2. Ngôn ngữ sinh bởi văn phạm
2.1. Ngôn ngữ sinh bởi văn phạm
Định nghĩa 2.1 Cho văn phạm G = < N, T, S, P > và η, ω∈(N ∪ T)*.
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à γ, T∈(N ∪ T)*
sao cho η = γαT, ω = γβT.
Nói cách khác ω được suy dẫn trực tiếp từ η NẾU: η được biến đổi từ
ω với chỉ một phép biến đổi trong P.
Đ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 ω.
Ví dụ: G = ({S}, {0, 1}, {S -> 0S1, S -> 01}, S} có qui tắc S -> 0S1
nên 0S1 được gọi là suy dẫn trực tiếp từ S.
Định nghĩa 2.2 Cho văn phạm G = < N, T, S, P > và η, ω∈(N ∪ T)*.
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 ,…,
𝜔𝑘 ∈(N ∪ T)* sao cho 𝜔0 = η, 𝜔𝑘 = ω và 𝜔𝑖−1 ├ 𝜔𝑖 , với i = 1, 2,..., k.
Nói cách khác ω được suy dẫn trực tiếp từ η NẾU: η có thể được biến
đổi từ ω với một số lượng các phép suy dẫn liên tiếp.
Dãy D = 𝜔0 , 𝜔1 , …, 𝜔𝑘 đượ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 ∈ N* 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 2.3 Cho văn phạm G = < N, T, S, P >. Từ ω∈N* đượ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) = {ω∈N* | S ╞ G ω}.
Định nghĩa 2.4 Hai văn phạm 𝐺1 = <𝑍1 , 𝛥1 , 𝑆1 , 𝑃1 > và 𝐺2 = <𝑍2 , 𝛥2 ,
𝑆2 , 𝑃2 >được gọi là tương đương nếu L(𝐺1 ) = L(𝐺2 ).
Ví dụ:
Xét văn phạm G = <{0, 1}, {S}, S, {S→0S1, S→ε}> 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à ω = 04 14 ).
Sinh viên thực hiện: Nhóm 7

11


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𝑛 1𝑛 .
Do đó L(G1) = {0𝑛 1𝑛 | n ≥ 0}.

2.2. Thuật toán G  L(G)
a. Bài toán
INPUT:
Văn phạm G = < N, T, S, P >
OUTPUT: Ngôn ngữ L(G) sinh bởi văn phạm G (tập hợp tất cả các
từ có thể sinh bởi văn phạm G)

b. Ý tưởng:
Dựng cây dựa theo các quy tắc trong P. Với mỗi kí tự bắt đầu ta sẽ xây
dựng một nhánh theo các quy tắc trong P tạo thành các từ.
Các trường hợp kết thúc:
1. Từ chỉ còn lại các kí tự trong tập kết thúc.

2. Bước sau sinh ra một từ chứa từ của bước trước.

c. Thuật toán:
Bước 1:
Mảng start = tập kí tự bắt đầu
Mảng P = tập các quy tắc
Mảng Z = tập các kí tự kết thúc
Bước 2:
Xây dựng cây, lặp với mỗi phần tử còn chưa kết thúc duyệt theo
từng quy tắc trong P -> một phần tử mới.
Bước 3:
Kiểm tra tất cả các phần tử mới, nếu tất cả đã thuộc trường hợp
kết thúc -> ghi vào mảng L = ngôn ngữ sinh bởi G nếu không quay lại
bước 2.
Bước 4:
Thông báo ngôn ngữ và kết thúc.

Sinh viên thực hiện: Nhóm 7

12


3. Phân cấp văn phạm theo chomsky. Cây dẫn xuất
3.1. Phân cấp văn phạm theo Chomsky
Bằng cách áp đặt một số quy tắc hạn chế trên các luật sinh, Noam
Chomsky đề nghị một hệ thống phân loại các văn phạm dựa vào tính chất của
các luật sinh.
Loại 0: Văn phạm không hạn chế (Unrestricted Grammar):
Không cần thỏa điều kiện dàng buộc nào trên tập các luật sinh
Loại 1: Văn phạm cảm ngữ cảnh (CSG-Context Sensitive Grammar):

Nếu văn phạm 𝐺 có các luật sinh dạng 𝛼 → 𝛽 và |𝛽| ≥ |𝛼|
Loại 2: Văn phạm phi ngữ cảnh (CFG-Context Free Grammar) :
Có luật sinh dạng 𝐴 → 𝛼 với 𝐴 là một biến đơn và 𝛼 là chuỗi các kí hiệu thuộc
(𝑁 ∪ 𝑇 ) ∗
Loại 3: Văn phạm chính quy (RG-Regular Grammar):
Có mọi luật sinh dạng tuyến tính phải hoặc tuyến tính trái:
 Tuyến tính phải: 𝐴 → 𝑤𝐵 hoặc 𝐴 → 𝑤
 Tuyến tính trái:𝐴 → 𝐵𝑤 hoặc 𝐴 → 𝑤
Nhận xét:
Với 𝐴, 𝐵 là các biến đơn, w là chuỗi kí hiệu kết thúc ( có thể là rỗng)
Nếu kí hiệu 𝐿0 , 𝐿1 , 𝐿2 , 𝐿3 là các ngôn ngữ được sinh ra bởi văn phạm loại
0,1,2,3 ta có:
𝐿3 ⊂ 𝐿2 ⊂ 𝐿1 ⊂ 𝐿0

3.2. Ví dụ
a. Thí dụ về văn phạm loại 0: văn phạm không hạn chế.
Trong các sách văn phạm tiếng Việt, nếu ta biểu diễn một cách ngắn
gọn các phạm trù cú pháp: câu, chủ ngữ, vị ngữ, danh từ, đại từ, động từ lần
lượt là U,C,V,D,Đ,G thì ta có thể trình bày các quy tắc sau:
U→CU
C→Đ
V→G
D→mèo
D→bò
Đ→tôi
Đ→nó
G→ăn
G→nằm

Sinh viên thực hiện: Nhóm 7


13


Và đó chính là các sản xuất trong văn phạm phi ngữ cảnh, trong đó
U,c,V,D,Đ,G là các kí hiệu không kết thúc, còn “mèo”,
“bò”,”tôi”,”nó”,”ăn”,”nằm” là các kí hiệu kết thúc

b. Thí dụ về văn phạm loại 1: văn phạm cảm ngữ cảnh.
Xét văn phạm 𝐺:
𝑁 = {𝑆, 𝐵, 𝐶 }, 𝑇 = {𝑎, 𝑏, 𝑐} và tập 𝑃 gồm:
𝑆 → 𝑎𝐵𝐶
𝐶𝐵 → 𝐵𝐶
𝑎𝐵 → 𝑎𝑏
𝑏𝐵 → 𝑏𝑏
𝑏𝐶 → 𝑏𝑐
𝑐𝐶 → 𝑐𝑐
Chẳng hạn, mỗi dẫn xuất từ 𝑆 có dạng:
𝑆 → 𝑎𝑆𝐵𝐶 → 𝑎𝑎𝐵𝐶𝐵𝐶 → 𝑎𝑎𝑏𝐶𝐵𝐶 → 𝑎𝑎𝑏𝐵𝐶𝐶 → 𝑎𝑎𝑏𝑏𝐶𝐶 →
𝑎𝑎𝑏𝑏𝑐𝐶 → 𝑎𝑎𝑏𝑏𝑐𝑐 → 𝑎2 𝑏2 𝑐 2
Hay văn phạm sinh ra ngôn ngữ
𝐿(𝐺1 ) = {𝑎𝑛 𝑏𝑛 𝑐 𝑛 |𝑛 > 0}.

c. Thí dụ về văn phạm loại 2: văn phạm phi ngữ cảnh.
Xét văn phạm G:
𝑁 = {𝑆}, 𝑇 = {𝑎, 𝑏} và tập 𝑃
𝑆 → 𝑎𝑆𝑏
𝑆 → 𝑎𝑏
Chẳng hạn, một dẫn xuất từ S có dạng :
𝑆 → 𝑎𝑆𝑏 → 𝑎𝑎𝑆𝑏𝑏 → 𝑎𝑎𝑎𝑆𝑏𝑏𝑏 → 𝑎𝑎𝑎𝑎𝑏𝑏𝑏𝑏 = 𝑎4 𝑏4

Hay văn phạm sinh ra ngôn ngữ
𝐿(𝐺2 ) = {𝑎𝑛 𝑏𝑛 |𝑛 ≥ 1}.

d. Thí dụ về văn phạm loại 3: văn phạm chính quy.
Xét văn phạm G:
Với tập 𝑃

𝑁 = {𝑆, 𝐴}, 𝑇 = {𝑎, 𝑏}
𝑆 → 𝑎𝑆
𝑆 → 𝑎𝐴
𝐴 → 𝑏𝐴
𝐴→𝑏

Đây là văn phạm loại 3 ( vì tập luật sinh có dạng tuyến tính phải)
Chẳng hạn, một dẫn xuất từ S có dạng:
Sinh viên thực hiện: Nhóm 7

14


𝑆 → 𝑎𝑆 → 𝑎𝑎𝑆 → 𝑎𝑎𝑎𝐴 → 𝑎𝑎𝑎𝑏𝐴 → 𝑎𝑎𝑎𝑏𝑏𝐴 → 𝑎𝑎𝑎𝑏𝑏𝑏𝑏 = 𝑎3 𝑏4
Hay văn phạm sinh ra ngôn ngữ
𝐿(𝐺3 ) = {𝑎𝑛 𝑏𝑚 |𝑛, 𝑚 ≥ 1}.

3.3. Cây dẫn xuất
a. Định nghĩa
Một cây dẫn xuất trong một văn phạm phi ngữ cảnh 𝐺(𝑁, 𝑇, S, 𝑃) là
một cây mà mỗi đỉnh được gắn một nhãn là một phần tử thuộc tập 𝑁 ∪ 𝑇 ∪ {𝜀}
và thỏa mãn các điều kiện sau:
+ Nhãn của gốc là kí hiệu đầu 𝑆

+ Nhãn của mỗi đỉnh trong là một kí hiệu không kết thúc. Nhãn của
mỗi lá là một kí hiệu kết thúc hoặc là 𝜀 (xâu rỗng)
+ Với mỗi đỉnh trong, nếu có nhãn là 𝐴 và các con của nó là các đỉnh
𝑛1 , 𝑛2 , … , 𝑛𝑘 lần lượt có nhãn 𝑋1 , 𝑋2 , … , 𝑋𝑘 thì 𝐴 → 𝑋1 𝑋2 … 𝑋𝑘 phải là một sản
xuất của 𝐺
+ Nếu một lá có nhãn là 𝜀 , thì lá đso phải là con duy nhất của cha nó
Cho một cây dẫn xuất, ta gọi 𝑐â𝑦 𝑐𝑜𝑛 là một cây tạo thành bởi một đỉnh
và mọi hậu duệ của nó, cùng với các nhãn và các cung liên kết chúng. Nếu gốc
của cây con có nhãn là 𝐴 , thì cây con đó được gọi là một 𝐴 − 𝑐â𝑦
Là xâu tạo thành bằng cách ghép tiếp các lá của cây theo trật tự từ trái
qua phải

b. Ví dụ
Xét văn phạm 𝐺({𝑆, 𝐴}, {𝑎, 𝑏}, 𝑆, 𝑃), trong đó P gồm có:
𝑆 → 𝑎𝐴𝑆 |𝑎
𝐴 → 𝑆𝑏𝐴|𝑆𝑆 |𝑏𝑎
Một cây dẫn xuất từ văn phạm có dạng như hình 1 sau:
Ta thấy, nút 1 có nhãn S và các con của nó lần lượt là 𝑎, 𝐴, 𝑆 (chú ý 𝑆 →
𝑎𝐴𝑆 là một luật sinh). Tương tự, nút 3 có nhãn 𝐴 và các con của nó là 𝑆, 𝑏, 𝐴
(từ luật sinh 𝐴 → 𝑆𝑏𝐴). Nút 4,5 có cùng nhãn 𝑆 và có nút con nhãn 𝑎 (luật sinh
𝑆 → 𝑎). Cuối cùng nút 7 có nhãn 𝐴 và có các nút con 𝑏, 𝑎 (luật sinh 𝐴 → 𝑏𝑎)
Trên cây dẫn xuất, nếu ta đọc các lá theo thứ tự từ “trái sang phải” thì
ta có một dạng câu

Sinh viên thực hiện: Nhóm 7

15


Hình 1:Cây dẫn xuất từ văn phạm

Một cây con (subtree) của cây dẫn xuất có nút gốc nhãn là 𝐴 còn được
gọi là 𝐴 − 𝑐â𝑦. Cây con cũng giống như cây dẫn xuất, chỉ kahcs là nhãn của
nút gốc không nhất thiết phải là kí hiệu bắt đầu 𝑆.

c. Tính chất
Định lý: Cho một văn phạm phi ngữ cảnh 𝐺, một xâu 𝑤 là được sản
sinh bởi 𝐺 (𝑆 →∗𝐺 𝑤) khi và chỉ khi có một cây dẫn xuất của văn phạm đó mà
biên của nó là 𝑤
Chứng minh:
Định lý 2 được khẳng định khi ta chứng minh một tính chất tổng quát
hơn một chút là:
Với mọi kí hiệu không kết thúc 𝐴, 𝐴 →∗𝐺 𝑢 khi và chỉ khi tồn tại một
𝐴 − 𝑐â𝑦 có biên là 𝑢
Phép chứng minh được thực hiện theo hai chiều (khi và chỉ khi)
+ Trước hết ta giả thiết 𝑢 là biên của một 𝐴 − 𝑐â𝑦 và ta chứng minh
rằng 𝐴 →∗𝐺 𝑢, bằng quy nạp trên số m các đỉnh trong của cây.
*m=1:
Đặt 𝑢 = 𝑋1 𝑋2 . . 𝑋𝑘 và 𝐴 → 𝑢 ∈ 𝑃. Vậy 𝐴 →∗ 𝑢
*m>1: Giả thiết rằng kết luận là đúng với mọi cây có không quá m-1
đỉnh trong và xét một 𝐴 − 𝑐â𝑦 có m đỉnh trong. Giả sử 𝑋1 , 𝑋2 , … , 𝑋𝑘 là các
hậu duệ trực tiếp (con) của gốc 𝐴.
Chúng đều là gốc của các 𝑋𝑖 − 𝑐â𝑦, 1 ≤ 𝑖 ≤ 𝑘, mà số các đỉnh trong là
ít hơn m. Bởi giả thiết quy nạp, ta có 𝑋𝑖 →∗ 𝑢𝑖 , trong đó 𝑢𝑖 là biên của 𝑋𝑖 −
𝑐â𝑦 (𝑢𝑖 = 𝑋𝑖 nếu 𝑋𝑖 ∈ 𝑁). Bằng cách hợp thành các dẫn xuất ta
có:𝐴 →𝐺 𝑋1 𝑋2 … 𝑋𝑘 →∗𝐺 𝑢1 𝑢2 … 𝑢𝑘 . Mặt khác, nếu 𝑖 < 𝑗 thì 𝑋𝑖 và mọi hậu duệ
của nó luôn luôn ở bên trái 𝑋𝑗 cùng với các hậu duệ của nó. Vậy, 𝑢 =
𝑢1 𝑢2 … 𝑢𝑘 là biên của 𝐴 − 𝑐â𝑦, cho nên ta có 𝐴 →∗𝐺 𝑢.
Sinh viên thực hiện: Nhóm 7

16



+ Bây giờ ta giả thiết 𝐴 →∗𝐺 𝑢 và ta sẽ chứng minh, bằng quy nạp trên
độ dài n của dẫn xuất, rằng tồn tại một 𝐴 − 𝑐â𝑦 có biên là 𝑢.
*n=1: Khi đó 𝐴 → 𝑢 ∈ 𝑃 và ta có một 𝐴 − 𝑐â𝑦 với biên là 𝑢 =
𝑋1 𝑋2 … 𝑋𝑘
*n>1: Giả thiết rằng với mọi ký hiệu không kết thúc 𝐴, nếu ta có một
cây dẫn xuất 𝐴 →∗ 𝑢 mà độ dài là nhỏ thua n, thì ta có một 𝐴 − 𝑐â𝑦 có biên
giới là 𝑢. Hãy xét một dẫn xuất 𝐴 →∗ 𝑢 có độ dài n. Giả sử 𝐴 → 𝑋1 𝑋2 … 𝑋𝑘 là
sản xuất được dùng trong bước thứ nhất của dẫn xuất, nghĩa là
𝐴 →𝐺 𝑋1 𝑋2 … 𝑋𝑘 →∗𝐺 𝑢. Bằng cách phân rã các dẫn xuất phi ngữ cảnh ta có
𝑢 = 𝑢1 𝑢2 … 𝑢𝑘 và 𝑋𝑖 →∗𝐺 𝑢𝑖 , 1 ≤ 𝑖 ≤ 𝑘. Vì rằng độ dài của mỗi dẫn xuất
𝑋𝑖 →∗𝐺 𝑢𝑖 , 1 ≤ 𝑖 ≤ 𝑘 là nhỏ thua n, cho nên tồn tại một 𝑋𝑖 − 𝑐â𝑦, 1 ≤ 𝑖 ≤ 𝑘 có
biên là 𝑢𝑖 . Từ đó ta có thể thành lập một 𝐴 − 𝑐â𝑦 bằng cách nối gốc 𝐴 với gốc
của mỗi 𝑋𝑖 − 𝑐â𝑦, 1 ≤ 𝑖 ≤ 𝑘. 𝐴 − 𝑐â𝑦 đó có biên là xâu 𝑢 = 𝑢1 𝑢2 … 𝑢𝑘
(đpcm)

d. Dẫn xuất trái, phải và tính nhập nhằng
Như đã thấy ở trên, một cây dẫn xuất mà kết quả là 𝑢 tương ứng với
nhiều dẫn xuất 𝑆 →∗ 𝑢. Trong số các dẫn xuất này , ta chú ý đặc biệt tới hai
dẫn xuất sau:
+ Dẫn xuất trái, đó là dẫn xuất mà trong đó, ở mỗi bước, ký hiệu được
thay thế luôn luôn là ký hiệu không kết thúc nằm bên trái nhất trong dạng câu.
+ Dẫn xuất phải, đó là dẫn xuất mà trong đó, ở mỗi bước, ký hiệu được
thay thế luôn luôn là ký hiệu không kết thúc nằm bên phải nhất trong dạng câu.
Dễ dàng chứng minh được rằng có một song ánh giữa các cây dẫn xuất
của một văn phạm 𝐺 với dẫn xuất trái (phải)
Một văn phạm phi ngữ cảnh 𝐺(𝑁, 𝑇, S, 𝑃) là nhập nhằng nêu tồn tại một
xâu 𝑤 ∈ (𝑁 ∪ 𝑇)∗ cùng là kết quả của hai cây dẫn xuất khác nhau.
Cùng một ngôn ngữ có thể được sinh ra từ vô hạn các văn phạm khác

nhau, trong đó có văn phạm là nhập nhằng, có văn phạm là không nhập nhằng.
một ngôn ngữ phi ngữ cảnh được nói là nhập nhằng cố hữu, hay nói gọn là
nhập nhằng , nếu tất cả các văn phạm sinh ra nó đều nhập nhằng . Người ta
chứng minh rằng tồn tại những ngôn ngữ như vậy!

Sinh viên thực hiện: Nhóm 7

17


4. Văn phạm tuyến tính
4.1. Văn phạm tuyến tính
a. Định nghĩa
 Văn phạm tuyến tính phải:
Văn phạm tuyến tính mà mỗi qui tắc có ký hiệu không kết thúc nằm ở
phía bên phải của vế phải.Tức luật sinh có dạng: AxB, Ax
 Văn phạm tuyến tính trái:
Văn phạm tuyến tính mà mỗi qui tắc có ký hiệu không kết thúc nằm ở
phía bên trái của vế phải. Tức luật sinh có dạng: ABx, Ax

b. Ví dụ
-

-

-

Văn phạm phi ngữ cảnh G1 có các qui tắc
S aCa,
C aCa | b là văn phạm tuyến tính.

Văn phạm phi ngữ cảnh G2 có các qui tắc
S aC,
C aC | a là văn phạm tuyến tính trái.
Văn phạm phi ngữ cảnh G3 có các qui tắc
S Aa,
A c | Ba,
B abc là văn phạm tuyến tính trái.

Xây dựng văn phạm tuyến tính phải từ văn phạm tuyến tính
trái
a. Bài toán
4.2.

Input: Văn phạm tuyến tính trái Gt = (N, , S, Pt).
Output: Văn phạm tuyến tính trái Gp = (N, , S, Pp).

b. Thuật toán
-

Ứng với luật sinh Gt ABv ta xây dựng luật sinh Gp AvRB
Ứng với luật sinh Av ta xây dựng luật sinh Gp AvR
L(Gt)=L(Gp)R

c. Ví dụ
Cho văn phạm tuyến tính trái có qui tắc
X 
Y 
Z 
U  Ua | Za | 
ta xây dựng được văn phạm tuyến tính phải có qui tắc như sau :

X 
Y 
Sinh viên thực hiện: Nhóm 7

18


Z 
U  aU | aZ | 

Sinh viên thực hiện: Nhóm 7

19


5. Sự tương đương giữa văn phạm chính quy và otomat hữu hạn
5.1. Sự tương đương giữa văn phạm chính quy và otomat hữu
hạn
Văn phạm chính quy mô tả ngôn ngữ chính quy khi và chỉ khi nó được
sinh ra từ văn phạm tuyến tính trái hoặc văn phạm tuyến tính phải. Kết quả
này được xác định bởi hai định lý sau:
Định lý 5.1 Ngôn ngữ được sinh ra từ văn phạm chính quy là ngôn ngữ chính
quy.
Chứng minh:
Trước hết, ta giả sử L = L(G) với một văn phạm tuyến tính phải G(N,
T, S, P). Ta xây dựng một NFA - M (Q, A, δ, [S], [ε]) mô phỏng các dẫn xuất
trong G.
Q bao gồm các trạng thái có dạng [α] với α là S hoặc chuỗi hậu tố của
vế phải một luật sinh nào đó trong P.
Ta định nghĩa δ như sau :

Nếu A là một biến, thì δ([A], ε) = {[α] | A → α là một luật sinh}
Nếu a thuộc VT và α thuộc (N + T)*, thì δ([aα], a) = {[α]}
Sau đó, ta có thể dễ dàng chứng minh quy nạp theo độ dài của dẫn xuất
rằng δ ([S], w ) chứa [α] khi và chỉ khi có chuỗi dẫn xuất S ⇒ * xA ⇒ xy α
với A → y α là một luật sinh trong P và xy = w, hay nếu α = S thì w = ε . Khi
[ ε ] là trạng thái kết thúc duy nhất, M chấp nhận w khi và chỉ khi S ⇒ * xA
⇒ w. Nhưng vì mọi chuỗi dẫn xuất cho một chuỗi ký hiệu kết thúc qua ít nhất
1 bước, nên ta thấy rằng M chấp nhận w khi và chỉ khi G sinh ra w. Vì vậy,
mọi văn phạm tuyến tính phải đều sinh ra một ngôn ngữ chính quy.
Bây giờ, giả sử G(N, T, S, P) là một văn phạm tuyến tính trái. Đặt văn
phạm G’(N, T, S, P’) với P’ chứa các luật sinh của P có vế phải đảo ngược,
nghĩa là :
P’ = { A → α | A → αR ∈ P }
Nếu ta đảo ngược chuỗi vế phải các luật sinh trong một văn phạm tuyến
tính trái, ta có văn phạm tuyến tính phải, và ngược lại. Do đó, hiển nhiên chúng
ta có G’ là một văn phạm tuyến tính phải, và cũng dễ dàng để chỉ ra rằng L(G’)
= L(G)R. Theo chứng minh trên, ta có L(G’) là một tập chính quy. Mà thông
thường một tập chính quy cũng vẫn còn giữ nguyên tính chất khi áp dụng phép
đảo ngược nên L(G’)R = L(G) cũng là một tập chính quy.

Sinh viên thực hiện: Nhóm 7

20


Vậy, mọi văn phạm tuyến tính trái hay phải đều sinh ra một tập hợp
chính quy.
Định lý 5.2 Nếu L là một ngôn ngữ chính quy, thì L được sinh từ một văn
phạm tuyến tính trái hoặc một văn phạm tuyến tính phải nào đó.
Chứng minh:

Đặt L = L(M) với DFA M(Q, Σ, δ, q0, F).
Trước hết, ta giả sử rằng trạng thái q0 không phải là trạng thái kết thúc.
Kế tiếp, ta đặt L = L(G) với văn phạm tuyến tính phải G(V, Σ, P, q0), trong đó
P chứa các luật sinh dạng p → aq nếu δ(p, a) = q và luật sinh dạng p → a nếu
δ(p, a) là một trạng thái kết thúc. Rõ ràng δ(p, w) = q khi và chỉ khi có chuỗi
dẫn xuất p ⇒*wq. Nếu wa được chấp nhận bởi M, ta đặt δ(q0, w) = p, suy ra
dẫn xuất q0⇒*wq. Tương tự, nếu δ(p, a) là trạng thái kết thúc, vì p → a là một
luật sinh, nên q0⇒*wa. Ngược lại, đặt q0⇒*x. Ta có x = wa và q0⇒*wq ⇒wa
với mọi p. Và vì δ(q0, w) = p và δ(p, a) là trạng thái kết thúc nên do đó x ∈
L(M). Hay nói cách khác : L(M) = L(G) = L.
Bây giờ, xét q0∈ F, vì thế chuỗi rỗng ε thuộc L. Lưu ý rằng văn phạm
G vừa định nghĩa ở trên chỉ sinh ra ngôn ngữ L – {ε}. Chúng ta có thể sửa đổi
G bằng cách thêm vào một ký hiệu bắt đầu S mới với luật sinh S → q0 | ε. Văn
phạm thu được vẫn có dạng tuyến tính phải và phát sinh ngôn ngữ L.
Để phát sinh một văn phạm tuyến tính trái cho L, ta bắt đầu với một
NFA cho LR và sau đó đảo ngược chuỗi vế phải cho tất cả mọi luật sinh của
văn phạm tuyến tính phải vừa thu được

5.2. Xây dựng NFA từ văn phạm tuyến tính phải
a. Bài toán
Input: Văn phạm tuyến tính phải
Gp = (N, T, S, P)
Với N = {N0=S, N1, …}
T = {a1, a2, …}
Output: Otomat không đơn định
M = (Q, ∑, δ, q0, F)

b. Thủ tục Gp to NFA
B0: Xác định bảng chữ cái
∑=T

B1: Khởi tạo tập trạng thái
Sinh viên thực hiện: Nhóm 7

21


Ứng với mỗi biến Vi của văn phạm ta xây dựng một trạng thái
mang nhãn Ni cho NFA, tưc là:
N⊂Q
B2: Xác định trạng thái bắt đầu q0
Ứng với biến khởi đầu N0, trạng thái N0 của NFA sẽ trờ thành
trạng thái khởi đầu, tức là:
q0 = N0.
B3: Xác định tập trạng thái kết thúc F
Nếu trong văn phạm có một luật sinh nào đó dạng:
Ni  a1a2…am
thì thêm vào NFA một và chỉ một trạng thái kết thúc [ε]
B4: Ứng với mỗi luật sinh của văn phạm có dạng
Ni  a1a2…amNj
Thì thêm vào NFA các chuyển trạng thái
δ(Ni, a1a2…am) = Nj
B5: Ứng với mỗi luật sinh dạng
Ni  a1a2…am
Thì thêm vào NFA các chuyển trạng thái
δ(Ni, a1a2…am) = [ε]

c. Ví dụ
Xây dựng NFA chấp nhận ngôn ngữ của văn phạm sau:
G = (N, T, S, P)
Với N = {S, A}

T = {a, b}
P:
S  aA | ba
A  aA | abS | b
Giải
B0: ∑ = T = {a, b}
B1: Do S, A ∈ N nên thêm S, A vào Q
Q = {[S], [A]}
B2: Trạng thái bắt đầu: q0 = S
B3: Do tồn tại luật sinh (S  ba) nên ta thêm trạng thái kết thúc [ε] vào
Q
Q = {[S], [A], [ε]}
F = {[ε]}

B4:
- Do (S  aA) nên thêm hàm chuyển δ(S, a) = A
- Do (S  ba) nên thêm hàm chuyển δ(S, b) = [a] và δ([a], a) = [ε]
Sinh viên thực hiện: Nhóm 7

22


Làm tương tự, cuối cùng ta có NFA

d. Thuật toán

Sinh viên thực hiện: Nhóm 7

23



5.3. Xây dựng văn phạm tuyến tính từ NFA
a. Bài toán
Intput: Otomat không đơn định
M= (Q, ∑, δ, q0, F)
Với Q = {q0, q1, …}
∑ = {a1, a2, …}
Output: Văn phạm tuyến tính phải
Gp = (N, T, S, P)

Sinh viên thực hiện: Nhóm 7

24


b. Thủ tục NFA to Gp
B0: Xác định tập kí tự kết thúc
T=∑
B1: Xác định tập kí tự chưa kết thúc, kí tự bắt đầu
Biến mỗi trạng thái trong NFA thành một kí tự chưa kết thúc
trong văn phạm
N = Q, S = q0
B2: Với mỗi hàm chuyển trạng thái
δ(qi, aj) = qk của M,
ta xây dựng luật sinh tuyến tính phải tương ứng:
qi  ajqk
B3: Đối với mỗi trạng thái qf ∈ F, ta xây dựng luật sinh

qf  ε


c. Ví dụ
Xây dựng văn phạm tuyến tính phải cho NFA sau:

Giải
B0:
B1:

T = ∑ = {a, b}
N = {Q0, Q1, Q2}
S = Q0

B2:
- Vì δ(q0, b) = q0 nên ta có luật sinh Q0  bQ0
- Vì δ(q0, a) = q1 nên ta có luật sinh Q0  aQ1
- Vì δ(q1, b) = q1 nên ta có luật sinh Q1  bQ1
- Vì δ(q1, a) = q2 nên ta có luật sinh Q1  aQ2
- Vì δ(q2, a) = q1 nên ta có luật sinh Q2  aQ1
- Vì δ(q2, b) = q2 nên ta có luật sinh Q2  bQ2
B3 : Vì q2 ∈ F nên ta có luật sinh
Q2  ε
Vậy ta được văn phạm G = ({Q0, Q1, Q2}, {a, b}, Q0, P)
P = {Q0  bQ0,
Q0  aQ1,
Q1  bQ1,
Sinh viên thực hiện: Nhóm 7

25



×