Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 27 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
27
Dung lượng
222,64 KB
Nội dung
Chương 5: Văn phạm phi ngữ cảnh (Context Free Grammar) Nội dung: • Văn phạm phi ngữ cảnh (CFG) • Giản lược văn phạm phi ngữ cảnh • Chuẩn hóa văn phạm phi ngữ cảnh • Các tính chất văn phạm phi ngữ cảnh Văn phạm phi ngữ cảnh Định nghĩa: hệ thống gồm thành phần G(V, T, P, S) • V : tập hữu hạn biến (ký tự chưa kết thúc) • T : tập hữu hạn ký tự kết thúc (V T = Ø) • P : tập hữu hạn luật sinh dạng A ( (VT)*) • S : ký hiệu bắt đầu văn phạm Quy ước: • V: chữ in hoa (A, B, C, ); T: chữ in thường (a, b, c, , w, x, y ) • , , , biểu diễn chuỗi ký hiệu kết thúc biến Ví dụ: G=({S, A, B}, {a, b}, P, S) với P gồm luật sinh: S AB A aA Aa B bB Bb hay S AB A aAa B bBb Dẫn xuất ngôn ngữ Dẫn xuất: • Nếu A luật sinh văn phạm G , chuỗi bất kỳ, áp dụng luật sinh A vào chuỗi A ta thu chuỗi : A G • Giả sử: 1 G 2, 2 G 3, , m-1 G m, ta có: 1 *G m • Ta có: *G với chuỗi • Thông thường, ta dùng * thay cho G *G Ngôn ngữ sinh CFG: cho CFG G(V, T, P, S) L(G) = { ww T* S *G w } (chuỗi w gồm toàn ký hiệu kết thúc dẫn từ S) Cây dẫn xuất Định nghĩa: dẫn xuất (hay phân tích cú pháp) văn phạm G(V, T, P, S) có đặc điểm (1) Mỗi nút có nhãn, ký hiệu (V T {ε} ) (2) Nút gốc có nhãn S (ký hiệu bắt đầu) (3) Nếu nút trung gian có nhãn A A V (4) Nếu nút n có nhãn A đỉnh n1, n2, , nk n theo thứ tự từ trái sang phải có nhãn X1, X2, , Xk A X1X2 Xk luật sinh P (5) Nếu nút n có nhãn ε n phải nút nút nút cha Cây dẫn xuất Ví dụ: xét văn phạm G({S, A}, {a, b}, P, S}, với P gồm: S aASa A SbASSba Một dẫn xuất G: S aAS aSbAS aabAS aabbaS aabbaa S a S A A S b b 10 a a a 11 Định lý 5.1: G(V, T, P, S) CFG S * có dẫn xuất văn phạm sinh Dẫn xuất trái - Dẫn xuất phải Dẫn xuất trái (phải nhất): bước dẫn xuất, luật sinh áp dụng vào biến bên trái (phải nhất) Ví dụ: xét văn phạm G với luật sinh: S AB A aAa B bBb • Các dẫn xuất khác cho từ aaabb: (a) S AB aAB aaAB aaaB aaabB aaabb (b) S AB AbB Abb aAbb aaAbb aaabb (c) S AB aAB aAbB aAbb aaAbb aaabb (d) S AB aAB aaAB aaAbB aaabB aaabb • Dẫn xuất (a) dẫn xuất trái nhất, (b) dẫn xuất phải • Các dẫn xuất khác nhau, có dẫn xuất Văn phạm mơ hồ Khái niệm: văn phạm phi ngữ cảnh G gọi văn phạm mơ hồ (ambiguity) có nhiều dẫn xuất cho chuỗi w Ví dụ: xét văn phạm G với luật sinh: E E + E E * E (E) a Với chuỗi a + a * a, ta vẽ đến dẫn xuất khác E E * E E a + E a E E + E a a E * a E a Điều có nghĩa biểu thức a + a * a hiểu theo cách khác nhau: (a + a) * a a + (a * a) Văn phạm mơ hồ Khắc phục văn phạm mơ hồ: • Quy định phép cộng nhân thực theo thứ tự từ trái sang phải (trừ gặp ngoặc đơn) EE+TE*TT T (E) a • Quy định dấu ngoặc đơn ngăn cách phép nhân thực ưu tiên phép cộng EE+TT TT*FF F (E) a Giản lược văn phạm phi ngữ cảnh Trong CFG chứa yếu tố thừa: ● Các ký hiệu không tham gia vào trình dẫn xuất chuỗi ký hiệu kết thúc ● Luật sinh dạng A B (làm kéo dài chuỗi dẫn xuất) giản lược văn phạm nhằm loại bỏ yếu tố vô ích, không làm thay đổi khả sản sinh ngôn ngữ văn phạm • Mỗi biến ký hiệu kết thúc văn phạm xuất dẫn xuất số chuỗi ngôn ngữ • Không có luật sinh A B (với A, B biến) Nếu ngôn ngữ không chấp nhận chuỗi rỗng ε không cần luật sinh A ε ● Các ký hiệu vô ích Khái niệm: ký hiệu X gọi có ích có dẫn xuất S * X * w với , chuỗi w T* có đặc điểm cho ký hiệu có ích • X phải dẫn chuỗi ký hiệu kết thúc • X phải nằm dẫn xuất từ S 10 Các ký hiệu vô ích Định lý 5.2: ngôn ngữ phi ngữ cảnh (CFL) không rỗng sinh từ văn phạm phi ngữ cảnh (CFG) ký hiệu vô ích Ví dụ: xét văn phạm • Áp dụng bổ đề 1: V' = {S, A, B, D} S→A A → aBb | ε B → A | cB D → ab S→A A → aBb | ε B → A | cB | cC C → AC | BCD D → ab • Áp dụng bổ đề 2: V' = {S, A, B} S→A A → aBb | ε B → A | cB 13 Luật sinh ε Định lý 5.3: (loại bỏ luật sinh A ε) Cho CFG G(V, T, P, S) L ngôn ngữ sinh G Khi L – {ε} ngôn ngữ sinh CFG G'(V, T, P', S) ký hiệu vô ích luật sinh ε Cách tìm: ➢ Bước 1: xác định tập biến rỗng Nullable i A ε A Nullable ii.B X1X2 Xn, Xi Nullable B Nullable ➢ Bước 2: xây dựng tập luật sinh P' Với luật sinh A X1X2 Xn P, ta xây dựng luật sinh A 12n với điều kiện: i Nếu Xi Nullable i = Xi ii Nếu Xi Nullable i = Xi ε iii Không phải tất i ε 14 Luật sinh ε Ví dụ: loại bỏ luật sinh ε văn phạm sau: S AB A aA ε B bB ε ➢ ➢ Bước 1: xác định tập biến rỗng Nullable i A ε A Nullable ii B ε B Nullable iii.S AB S Nullable Bước 2: xây dựng tập luật sinh P' S AB Aε εB A aA aε B bB bε Chú ý: văn phạm G' không chấp nhận chuỗi rỗng ε văn phạm G 15 Để G' tương đương G, ta cần thêm luật sinh S ε vào G' Luật sinh đơn vị Định lý 5.4: (loại bỏ luật sinh A B) Mỗi CFL không chứa ε sinh CFG ký hiệu vô ích, luật sinh ε luật sinh đơn vị Cách tìm: đặt L=L(G) CFL không chứa ε sinh văn phạm G(V, T, P, S) Theo định lý 3, ta loại bỏ tất luật sinh ε G Để loại bỏ luật sinh đơn vị, ta xây dựng tập P' theo giải thuật: For (mỗi biến A V) Begin Tính ΔA = { B B V A * B } ; For (mỗi biến B ΔA) For (mỗi luật sinh B thuộc P) If (B không luật sinh đơn vị) then Thêm luật sinh A vào P' End ; 16 Luật sinh đơn vị Ví dụ: loại bỏ luật sinh đơn vị văn phạm EE+TT TT*FF F (E) a Ta có: ΔE = {E, T, F} thêm vào P' luật sinh E E + T T * F (E) a Tương tự: ΔT = {T, F} thêm vào P' : T T * F (E) a ΔF = {F} thêm vào P' : F (E) a 17 Dạng chuẩn Chomsky (CNF) Định lý 5.5: ngôn ngữ phi ngữ cảnh không chứa ε sinh văn phạm mà luật sinh có dạng A BC A a, với A, B, C biến a ký hiệu kết thúc Cách tìm: giả sử CFL L=L(G) với CFG G(V, T, P, S) ➢ Bước 1: thay tất luật sinh có độ dài vế phải • Áp dụng định lý 4.4 để loại bỏ luật sinh đơn vị ε ➢ Bước 2: thay tất luật sinh có độ dài vế phải lớn có chứa ký hiệu kết thúc A X1X2 Xi Xn A X1X2 Ca Xn Ca a a ➢ Bước 3: thay luật sinh mà vế phải có nhiều ký hiệu chưa kết thúc A B1 D1 D1 B2 D2 A B1B2 Bm (m>2) 18 Dm-2 Bm-1 Bm Dạng chuẩn Chomsky (CNF) Ví dụ: tìm văn phạm có dạng CNF tương đương văn phạm sau: S A ABA A aA a B B bB b Bước 1: Δs = {S, A, B} , ΔA = {A, B} , ΔB = {B} S aA a bB b ABA A aA a bB b B bB b Bước 2: thay a Ca b Cb luật sinh có độ dài vế phải > 1: S CaA a CbB b ABA A CaA a CbB b B CbB b Ca a Cb b 19 Dạng chuẩn Chomsky (CNF) Bước 3: thay luật sinh có độ dài vế phải > 2: S CaA a CbB b AD1 A CaA a CbB b B CbB b Ca a Cb b D1 BA 20 Dạng chuẩn Greibach (GNF) Bổ đề 3: (thay luật sinh trực tiếp) Cho G(V, T, P, S) CFG, đặt A 1B2 luật sinh P B 12 r B - luật sinh; văn phạm G1(V, T, P1, S) thu từ G cách loại bỏ luật sinh A 1B2 thêm vào luật sinh A 1121221r2 tương đương G Bổ đề 4: (dùng loại bỏ văn phạm đệ quy trái) Đặt G(V, T, P, S) CFG; A A1A2Ar tập A – luật sinh có A ký hiệu trái vế phải (luật sinh đệ quy trái) Đặt A 12 s A - luật sinh lại; G1(V {B}, T, P1, S) CFG tạo thành cách thêm biến B vào V thay A - luật sinh luật sinh dạng: A i A iB (1 ≤ i ≤ s) B i B iB (1 ≤ i ≤ r) Thì ta có G1 tương đương G, hay L(G) = L(G1) 21 Dạng chuẩn Greibach (GNF) Định lý 5.6: CFL không chứa ε sinh CFG mà luật sinh có dạng A a với A biến, a ký hiệu kết thúc chuỗi biến (có thể rỗng) Đặt G CFG sinh CFL không chứa ε Bước 1: xây dựng G' có dạng CNF tương đương G Bước 2: đổi tên biến G' thành A1, A2, , Am (m ≥1 ) với A1 ký hiệu bắt đầu Đặt V = {A1, A2, , Am} Bước 3: thay luật sinh cho Ai Aj j > i • Nếu j i), Ai a Bk với (V {B1,B2, ,Bi-1})* Bước 4: thay Ai – luật sinh dạng (áp dụng bổ đề 3) Bước 5: thay Bk – luật sinh dạng (bổ đề 3) 22 Dạng chuẩn Greibach (GNF) Giải thuật : (thay cho Ai Ai j > i) Begin (1) for k := to m begin (2) for j := to k-1 (3) for Mỗi luật sinh dạng Ak Aj begin (4) for Tất luật sinh Aj (5) Thêm luật sinh Ak ; (6) Loại bỏ luật sinh Ak Aj end; (7) for Mỗi luật sinh dạng Ak Ak begin (8) Thêm luật sinh Bk Bk Bk; (9) Loại bỏ luật sinh Ak Ak end; (10) for Mỗi luật sinh Ak không bắt đầu Ak (11) Thêm luật sinh Ak Bk end; end; 23 Dạng chuẩn Greibach (GNF) Ví dụ: tìm văn phạm có dạng GNF cho văn phạm G sau: A1 A2A1 A2A3 A2 A3A1 a A3 A2A2 b Bước 1: G thỏa CNF Bước 2: ta có V = {A1, A2, A3} Bước 3: ta cần sửa đổi luật sinh A3 A2A2 • Áp dụng bổ đề 3: A3 A3A1A2 aA2 A3 A3A1A2 aA2 b • Áp dụng bổ đề 4, ta thu tập luật sinh: A1 A2A1 A2A3 A2 A3A1 a A3 aA2 b aA2B bB B A1A2 A1A2B 24 Dạng chuẩn Greibach (GNF) Bước 4: A3 có dạng chuẩn Thay A3 vào A2 : B A1A2 A1A2B A3 aA2 b aA2B bB A2 aA2A1 bA1 aA2BA1 bBA1 a A1 aA2A1A1 bA1A1 aA2BA1A1 bBA1A1 aA1 aA2A1A3 bA1A3 aA2BA1A3 bBA1A3 aA3 Bước 5: thay Bk – luật sinh B aA2A1A1A2 bA1A1A2 aA2BA1A1A2 bBA1A1A2 aA1A2 aA2A1A3A2 bA1A3A2 aA2BA1A3A2 bBA1A3A2 aA3A2 aA2A1A1A2B bA1A1A2B aA2BA1A1A2B bBA1A1A2B aA1A2B aA2A1A3A2B bA1A3A2B aA2BA1A3A2B bBA1A3A2B aA3A2B 25 Bổ đề bơm cho CFL Bổ đề bơm: cho L CFL bất kỳ, tồn số n phụ thuộc vào L cho z L |z| ≥ n ta viết z=uvwxy cho: |vx| ≥ 1, |vwx| ≤ n i ≥ ta có uviwxiy L Ví dụ: chứng minh L = {aibici | i ≥ 1} không CFL • Giả sử L CFL, tồn số n theo bổ đề bơm • Xét chuỗi z = anbncn, |z| ≥ n, ta viết z=uvwxy thỏa bổ đề • Ta có: vwx anbncn, |vwx| ≤ n nên vwx đồng thời chứa ký hiệu a c (vì a c có n ký hiệu b) → vx chứa ký hiệu a c • Do |vx| ≥ uvwxy chứa số ký hiệu a, b, c nhau: Nếu vx có chứa ký hiệu a (nên chứa ký hiệu c) bơm chuỗi vx, số ký hiệu c không đổi (luôn n), số ký hiệu a thay đổi Ví dụ: chuỗi uv0wx0y L có số ký hiệu a (ít n) số ký hiệu c (luôn n) không Nếu vx không chứa ký hiệu a bơm chuỗi vx, số ký 26 hiệu a không đổi, số ký hiệu b (hoặc c) thay đổi Tính chất đóng CFL Định lý 5.7: CFL đóng với phép hợp, phép kết nối phép bao đóng Kleen Định lý 5.8: CFL không đóng với phép giao Hệ quả: CFL không đóng với phép lấy phần bù 27 [...]... Các ký hiệu vô ích Định lý 5. 2: mỗi ngôn ngữ phi ngữ cảnh (CFL) không rỗng được sinh ra từ một văn phạm phi ngữ cảnh (CFG) không có ký hiệu vô ích Ví dụ: xét văn phạm • Áp dụng bổ đề 1: V' = {S, A, B, D} S→A A → aBb | ε B → A | cB D → ab S→A A → aBb | ε B → A | cB | cC C → AC | BCD D → ab • Áp dụng bổ đề 2: V' = {S, A, B} S→A A → aBb | ε B → A | cB 13 Luật sinh ε Định lý 5. 3: (loại bỏ luật sinh A ... Ví dụ: loại bỏ luật sinh đơn vị trong văn phạm EE+TT TT*FF F (E) a Ta có: ΔE = {E, T, F} thêm vào P' các luật sinh E E + T T * F (E) a Tương tự: ΔT = {T, F} thêm vào P' : T T * F (E) a ΔF = {F} thêm vào P' : F (E) a 17 Dạng chuẩn Chomsky (CNF) Định lý 5. 5: một ngôn ngữ phi ngữ cảnh bất kỳ không chứa ε đều được sinh ra bằng một văn phạm nào đó mà các luật sinh có dạng A... sinh ε trong văn phạm sau: S AB A aA ε B bB ε ➢ ➢ Bước 1: xác định tập biến rỗng Nullable i A ε A Nullable ii B ε B Nullable iii.S AB S Nullable Bước 2: xây dựng tập luật sinh P' S AB Aε εB A aA aε B bB bε Chú ý: văn phạm G' không chấp nhận chuỗi rỗng ε như văn phạm G 15 Để G' tương đương G, ta cần thêm luật sinh S ε vào G' Luật sinh đơn vị Định lý 5. 4: (loại... luật sinh Aj do (5) Thêm luật sinh Ak ; (6) Loại bỏ luật sinh Ak Aj end; (7) for Mỗi luật sinh dạng Ak Ak do begin (8) Thêm các luật sinh Bk và Bk Bk; (9) Loại bỏ luật sinh Ak Ak end; (10) for Mỗi luật sinh Ak trong đó không bắt đầu bằng Ak do (11) Thêm luật sinh Ak Bk end; end; 23 Dạng chuẩn Greibach (GNF) Ví dụ: tìm văn phạm có dạng GNF cho văn phạm G sau: A1 A2A1... trực tiếp) Cho G(V, T, P, S) là một CFG, đặt A 1B2 là luật sinh trong P và B 12 r là các B - luật sinh; văn phạm G1(V, T, P1, S) thu được từ G bằng cách loại bỏ luật sinh A 1B2 và thêm vào luật sinh A 1121221r2 tương đương G Bổ đề 4: (dùng loại bỏ văn phạm đệ quy trái) Đặt G(V, T, P, S) là CFG; A A1A2Ar là tập các A – luật sinh có A là ký hiệu trái nhất của... Ca a a ➢ Bước 3: thay thế các luật sinh mà vế phải có nhiều hơn 2 ký hiệu chưa kết thúc A B1 D1 D1 B2 D2 A B1B2 Bm (m>2) 18 Dm-2 Bm-1 Bm Dạng chuẩn Chomsky (CNF) Ví dụ: tìm văn phạm có dạng CNF tương đương văn phạm sau: S A ABA A aA a B B bB b Bước 1: Δs = {S, A, B} , ΔA = {A, B} , ΔB = {B} S aA a bB b ABA A aA a bB b B bB b Bước 2: thay a bằng Ca và b bằng... thì j > i • Nếu j i), Ai a hoặc Bk với (V {B1,B2, ,Bi-1})* Bước 4: thay thế các Ai – luật sinh về đúng dạng (áp dụng bổ đề 3) Bước 5: thay thế các Bk – luật sinh về đúng dạng (bổ đề 3) 22 Dạng chuẩn Greibach (GNF) Giải thuật : (thay thế sao cho Ai Ai thì j > i) Begin (1) for... CFG không có ký hiệu vô ích, không có luật sinh ε hoặc luật sinh đơn vị Cách tìm: đặt L=L(G) là CFL không chứa ε và được sinh ra bởi văn phạm G(V, T, P, S) Theo định lý 3, ta có thể loại bỏ tất cả luật sinh ε trong G Để loại bỏ luật sinh đơn vị, ta xây dựng tập P' mới theo giải thuật: For (mỗi biến A V) do Begin Tính ΔA = { B B V và A * B } ; For (mỗi biến B ΔA) do For (mỗi luật sinh B thuộc... | cB | cC C → AC | BCD D → ab • Áp dụng bổ đề 2: V' = {S, A, B} S→A A → aBb | ε B → A | cB 13 Luật sinh ε Định lý 5. 3: (loại bỏ luật sinh A ε) Cho CFG G(V, T, P, S) và L là ngôn ngữ sinh ra bởi G Khi đó L – {ε} là ngôn ngữ sinh ra bởi CFG G'(V, T, P', S) không có ký hiệu vô ích và không có luật sinh ε Cách tìm: ➢ Bước 1: xác định tập biến rỗng Nullable i A ε A Nullable ii.B X1X2 Xn, Xi ... 1: (loại bỏ các biến không dẫn ra chuỗi ký hiệu kết thúc) Cho CFG G(V, T, P, S) với L(G) ≠ Ø, có một CFG G'(V', T', P', S) tương đương sao cho mỗi A V' tồn tại w T* để A * w Giải thuật tìm V': Begin (1) (2) (3) (4) (5) (6) End; OldV' := ; NewV' := { A A w với w T* }; While OldV' NewV' do begin OldV' := NewV'; NewV' := OldV' {A A với (T OldV')* } end; V' := NewV'; 11 Các ... biến thêm vào 12 Các ký hiệu vô ích Định lý 5. 2: ngôn ngữ phi ngữ cảnh (CFL) không rỗng sinh từ văn phạm phi ngữ cảnh (CFG) ký hiệu vô ích Ví dụ: xét văn phạm • Áp dụng bổ đề 1: V' = {S, A, B, D}... dẫn xuất khác nhau, có dẫn xuất Văn phạm mơ hồ Khái niệm: văn phạm phi ngữ cảnh G gọi văn phạm mơ hồ (ambiguity) có nhiều dẫn xuất cho chuỗi w Ví dụ: xét văn phạm G với luật sinh: E E + E ... ΔF = {F} thêm vào P' : F (E) a 17 Dạng chuẩn Chomsky (CNF) Định lý 5. 5: ngôn ngữ phi ngữ cảnh không chứa ε sinh văn phạm mà luật sinh có dạng A BC A a, với A, B, C biến a ký hiệu kết