văn phạm phi ngữ cảnh Như ta đã biết một ngôn ngữ có thể được sinh bởi nhiều văn phạm khác nhau, trong đó có những văn phạm chứa những kí hiệu thừa, hoặc các qui tắc không giúp gì cho vi
Trang 1Chương 9 ôtômat pushdown và văn phạm phi ngữ cảnh
I văn phạm phi ngữ cảnh
Như ta đã biết một ngôn ngữ có thể được sinh bởi nhiều văn phạm khác nhau, trong đó có những văn phạm chứa những kí hiệu thừa, hoặc các qui tắc không giúp gì cho việc sinh ngôn ngữ Hiển nhiên các qui tắc như vậy sẽ làm mất thời gian cho quá trình sinh, do vậy ta cần loại các kí hiệu
và qui tắc thừa đó ra khỏi văn phạm Tức cần giản lược văn phạm đến mức gọn nhất có thể
1 Giản lược văn phạm phi ngữ cảnh
Đ
ịnh nghĩa 1 :
Kí hiệu A được gọi là kí hiệu vô sinh nếu không tồn tại * để A |- , ngược lại là kí hiệu hữu sinh
Kí hiệu A được gọi là không đến được nếu từ I không dẫn được đến nó, tức không xảy ra I |- , trong đó chứa A, ngược lại ta gọi A là đến được
Kí hiệu A được gọi là kí hiệu thừa nếu nó là kí hiệu vô sinh hoặc không đến được
Một qui tắc A được gọi là -qui tắc
Một qui tắc A B được gọi là qui tắc đơn
VÝ dô 1 : Cho tập R = {I aA | B, A aAb | , B cC, D aB }, khi đó B, C là kí hiệu vô
sinh, D là kí hiệu vô sinh và không đến được còn A là một -qui tắc
§Þnh lý 1 Đối với một ngôn ngữ phi ngữ cảnh L bất kỳ, ta luôn luôn xây
dựng được một văn phạm phi ngữ cảnh G không chứa kí hiệu thừa sao cho
L(G) = L
Chøng minh :
Để chứng minh ta lần lượt trình bày cách thức loại kí hiệu vô sinh và không đến được mà ngôn ngữ được sinh bởi văn phạm vẫn không thay đổi Giả thiết ngôn ngữ L được sinh bởi văn phạm phi ngữ cảnh G = <, , I, R>, ta xây dựng G’ = <’, ’, I’, R’> mà trong nó không chứa kí hiệu thừa
i Loại kí hiệu vô sinh :
Nhiệm vụ ở đây thay vì tìm kí hiệu vô sinh trong để loại, ta sẽ xây dựng lại từng bước tập ’ chỉ gồm toàn các kí hiệu hữu sinh, tức ’ , và A ’ nếu * : A |- Thuật toán được bắt đầu từ ’ = , bổ sung dần từng bước các kí hiệu hữu sinh của vào ’ bằng cách khảo sát từng luật dẫn trong R Thuật toán dừng khi tất cả các luật trong R đã được xét hết
Trang 2Thuật toán tìm kí hiệu hữu sinh (xem thuật toán sau) :
Proc Tạo_’ {
’ = ; loop = true;
while (R and loop) { loop = false;
R = R \ { r } ; loop = true;
break;
} }
}
Sau đó trên tập ’ đã xây dựng ta xây dựng tiếp R’
’ = ;
Repeat
lấy r R có dạng A X 1 X 2 … Xm với Xi ’, i.
nếu có : R = R \ {r}; ’ = {A}
Until không có;
VÝ dô 2 : R = I IA | a
A bB
B aA
’ = {I} và R’ = {I a}
VÝ dô 3 : R = I AB | CA
B BC | AB
A a
C aB | b
’ = {I, A, C} và R’ = {I CA, A a, C b}
ii Loại kí hiệu không đ ến đư ợc : Tương tự trên ta sẽ xây dựng dần tập ’ và ’ chứa các kí hiệu đến được như sau :
’ = {I}, ’ =
Lặp : Xét tất cả các luật dạng A , với A ’ (ví dụ đầu tiên A là I) Bổ sung các kí hiệu phụ trong vào ’ và kí hiệu kết thúc vào ’ Dừng khi hết luật trong R
Tiếp theo xây dựng lại R’
Trang 3’ = {I};};
Repeat
lấy r R có dạng A X 1 X 2 … Xm với A ’.
nếu có : R = R \ {r}; ’ = {Xi | Xi } ; Until không có;
Xây dựng lại ’ và R’ trên cơ sở ’
VÝ dô 4 : R = { I AB | a, A B, C D}
’ = {I}
I AB ’ = {I, A, B}
R’ = {I AB | a, A B}
§Þnh lý 2 Đối với một ngôn ngữ phi ngữ cảnh L bất kỳ, ta luôn luôn xây
dựng được một văn phạm phi ngữ cảnh G không chứa -qui tắc sao cho : L(G)
= L\ {}
Chøng minh :
Để chứng minh ta trình bày cách thức loại -qui tắc mà ngôn ngữ được sinh bởi văn phạm vẫn không thay đổi Giả thiết ngôn ngữ L được sinh bởi văn phạm phi ngữ cảnh G = <, , I, R>, ta xây dựng G’ = <’, ’, I’, R’> mà trong nó không chứa kí hiệu thừa
Duyệt từng qui tắc dạng A , loại qui tắc khỏi R và thay bằng qui tắc mới bằng cách : thay A bởi (loại A) trong mọi qui tắc có chứa A ở vế phải Mỗi vị trí của A sẽ sinh ra một qui tắc mới Qui tắc gốc vẫn giữ lại
Repeat
lấy r R có dạng A ; nếu có : { R = R \ {r}; while (r’ R có dạng A’) R = R { ’} ; Until không có;
VÝ dô 5 : R = { I AB, A aA, B bB, A , B }
I AB I AB | I A * I AB | I A | B | I AB | I A | B
B bB B bB | B b B bB | B b B bB | B b
A * A
* B
§Þnh lý 3 Đối với một ngôn ngữ phi ngữ cảnh L bất kỳ, ta luôn luôn xây
dựng được một văn phạm phi ngữ cảnh G không chứa kí hiệu qui tắc đơn sao
Trang 4cho L(G) = L.
Chøng minh :
Không mất tính tổng quát ta giả thiết ngôn ngữ L được sinh bởi văn phạm phi ngữ cảnh G = <,
, I, R> không có kí hiệu thừa, ta xây dựng G’ = <’, ’, I’, R’> mà trong nó không chứa qui tắc đơn sao cho L(G’) = L
repeat
lấy r R có dạng A B ; nếu có : { R = R \ {r}; while (r’ R có dạng B 1 | 2 | … | k ) R = R { A
1 | 2 | … | k } ; Until không có;
VÝ dô 6 : R =
I IA | AB I IA | AB
B a | AIB B a | AIB
VÝ dô 7 : R =
I IA | A I IA | A I IA | AB | a
A AB | B A AB | a A AB | a
§Þnh lý 4 Đối với một ngôn ngữ phi ngữ cảnh L bất kỳ, ta luôn luôn xây
dựng được một văn phạm phi ngữ cảnh G không chứa kí hiệu thừa, -qui tắc và
qui tắc đơn sao cho L(G) = L
I văn phạm chuẩn chomsky