Dạng chuẩn Greibach (Greibach Normal For m GNF)

Một phần của tài liệu Bài giảng ngôn ngữ hình thức phần 2 (Trang 28 - 31)

2) Bổ đề 4 (Dùng để loại bỏ luật sinh đơn vị)

3.3.2. Dạng chuẩn Greibach (Greibach Normal For m GNF)

1) Các định nghĩa

- Văn phạm phi ngữ cảnh G = (N, T, P, S) có   L(G) đƣợc gọi là ở dạng chuẩn Greibach (GNF) nếu các luật sinh của nó chỉ có một dạng A → aα với A N; a  T và α  (N T)*.

- Một luật sinh có dạng A → α (biến A ở bên trái) với A N, α  (NT)* đƣợc gọi là A – luật sinh.

- Một văn phạm phi ngữ cảnh đƣợc gọi là đệ quy trái trực tiếp nếu tồn tại một luật sinh có dạng A → Aα với A N, α  (NT)*.

2) Bổ đề 1 (Dùng thay thế các luật sinh trực tiếp)

loại bỏ luật sinh A → α1Bα2 và thêm vào các luật sinh A → α1β1α2 | α1β2α2 | ... | α1βrα2 thì L(G) = L(G

1).

Chứng minh:

- Hiển nhiên L(G1)  L(G) vì nếu A → α1βiα2 đƣợc dùng trong dẫn xuất của G

1 thì ta dùng A 

G α1Bα2 

G α1βiα2 . - Để chỉ ra L(G)  L(G

1) ta cần chú ý rằng A→α1Bα2 là luật sinh trong P - P 1 (có trong G và không có trong G

1). Bất cứ khi nào luật sinh A → α1Bα2 đƣợc dùng trong dẫn xuất của G thì phải viết lại tại bƣớc sau đó dùng luật sinh dạng B → βi. Hai bƣớc dẫn xuất này có thể đƣợc thay thế bằng một bƣớc dẫn xuất duy nhất, hay:

A → α1Bα2 và B → βi  A 

G1 α1βiα2 Vậy L(G) = L(G1)

3) Bổ đề 2(Dùng loại bỏ luật sinh dạng đệ quy tráitrực tiếp trong văn phạm)

G = (N, T, P, S) là một CFG; A → Aα1 | Aα2 | ... | Aαr | β1 | β2 | ... | βs là tập các A - luật sinh; G1=(N  {B}, T, P

1, S) là CFG đƣợc tạo ra từ G bằng cách thêm vào N biến mới B và thay các A - luật sinh bằng tập các luật sinh dạng:

1. A → βi B | β1 | β2 | ... | βs với 1 ≤ i ≤ s 2. B → αi B | αivới 1 ≤ i ≤ r

thì L(G) = L(G 1).

Chứng minh:

Trong một dãy dẫn xuất trái, một chuỗi luật sinh dạng A → Aαi phải kết thúc bằng A → βj. Tức là:

A  Aαi1  Aαi2αi1  ...  Aαipαip-1…αi1  βjαipαip-1…αi1

Dãy dẫn xuất trong G có thể thay bằng dãy dẫn xuất trong G1 bởi: A  βj B βj αipB  βjαipαip-1…B  ...  βjαipαip-1…αi2B

Sự chuyển đổi ngƣợc lại cũng có thể đƣợc. Vậy L(G) = L(G1).

4) Định lý(Dạng chuẩn Greibach - GNF)

Mỗi CFL bất kỳ không chứa ε đƣợc sinh ra bởi một CFG ở dạng chuẩn Greibach – GNF.

Chứng minh:

Bước 1: Đặt G là CFG sinh ra CFL không chứa ε. Xây dựng văn phạm tƣơng

đƣơng G‟ có dạng chuẩn Chomsky.

Bước 2: Đổi tên các biến (ký tự không kết thúc) trong tập của G‟ thành A1, A

2, ..., A

m (m ≥ 1) với A1 là ký tự bắt đầu. Đặt N = {A1, A

2, ..., A m}. Bước 3: Thay thế các luật sinh sao cho nếu A

i → Ajγ là một luật sinh thì j > i bằng cách:

Bắt đầu từ A1 và tiến tới Am, thay thế các Ak - luật sinh:

Nếu Ak → Ajγ là luật sinh với j < k thì sinh ra một tập luật sinh mới bằng cách thay thế Aj bên vế phải bằng vế phải của mỗi Aj - luật sinh theo bổ đề 1. Lặp lại không quá k - 1 lần ta thu đƣợc tập luật sinh dạng Ak → Alγ với l ≥ k.

Sau đó, các luật sinh với l = k đƣợc thay thế theo bổ đề 2 bằng cách đƣa vào các biến (ký tự không kết thúc) mới Bk.

Giải thuật cụ thể nhƣ sau: Begin

For k:= 1 to m do begin

for j:= 1 to k-1 do

for Mỗi luật sinh dạng Ak → Ajα do begin

for Tất cả luật sinh Aj → β do Thêm luật sinh Ak → βα; Loại bỏ luật sinh A → Aα

for Mỗi luật sinh dạng Ak → Akα do begin

Thêm các luật sinh Bk → α và Bk → αBk ; Loại bỏ luật sinh Ak → Akα

end;

for Mỗi luật sinh Ak → β trong đó β không bắt đầu bằng Ak do

Thêm luật sinh Ak → βBk end;

End;

Bằng cách lặp lại bƣớc xử lý trên cho mỗi biến nguồn, trong P chỉ chứa các luật sinh có dạng nhƣ sau:

1. Ai → Ajγ với j > i;

Một phần của tài liệu Bài giảng ngôn ngữ hình thức phần 2 (Trang 28 - 31)