Giải thuật xác định ngôn ngữ phi ngữ cảnh

Một phần của tài liệu chng v (Trang 25 - 27)

IV. TÍNH CHẤT CỦA NGÔN NGỮ PHI NGỮ CẢNH

z 4 = u v w x y

5.1. Giải thuật xác định ngôn ngữ phi ngữ cảnh

ĐỊNH LÝ 5.9 : Tồn tại giải thuật để xác định CFL là: rỗng, hữu hạn, vô hạn.

Với văn phạm G (V, T, P, S) :

. Để kiểm tra L(G) có rỗng hay không, ta dùng bổđề 5. 1: Rõ ràng L(G) không rỗng khi và chỉ khi S sinh ra một chuỗi ký hiệu kết thúc nào đó.

. Để kiểm tra L(G) hữu hạn hay vô hạn, ta dùng định lý 5. 5 để tìm văn phạm tương đương G’ (V’, T, P’, S) có dạng chuẩn CHOMSKY và không có ký hiệu vô ích sinh ra L(G) - {ε}. L(G) hữu hạn khi và chỉ khi L(G’) hữu hạn.

Để kiểm tra tính hữu hạn của CFG có dạng chuẩn CHOMSKY, ta chỉ cần vẽ đồ thị có hướng với mỗi đỉnh trên đồ thị là một biến thuộc văn phạm và cạnh từ A đến B nếu và chỉ nếu có luật sinh A → BC hoặc A → CB với biến C bất kỳ. Khi đó, ngôn ngữ sinh ra là hữu hạn nếu và chỉ nếu đồ thị không có chu trình. Vì :

Nếu đồ thị có chu trình, giả sử chu trình là A0, A1,... , An, A0 thì sẽ có chuỗi dẫn xuất: A0 ⇒ α1A1β1 ⇒ α2A2β2 ... ⇒ αnAnβn ⇒ αn+1 A0βn+1, trong đó αi, βi là chuỗi các biến và | αiβi | = i. Vì không có ký hiệu vô ích nên αn+1⇒* w và βn+1⇒* x với mọi chuỗi w, x là các chuỗi ký hiệu kết thúc và độ dài tổng cộng ít nhất bằng n+1. Vì n ≥ 0, nên w và x không thểđồng thời bằng ε.

Kế tiếp, cũng do văn phạm không có chứa ký hiệu vô ích nên ta có thể tìm

được các chuỗi y, z sao cho S ⇒* yA0z và chuỗi ký hiệu kết thúc v sao cho A0 ⇒* v. Vậy ∀i ta có :

S ⇒* yA0z ⇒* ywA0xz ⇒* yw2A0x2z ⇒* ... ⇒* ywiA0xiz ⇒* ywivwiz.

Vì | wx | > 0, nên chuỗi ywivwiz không thể bằng ywjvwjz nếu i ≠ j. Vậy văn phạm sinh ngôn ngữ vô hạn.

Ngược lại, giả sửđồ thị không có chu trình. Ta gọi hạng của biến A là độ dài lớn nhất của đường đi bắt đầu từ A. Vì không có chu trình nên A sẽ có hạng hữu hạn. Nếu A → BC là một luật sinh thì hạng của B và C phải nhỏ hơn hạng của A. Ta chứng minh quy nạp theo r (hạng của A) rằng không có chuỗi ký hiệu kết thúc nào có

độ dài lớn hơn 2r

Với r = 0: hạng của A bằng 0, vậy không có cạnh từ A. Do đó, tất cả các A - luật sinh đều có dạng A → a, hay A dẫn ra chuỗi có độ dài l = 20.

Xét r > 0: nếu ta dùng luật sinh A → a thì dẫn ra chuỗi chỉ có độ dài 1, nếu dùng luật sinh A → BC thì vì B, C có hạng í hơn hoặc bằng r -1 nên theo giả thiết quy nạp B, C dẫn ra chuỗi có độ dài ngắn hơn 2r -1 . Vậy BC không thể dẫn ra chuỗi có độ

dài lớn hơn 2r. Giả sử S có hạng là r0 thì các chuỗi do S sinh ra có độ dài không quá 2r0 . Vì thế suy ra ngôn ngữ là hữu hạn. Thí dụ 5.16 : Xét văn phạm G chứa các luật sinh sau : S → AB A → BC | a B → CC | b C → a

Ta thấy văn phạm G có các luật sinh đã thỏa dạng chuẩn Chomsky.

. Để kiểm tra tính rỗng của văn phạm, ta áp dụng Bổđề 5.1 lên tập biến V để

tìm tập biến mới mới V1 chỉ chứa các biến có khả năng dẫn ra chuỗi ký hiệu kết thúc trong văn phạm :

Hay S ∈ V1 có nghĩa là S có thể sinh ra các chuỗi ký hiệu kết thúc. Vậy ngôn ngữ sinh bởi văn phạm G : L(G) không rỗng.

. Để kiểm tra tính hữu hạn của văn phạm, ta vẽ đồ thị có hướng tương ứng với các luật sinh trong văn phạm như sau :

B S A C Hình 5.6 - Đồ thị có hướng tương ứng

Rõ ràng, ta thấy đồ thị không có chu trình. Hạng của S, A, B, C lần lượt là 3, 2, 1 và 0. Chẳng hạn, một đường đi dài nhất từ S là S → A → B → C. Vậy văn phạm này là hữu hạn, nó sinh ra hữu hạn chuỗi và độ dài các chuỗi không lớn hơn 23 = 8. Thực tế, chuỗi dài nhất dẫn xuất được từ S là :

S ⇒ AB ⇒ BCB ⇒ CCCB ⇒ CCCCC ⇒* aaaaa ,với độ dài chuỗi là 5. Nếu ta thêm vào văn phạm một luật sinh mới : C → AB, thì đồ thị có hướng tương ứng lúc đó có dạng như sau :

A B

CS S

Hình 5.7 - Đồ thị có hướng tương ứng văn phạm bổ sung

Đồ thị mới này có nhiều chu trình, chẳng hạn A → B → C → A. Vậy ta phải tìm được một dẫn xuất dạng A ⇒* α3Aβ3 , cụ thể là A ⇒ BC ⇒ CCC ⇒ CABC, trong đó α3 = C và β3 = BC. Vì C ⇒* a và BC ⇒* ba nên A ⇒* aAba.

Mặt khác, S ⇒* Ab và A ⇒* a, suy ra : S ⇒* aia(ba)ib, ∀i. Vậy ngôn ngữ sinh từ văn phạm mới là vô hạn.

Một phần của tài liệu chng v (Trang 25 - 27)

Tải bản đầy đủ (PDF)

(34 trang)