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, α (NT)* đƣợ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, α (NT)*.
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;