1. Trang chủ
  2. » Giáo án - Bài giảng

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

27 636 0

Đ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

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   ( (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

w