Bài giảng toán giải tích chương 5 văn phạm phi ngữ cảnh

27 636 0
Bài giảng toán giải tích   chương 5  văn phạm phi ngữ cảnh

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

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   ( (VT)*) • 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 Aa B  bB Bb hay S  AB A  aAa B  bBb 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) = { ww  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  aASa A  SbASSba 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  aAa B  bBb • 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) EE+TE*TT 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 EE+TT TT*FF 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  12n 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 EE+TT TT*FF 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  1B2 luật sinh P B  12 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  1B2 thêm vào luật sinh A  1121221r2 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  A1A2Ar tập A – luật sinh có A ký hiệu trái vế phải (luật sinh đệ quy trái) Đặt A  12 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 EE+TT TT*FF 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  1B2 là luật sinh trong P và B  12 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  1B2 và thêm vào luật sinh A  1121221r2 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  A1A2Ar 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

Ngày đăng: 25/04/2016, 10:52

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan