- Xuất xứ và định nghĩa của VPPNC - Cây suy dẫn và sự nhập nhằng trong VPPNC - Văn phạm chính quy - Giản lược các VPPNC - Dạng chuẩn Chomsky - Một số bài toán quyết định đối với các NNPNC

You might also like

Download as pptx, pdf, or txt
Download as pptx, pdf, or txt
You are on page 1of 28

CHƯƠNG 3: VĂN PHẠM PHI NGỮ CẢNH (VPPNC)

VÀ VĂN PHẠM CHÍNH QUY (VPCQ)

1 • Xuất xứ và định nghĩa của VPPNC


2 • Cây suy dẫn và sự nhập nhằng trong VPPNC
3 • Văn phạm chính quy
4 • Giản lược các VPPNC
5 • Dạng chuẩn Chomsky
6 • Một số bài toán quyết định đối với các NNPNC
1. XUẤT XỨ VÀ ĐỊNH NGHĨA CỦA VPPNC
1.1. Xuất xứ: từ việc mô tả các ngôn ngữ tự nhiên
<Chủ ngữ> → <Danh ngữ> <Câu> <Câu> → <Chủ ngữ> <Vị ngữ>
... <Chủ ngữ> <Vị ngữ>
<Danh từ> → <Bò>
... <Danh ngữ> <Động từ> <Bổ ngữ>

<Danh từ> <Tính từ> <Danh ngữ>

<Danh từ> <Tính từ>

Bò vàng gặm cỏ non


1. XUẤT XỨ VÀ ĐỊNH NGHĨA CỦA VPPNC
1.1. Xuất xứ: từ việc mô tả các ngôn ngữ tự nhiên
- Các quy tắc cú pháp như <Câu> → <Chủ ngữ> <Vị ngữ>
chính là thuộc dạng các quy tắc trong VPPNC.
- Ban đầu các nhà ngôn ngữ học đã đặt hy vọng vào mô
hình văn phạm phi ngữ cảnh. Nhưng khi nghiên cứu
thêm thì các nhà ngôn ngữ thấy mô hình này còn quá
chật hẹp, khó diễn tả hết được sự phong phú và linh
hoạt trong các ngôn ngữ tự nhiên.
1. XUẤT XỨ VÀ ĐỊNH NGHĨA CỦA VPPNC
1.1. Xuất xứ: từ việc mô tả các ngôn ngữ tự nhiên
- Chính các nhà Tin học, với nhu cầu biểu diễn các ngôn ngữ lập trình, đã tìm
thấy ở VPPNC một khuôn khổ thích hợp.
VD: Biểu thức: (db + db) * db
được sinh ra như sau:

- Việc nghiên cứu các VPPNC đã 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 trình dịch.
1. XUẤT XỨ VÀ ĐỊNH NGHĨA CỦA VPPNC
1.2. Định nghĩa VPPNC
Một VPPNC là một hệ thống:
G = (, , P, S), trong đó:
+  là tập hữu hạn các ký hiệu kết thúc (ký hiệu cuối)
+  là tập hữu hạn các ký hiệu không kết thúc (ký hiệu trung
gian hay biến),   =
+ S   gọi là ký hiệu đầu
+ P là tập hữu hạn các sản xuất có dạng: (bị hạn chế)
A

Dạng tổng quát: , 


1. XUẤT XỨ VÀ ĐỊNH NGHĨA CỦA VPPNC
1.3. Ngôn ngữ sản sinh bởi VPPNC
- Một VPPNC tạo thành một hệ viết lại sản sinh:
W = (V, P) với tiên đề {S}, với cách thiết lập quan hệ suy dẫn
trực tiếp (=>) và suy dẫn (=>* ) như trong chương 1
- Từ đó ngôn ngữ sản sinh bởi văn phạm G được định nghĩa là:
L(G) = {w | w  * và S =>* w}
- L(G) được gọi là một ngôn ngữ phi ngữ cảnh (NNPNC)
- Hai văn phạm G1 và G2 được gọi là tương đương khi và chỉ
khi L(G1) = L(G2)
- Nếu S =>* và (
1. XUẤT XỨ VÀ ĐỊNH NGHĨA CỦA VPPNC
1.4. Quy ước về cách viết
1. XUẤT XỨ VÀ ĐỊNH NGHĨA CỦA VPPNC
VD: Cho trước VPPNC, tìm ngôn ngữ

Bài tập thêm: Tìm ngôn ngữ được sản sinh bởi các VPPNC:
a) G = ({a, b}, {S,}, S, {S aS | Sbb | c}
b) G = ({0, 1}, {S, A}, S, {S 0A, A A1 | 00)
1. XUẤT XỨ VÀ ĐỊNH NGHĨA CỦA VPPNC
Bài tập: Cho trước ngôn ngữ, Lập VPPNC

Bài tập thêm: { dj ej ai+1 bi | i, j 1}, { ai (bc)j di | i, j1}, { ai+2 (bc)j di | i, j1}
2. CÂY SUY DẪN VÀ SỰ NHẬP NHẰNG TRONG VPPNC
Bài tập: Tìm suy dẫn bên trái nhất, suy dẫn bên phải
2.1. Cây suy dẫn nhất của xâu aaaabaa và lập cây suy dẫn của suy dẫn đó.
Thí dụ 3.3: Xét VPPNC G có tập sản xuất là:
1) S aAS 2) S a - Cây suy dẫn tương ứng:
3) A SbA 4) A SS 5) Aba 1
- Giả sử có suy dẫn:
2
1 3 2 2 5 3
S=>aAS=>aSbAS=>aSbAa=>aabAa=>aabbaa
- Nếu đọc các nhãn của các nút lá theo thứ tự từ trái 2 5
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, VD: aabbaa
- Một cây suy dẫn ứng với nhiều suy dẫn. Các suy dẫn này có
cùng độ dài vì cùng áp dụng một số các sản xuất như nhau và
chỉ khác nhau ở thứ tự áp dụng các sản xuất. 1 3 2 5 2
S=>aAS=>aSbAS=>aabAS=>aabbaS=>aabbaa
- Suy dẫn bên trái nhất (thay biến bên trái trước) :
1 2 3 5 2
- Suy dẫn bên phải nhất (thay biến bên phải trước:S=>aAS=>aAa=>aSbAa=>aSbbaa=>aabbaa
2. CÂY SUY DẪN VÀ SỰ NHẬP NHẰNG TRONG VPPNC
2.2. Sự nhập nhằng trong VPPNC

Thí dụ 3.5: Xét VPPNC


G, có tập sản xuất là: Cách phân tích 1: Cách phân tích 2:
E E+E | E*E | (E) | a
Khi đó xâu: a + a * a
Sẽ có 2 cách phân tích:

Bài tập về nhà: 3.2, 3.3


3. VĂN PHẠM CHÍNH QUY (VPCQ)
3.1. Định nghĩa VPCQ
- Một VPPNC được gọi là một văn - Một VPPNC được gọi là một văn
phạm chính quy phải (VPCQP) phạm chính quy trái (VPCQT) nếu
nếu các sản xuất của nó chỉ có hai các sản xuất của nó chỉ có hai
dạng: dạng:
1) A aB (biến bên phải) 1) A Ba (biến bên trái)
2) A a, với a và A, B 2) 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à VPCQ.
- Người ta lấy từ “chính quy” để đặt tên cho các văn phạm trên bởi 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 ÔH, hay được chỉ định bởi các BTCQ.
3. VĂN PHẠM CHÍNH QUY (VPCQ)
3.2. Cách Lập VPCQP tương đương với ÔH
Cho ÔH M=(, Q, , q0, F)
Tìm VPCQP tương đương G = (, , P, S), với:
- = Q VD: Cho ÔH: a
- S= q0 Đầu a b
A B C
- Tập sản xuất P được tính như sau:
Có VPCQP tương đương là:
1) Nếu (q, a) = p thì có sản xuất:
- = {A, B, C}
a
q ap q p - A là ký hiệu đầu
2) Nếu (q, a)  F thì có sản xuất: - P={A aB, bC, b
a C aC, C a}
qa q p Ngôn ngữ xác định L= { aban, n ≥ 0}
3. VĂN PHẠM CHÍNH QUY (VPCQ)
3.3. Định nghĩa văn phạm tuyến tính (VPTT)
- Một VPPNC được gọi là một văn - Một VPPNC được gọi là một văn
phạm tuyến tính phải (VPTTP) nếu phạm tuyến tính trái (VPTTT) nếu
các sản xuất của nó chỉ có hai các sản xuất của nó chỉ có hai
dạng: dạng:
1) A xB (biến bên phải) 1) A Bx (biến bên trái)
2) A x, với x+ và A, B   2) 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
- Các văn phạm tuyến tính phải và trái được gọi chung là VPTT.
- VPTT <=> VPCQ
3. VĂN PHẠM CHÍNH QUY (VPCQ)
3.4. Cách Lập VPTTP tương đương với ÔH
- Tương tự cách lập VPCQP tương đương với ÔH, chỉ khác là có thể
bỏ các trạng thái trung gian (chỉ đi một hướng) a Bài tập
VD: Cho ÔH: a Đầu b a
A B C
Đầu a b
A B C
a b
Có VPCQP tương đương là: D
- = {A, B, C} Có VPTTP tương đương là:
- A là ký hiệu đầu - = {A, C}
- P={A aB, bC, b - A là ký hiệu đầu
C aC, C a} - P={A abC, A ab,
Ngôn ngữ xác định L= { aban, n ≥ 0}
C aC, C a}
3. VĂN PHẠM CHÍNH QUY (VPCQ)
3.5. Tóm tắt các kết quả của lớp các NNCQ

Bài tập: 3.4, 3.5, 3.8, 3.11


4. GIẢN LƯỢC CÁC VPPNC
4.1. Các ký hiệu vô ích
Thường thì một VPPNC có thể còn chứa đựng nhiều yếu
tố thừa, vô ích, chẳng hạn có những ký hiệu không thực sự
tham gia vào quá trình sản sinh xâu, hoặc có những sản xuất
như A B làm kéo dài các suy dẫn một cách không cần thiết.

Bởi vậy, việc giản lược VPPNC là nhằm loại bỏ


những yếu tố vô ích đó, mà không làm giảm bớt khả
năng sản sinh xâu của văn phạm.
4. GIẢN LƯỢC CÁC VPPNC
4.1. Các ký hiệu vô ích
- Cho G = (, , P, S) là một VPPNC. Ta nói một ký hiệu X là có ích nếu có một suy dẫn:
S =>* =>* w, với (và w . Có hai khía cạnh cần xem xét:
1) Từ X có thể suy dẫn ra một xâu các ký hiệu cuối nào đó, nên X
được gọi là hữu sinh, ngược lại là vô sinh.
2) X phải xuất hiện trong một xâu suy dẫn từ S, nên X được gọi là đến được, ngược lại là
không đến được.
- Tuy nhiên nếu X thỏa mãn cả 2 điều kiện trên thì cũng chưa đủ để đảm bảo rằng X là có ích.
Còn X không thỏa mãn một trong hai điều trên thì chắc chắn X là vô ích.
VD: Cho VPPNC G với tập sản xuất P={S Ac | aCB, b, D a|b, ba}
- Nhận thấy ký hiệu B là hữu sinh do có b và B là đến được do có: S =>* aCB. Nhưng xâu
aCB không thể suy dẫn ra xâu các ký hiệu cuối. Nên B vẫn là vô ích. Do ảnh hưởng bởi C

Chú ý: Muốn loại ký hiệu vô ích, thì phải loại ký hiệu vô sinh trước, loại không đến được sau.
4. GIẢN LƯỢC CÁC VPPNC
4.2. Cách loại ký hiệu vô sinh
- Cho VPPNC G = (, , P, S) VD: Cho VPPNC G với tập sản xuất P như sau:
- Cần tìm G’ = (, ’, P’, S) không chứa P={S Ac | aCB,
các ký hiệu vô sinh sao cho G’  G. b, D a|b, ba}
Giải thuật tính ’ : VPPNC G’ không chứa ký hiệu vô sinh và tương
đương với VPPNC G là:
1) Đưa vào ’ các biến hữu sinh trực
tiếp (lấy từ các sản xuất có vế phải là xâu G’ = (, ’, P’, S), trong đó:
kết thúc). - Tập ’ được tính như sau:
2) Đưa vào ’ các biến hữu sinh gián + Vì Bb, Da|b, E ba, nên ’={B, D, E}bố, mẹ
tiếp A sao cho A X1X2 … Xn , trong đó Xi + Vì , nên ’={B, D, E, A} ông, bà
hoặc là ký hiệu cuối, hoặc là biến đã
+ Vì S Ac, nên ’={B, D, E, A, S} cụ
thuộc ’ (lặp lại bước này khi xét hết các
sản xuất thuộc tập P). - Từ đó tính tập P’ gồm các sản xuất sau:
Giải thuật tính P’ : Chỉ đưa vào P’ các sản P’ ={S Ac,
xuất của P có tất cả các biến  ’ .
Bài tập về nhà: 3.16 Bài tập: Cho VPPNC G’ với tập sản xuất P’ như sau:
4. GIẢN LƯỢC CÁC VPPNC P’={S bA, A aCa,
4.3. Cách loại ký hiệu không đến B b | được
DA, C DaD, D a}
- Cho VPPNC G’ = (, ’, P’, S) VD: Cho VPPNC G’ với tập sản xuất P’ như sau:
- Cần tìm G”=(”, ”, P”, S) không chứa P’={S Ac,
các ký hiệu không đến được (G”  G’).
Giải thuật tính ” và ”: VPPNC G” không chứa ký hiệu không đến được
1) Khởi tạo: ”={S}, ” = và tương đương với VPPNC G’ là:
2) Nếu biến A đã được đưa vào ” và G”=(”, ”, P”, S), trong đó:
A 12|…| n , thì ta đưa mọi biến trong 12, - Tập ” và ” được tính như sau:
…, n vào ” và mọi ký hiệu kết thúc trong + Trước tiên: ”={S}, ” = Trung ương
12, …, n vào ” (lặp lại bước này cho đến
+ Vì S Ac, nên ”={S, A}, ”={c} Tỉnh
khi không thêm được ký hiệu mới vào ”
và ”). + Vì , nên ”={S, A, E}, ”={c, a} Huyện
Giải thuật tính P” : Chỉ đưa vào P” các + Vì, nên ”={c, a, b} Xã
sản xuất của P’ có các biến  ” , các ký - Từ đó tính tập P” gồm các sản xuất sau:
hiệu kết thúc  ”. P”={S Ac,
P={S BA, A a | aBb | B Abb | }
4. GIẢN LƯỢC CÁC VPPNC
4.4. Loại các – sản xuất (dạng A )
- Nếu L(G) thì ta không thể loại hết được các – sản xuất, nhưng nếu không thuộc L(G), thì có
thể loại hết chúng ra khỏi G theo hai bước sau: (biến A là triệt tiêu được nếu: A )
Giải thuật tính tập triệt tiêu được : VD: Cho VPPNC G có tập sản xuất P như sau:
1) Đưa vào các biến A lấy từ các sản xuất P={SAab, AB, Bb
dạng: A (triệt tiêu trực tiếp). Tìm VPPNC G’ không chứa các – sản xuất:
2) Đưa vào các biến B, sao cho B và mọi - Tính tập triệt tiêu được :
ký hiệu trongđều triệt tiêu được (triệt tiêu + Vì B, C, nên ={B, C}
gián tiếp) (lặp lại bước này). + Vì ABBC, nên ={B, C, A}
Giải thuật tính P’: Nếu A X1X2 … Xn thì - Từ đó tập sản xuất P’ được tính như sau:
đưa vào P’ sản xuất này và các sản xuất là + Từ Bb, ta có BbBb
mọi trường hợp có thể khi cho các Xi về + Từ SAab, ta có SAab
(nếu Xi triệt tiêu được). Nhưng không đưa + Từ ABBC, ta có AB| BC | BB | B | C
vào sản xuất A nếu có. Cuối cùng nếu Vậy tập sản xuất P’ là: P’={S Aab ,
L(G) thì đưa thêm vào P’ sản xuất S . AB| BC | BB | B | C, BbB b, C
4. GIẢN LƯỢC CÁC VPPNC
4.5. Loại các sản xuất đơn (dạng A B)
Chú ý: Sản xuất dạng A , a không phải là sản xuất đơn
- Cho VPPNC G’ = (, , P’, S) VD: Cho VPPNC G’ có tập sản xuất P’ như sau:
- Cần tìm G”=(, , P”, S) không chứa P’={S Aab , AB| BC | BB | B | C,
các sản xuất đơn sao cho G”  G’. BbBb, Ca
Giải thuật tính P”: Tìm VPPNC G” không chứa các sản xuất đơn:
1) Đưa vào P” các sản xuất không đơn - Đưa vào P” các sx không đơn trong P’ gồm:
trong P’ S, AB| BC | BB
BbBb, C
2) Nếu có AB và B không là sx đơn - Đưa vào P” các sx mới thay thế cho sx đơn:
+ Vì AB, ta có AbB b
thì đưa vào P” sản xuất: A
+ Vì AC, ta có Aa
Vậy tập sản xuất P’’ là:
P”={S Aab, AB | BC | BB | bBb | a,
BbB b, C
5. DẠNG CHUẨN CHOMSKY
Tập sản xuất chỉ có hai dạng: 1) A BC và 2) A a
VD: Tìm dạng chuẩn Chomsky cho VPPNC - Đưa các sản xuất có độ dài vế phải lớn hơn 2
G với tập sản xuất P={S AB, A bAB | a, về dạng chuẩn Chomsky:
B aBBA | bAa | Ab} + A CbAB được thay bởi A D1B
- Các sản xuất đã ở dạng chuẩn Chomsky là: D1 CbA
S AB, A a + B CaBBA được thay bởi B D2D3
- Đưa các sản xuất chưa ở dạng chuẩn D2 CaB
Chomsky về dạng vế phải chỉ chứa biến:
+ A bAB được thay bởi A CbAB D3 BA
+ B CbACa được thay bởi B D1Ca
Cb b
Vậy tập sản xuất P của VPPNC G được đưa về
+ B aBBA được thay bởi B CaBBA
dạng chuẩn Chomsky là:
Ca a P= {S AB, A D1B | a,
+ B bAa được thay bởi B CbACa B D2D3 | D1Ca | ACb ,
+ B Ab được thay bởi B ACb D1 CbA, D2 CaB, D3 BA , Ca a, Cb b}
CÁC BÀI ÔN TẬP

1) Tìm VPCQP, VPTTP tương ứng với BTCQ: (aba + bab)a


2) Loại các ký hiệu vô ích cho VPPNC G với tập sản xuất:
P={S bBa | AaD, bC, C aE a}
3) Loại các – sản xuất và các sản xuất đơn cho VPPNC G với tập sản xuất:
P={S aAC | B, bCa, C a | CB | }
4) Tìm dạng chuẩn Chomsky cho VPPNC G với tập sản xuất:
P={S bAa | BA, bBa | b }
5) Lập ÔHĐ đoán nhận các tên đặt đúng cú pháp là: Tên phải bắt đầu bằng
chữ cái, sau đó có thể là chữ cái hoặc chữ số.
6. MỘT SỐ BÀI TOÁN QUYẾT ĐỊNH ĐỐI VỚI NNPNC
6.1. Khái niệm bài toán quyết định
Có nhiều câu hỏi (bài toán) mà câu trả lời là CÓ hay KHÔNG có
thể đặt ra với các NNPNC. Với mỗi câu hỏi như thế, vấn đề không
phải là tìm cách giải cho một vài trường hợp cụ thể mà là tìm một
giải thuật chung cho mọi trường hợp. Bài toán như thế được gọi là
Bài toán quyết định.
Có những bài toán quyết định về NNPNC là không giải được
(tức là không tồn tại giải thuật), như bài toán “Phải chăng hai
NNPNC cho biết nào đó là tương đương”, hay bài toán “Phải
chăng một NNPNC cho biết là nhập nhằng”.
Sau đây ta xét một số bài toán quyết định giải được đối với
các NNPNC.
6. MỘT SỐ BÀI TOÁN QUYẾT ĐỊNH ĐỐI VỚI NNPNC
6.2. Bài toán về tính hữu hạn
Định lý 3.12: Tồn tại giải thuật để xác định phải chăng một NNPNC cho
biết bất kỳ là:
a) Rỗng VD: S AB, A a
b) Hữu hạn VD: S AB, A a, B b
1 2 3
c) Vô hạn VD: SAB, ABC, Bb, CBA | a
2
A

1 S C 3

B
1 2
SAB Ab BCb bCb bBAb bbAb bbBCb bbbCb bbbab
6. MỘT SỐ BÀI TOÁN QUYẾT ĐỊNH ĐỐI VỚI NNPNC
6.3. Bài toán thành viên
Định lý 3.13: Tồn tại giải thuật để xác định, với một VPPNC bất kỳ
G=(, , P, S) và một xâu bất kỳ x L(G)?
Có nhiều giải thuật cho bài toán thành viên này, sau đây là giải thuật CYK
(Cocke Younger Kasami)
- Giả sử VPPNC G đã ở dạng chuẩn Chomsky và |x| = n ≥ 1
- Gọi xij là xâu con của x tại vị trí i và có độ dài j
VD: với x = abc thì: + với j=1 có: x11 = a, x21 = b, x31 = c
+ với j=2 có: x12 = ab, x22 = bc, x32 = ? Không có
+ với j=3 có: x13 = x1n =abc, x23 = ? Không có
Cho trước độ dài xâu con là j, thì vị trí i của xâu con bị ràng buộc bởi:
1≤i≤n–j+1 (1 ≤ j ≤ n)
ểm tra xem các xâu sau có thuộc
6. L(G)
ôn ngữ MỘT haySỐ BÀI
không: TOÁN
aab, abb, aaaQUYẾT ĐỊNH ĐỐI VỚI NNPNC
6.3. Bài toán thành viên (xij là xâu con tại vị trí i và có độ dài j)
- Gọi ij = {A | A , A xij} Khi đó 1n = {A | A , A x1n=x}
Do vậy: + Nếu S 1n thì kết luận x L(G)
+ Nếu S 1n thì kết luận x L(G) Lập bảng tính các ij , x=bab
b a b
Thí dụ 3.13: Xét VPPNC G đã ở
dạng chuẩn Chomsky như sau: j i 1 2 3

1) S AB | BC 1 11={B} 21={A, C} 31={B}


2) A BA | a 2 12={S, A} 22={S, C}
CC | b
AB | a 3 13={S, C}
Cần kiểm tra xâu vào x=bab có Vì S 13, nên xâu bab L(G)
thuộc ngôn ngữ L(G) hay không? Kiểm tra: SBC bC bAB baB bab

You might also like