Giản lược các VPPNC

Một phần của tài liệu BÁO CÁO THỰC TẬP-NGÔN NGỮ VÀ BIỂU DIỄN NGÔN NGỮ (Trang 25)

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

những yếu tố vô ích đó mà không làm giảm bớt khả năng sản sinh ngôn ngữ của văn phạm.

3.1. Các ký hiệu vô ích

Ta tìm và loại trừ các ký hiệu vô ích trong văn phạm, cho G = (Σ, Δ, P, S) là một VPPNC. Ta nói, một ký hiệu X gọi là có ích nếu có một dẫn xuất

S *αXβ *

w với (α, β)(Σ Δ)* và w  Σ*. Ngược lại X gọi là vô ích. Vậy, có 2 đặc điểm cho ký hiệu có ích:

- Từ X phải suy dẫn ra một xâu các ký hiệu kết thúc nào đó (X là hữu sinh). - X xuất hiện trong một xâu dẫn xuất từ S (X là đến được).

Tuy nhiên 2 dấu hiệu trên chưa đủ để đảm bảo X có ích vì X có thể nằm trong dạng câu chứa một biến nhưng từ đó không có ký hiệu kết thúc được sinh ra.

Loại bỏ ký hiệu vô sinh

Bổ đề 1: Cho một VPPNC G = (Σ, Δ, P, S) với L(G)   ta có thể xây dựng một cách hữu hiệu một VPPNC tương đương G’ = (Σ, Δ’, P’, S) sao cho mỗi A trong Δ’, có một w nào đó trong Σ* để cho A *

w. Chứng minh:

Duyệt tập các sản xuất trong P và kết nạp dần các biến vào Δ’ như sau: - Nếu A → w là một sản xuất, với wΣ* thì đưa A vào Δ’

- Nếu A → X1X2…Xn là một sản xuất, trong đó các Xi là ký hiệu cuối hoặc là biến đã được kết nạp vào Δ’, thì A cũng được đưa vào Δ’. Quá trình trên được lặp cho đến khi xét hết các sản xuất trong P. Sau đó lập P’ gồm mọi sản xuất trong P mà các ký hiệu trong đó đều thuộc Δ’Σ.

Giải thuật tìm Δ’: BEGIN 1) Δcũ := ; 2) Δmới := {A | A → w với w Σ*}; 3) WHILE Δcũ Δmới DO BEGIN 4) Δcũ := Δmới; 5) Δmới := Δcũ  {A | A → α với α (Σ Δcũ)*}; END 6) Δ’ := Δmới; END.

Ta thấy ngay rằng nếu A được đưa vào Δmới ở các dòng (2) hay (5) thì A suy dẫn ra một xâu các ký hiệu kết thúc.

Ngược lại, ta chứng minh rằng nếu A suy dẫn ra một xâu các ký hiệu kết thúc thì A được đưa vào Δmới: Dùng chứng minh quy nạp theo độ dài của A*

Nếu độ dài bằng 1 thì A → w là một luật sinh trong P. Vậy A được đưa vào Δmới ở bước (2)..

Giả sử kết quả đúng tới k -1 bước dẫn xuất ( k >1) Nếu A  X

1X2 ... X 2 ... X

n *w bằng k bước thì ta có thể viết w = w1w2... wn, trong đó Xi*

wi, với 1 ≤ i ≤ n bởi suy dẫn không đến k bước. Theo giả thiết quy nạp thì các biến Xinày được thêm vào Δmới. Ngay sau khi Xicuối cùng được thêm vào Δmới ở dòng (5), trở lại vòng lặp (3), ta có Δmới Δcũ, vì Xi cuối cùng đó chưa được đưa vào Δcũ. Do đó vòng lặp WHILE thực hiện thêm một lần nữa, và A sẽ được kết nạp vào Δmới tại dòng (5).

Ta chứng minh L(G’) = L(G) :

Đương nhiên L(G’)L(G), vì mọi suy dẫn trong G’ cũng là suy dẫn trong G. Ngược lại giả thiết có w trong L(G), nhưng không có ở trong L(G’). Vậy thì mỗi suy dẫn của w trong G đều phải có dùng một biến trong Δ- Δ’ hoặc có dùng một sản xuất P – P’ (tức là vẫn dùng một biến trong Δ – Δ’). Nhưng như thế là đã có một biến trong Δ – Δ’ cho phép suy dẫn ra một xâu các ký hiệu cuối. Vậy mẫu thuẫn, nên cho phép kết luận L(G) L(G’).

Vậy L(G’) = L(G).

Hay có thể nói 2 ngôn ngữ được cho từ 2 văn phạm G và G’ là tương đương nhau, hay nói cách khác: nếu có một văn phạm G thì luôn luôn có một văn phạm G’ tương ứng mà trong đó mỗi biến của G’ đều cho ra ký hiệu kết thúc.

Loại bỏ ký hiệu không đến được :

Bổ đề 2 : Cho một VPPNC G = (Σ, Δ, P, S), ta có thể xây dựng một cách hữu hiệu

một VPPNC tương đương G’ = (Σ, Δ’, P’, S) sao cho với mỗi X trong Δ’Σ’ có α và β trong (Δ’Σ’)* để cho S *α X β.

Chứng minh :

- Tập Δ’Σ’ có thể thành lập bởi giải thuật lặp sau : Cho S vào Δ’. Nếu một biến A đã được đưa vào Δ’ và A → α1 | α2 |…| αn thì ta kết nạp mọi biến trong α1, α2, …, αn vào Δ’ và mọi ký hiệu kết thúc trong α1, α2, …, αn vào Σ’. (adsbygoogle = window.adsbygoogle || []).push({});

Thủ tục ngừng khi không còn bổ sung thêm được ký hiệu nào mới cả.

- Tiếp đó lấy P’ là tập mọi sản xuất trong P chỉ chứa các ký hiệu trong Δ’Σ’. Dễ dàng chứng minh được L(G’) = L(G)

Định lý 1: Mọi NNPNC không rỗng đều có thể được sản sinh từ một VPPNC

không có ký hiệu vô ích.

Ví dụ : Xét văn phạm :

S → AB | a A → a

Áp dụng bổ đề 1, ta thấy không có ký hiệu kết thúc nào được dẫn ra từ B nên ta loại bỏ B và luật sinh S → AB. Tiếp tục áp dụng bổ đề 2 cho văn phạm :

S → a A → a

Ta thấy chỉ có S và a là đến được. Vậy văn phạm tương đương không chứa ký hiệu vô ích là : ({a}, {S}, {S → a}, S).

3.2. Các ε - sản xuất

Một luật sinh có dạng A → ε gọi là ε- sản xuất. Ta xét đến việc loại bỏ các luật sinh này. Nếu εL(G) thì không thể loại được tất cả các luật sinh ε, nhưng nếu ε  L(G) thì có thể. Phương pháp loại bỏ dựa trên việc xác định liệu một biến A có dẫn xuất A * ε hay không

Định lý 2: Nếu L = L(G) với một VPPNC G = (Σ, Δ, P, S), thì L – {ε} là bằng

L(G’) với một VPPNC G’ không chứa các ký hiệu vô ích và các ε- sản xuất.

Chứng minh :

Gọi một biến A là biến triệt tiêu được, nếu A *ε. Có thể xác định được các ký hiệu triệt tiêu được của G nhờ giải thuật lặp sau đây :

Nếu A → ε thì A là triệt tiêu được, sau đó nếu B → α là một sản xuất mà mọi ký hiệu trong α đều đã biết là triệt tiêu được, thì B cũng triệt tiêu được; lặp lại quá trình đó cho đến khi không tìm thêm được ký hiệu triệt tiêu được nào nữa.

Tập các sản xuất P’ được thành lập như sau:

Nếu A → X1X2…Xn là một sản xuất trong P, thì ta đưa vào P’ các sản xuất có dạng A → α1α 2…αn, trong đó :

1) Nếu Xi là không triệt tiêu được, thì αi = Xi ;

2) Nếu Xi là triệt tiêu được thì αi sẽ hoặc là Xi hoặc là ε

3) Nếu mọi Xi là ký hiệu triệt tiêu được thì cho tất cả các αi đều là ε. Khi đó L(G’) = L(G) – {ε}

Ví dụ : Loại bỏ luật sinh ε trong văn phạm sau :

S → AB A → aA | ε B → bB | ε

Trước hết, ta xác định tập các biến triệt tiêu được trong văn phạm: A, B là các biến triệt tiêu được vì có các luật sinh A → ε và B → ε. S cũng là biến triệt tiêu được vì có luật sinh S → AB với A, B đều là các biến triệt tiêu được. Tập biến triệt tiêu được = {A, B, S}

Theo quy tắc xây dựng tập luật sinh P’ trong định lý , ta có tập luật sinh mới như sau : S → AB | A | B

B → bB | b

Lưu ý rằng văn phạm mới G’ không sản sinh ra ε, trong khi G lại có sinh ra từ rỗng ε. Vậy muốn có một văn phạm thực sự tương đương với văn phạm G thì ta phải bổ sung thêm luật sinh S → ε vào tập luật sinh của G’. Ta có, văn phạm G’ tương đương G.

3.3. Các sản xuất đơn

Luật sinh có dạng A → B, trong đó A và B đều là biến, được gọi là các sản xuất đơn. Chú ý A → a với a Σ là không đơn.

Định lý 3: Mọi NNPNC không chứa ε đều có thể sinh từ một VPPNC không có (adsbygoogle = window.adsbygoogle || []).push({});

ký hiệu vô ích, các ε - sản xuất và các sản xuất đơn.

Chứng minh:

Giả sử L = L(G) với một VPPNC G = (Σ, Δ, P, S) và ε không thuộc L. Theo định lý 2 ta có thể giả thiết thêm là G không có ε - sản xuất. Thành lập các P’ từ P như sau:

1) Đưa mọi sản xuất không đơn trong P vào P’ 2) Nếu A *

G

 B với A, BΔ đưa vào P’ mọi sản xuất có dạng A → α nếu B → α là một sản xuất không đơn trong P

Lưu ý rằng, với A, BΔ, ta luôn có thể kiểm trứng rằng A *

G B. Thật vậy, nếu có  B. Thật vậy, nếu có A G B1 G B2 G … G Bm G

B, trong đó có biến nào xuất hiện hai lần thì ta có thể loại bớt đoạn giữa hai biến đó để thu được một suy dẫn A *

G

 B ngắn gọn hơn.

Ví dụ : Loại bỏ các sản xuất đơn trong văn phạm sau :

E → E + T | T T → T * F | F F → ( E ) | a Gọi tập Δ

A = {B | A *B}, xét các biến trong văn phạm, ta có : Δ

E = { E, T, F } ; Δ

T = { T, F } ; Δ

F = { F }

Vậy tập các sản xuất mới, theo định lý sẽ chứa các sản xuất không đơn trong P : E → E + T

T → T * F F → (E) | a

Bổ sung thêm các sản xuất mới thay cho các sản xuất đơn như sau : E → E + T | T * F | ( E ) | a

T → T * F | ( E ) | a F → ( E ) | a

Một phần của tài liệu BÁO CÁO THỰC TẬP-NGÔN NGỮ VÀ BIỂU DIỄN NGÔN NGỮ (Trang 25)