1. Trang chủ
  2. » Luận Văn - Báo Cáo

BÁO CÁO LIỂU LUẬN MÔN LÝ THUYẾT TÍNH TOÁN

31 486 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 31
Dung lượng 1,24 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

NỘI DUNG BÁO CÁO PHẦN 1 LÝ THUYẾT Câu 2: Chapter 6. ContextFree Grammar. Section 6.1. Definition of ContextFree Grammar. Section 6.2. More exemples… 1 p163171. PHẦN 2 BÀI TẬP Câu 8: Viết chương trình RAM chuẩn và RAM thô sơ kiểm tra điều kiện các số a, b, c cho trước một cách ngẫu nhiên lần lượt là các cạnh và đường chéo của một hình chữ nhật. PHẦN 1 – LÝ THUYẾT Chương 6: VĂN PHẠM PHI NGỮ CẢNH (CONTEXTFREE GRAMMARS) 6.1 Các định nghĩa và các ví dụ: Nhiều ngôn ngữ mà chúng ta từng biết, cả ngôn ngữ có qui tắc lẫn ngôn ngữ bất qui tắc, có thể được mô tả bằng các định nghĩa đệ quy. Trong ví dụ đầu tiên, bao hàm một ngôn ngữ qui tắc rất đơn giản, việc định dạng sơ sài của định nghĩa đệ quy dẫn đến ý tưởng của văn phạm phi ngữ cảnh. Dạng văn phạm này và nhiều văn phạm tổng quát khác mà chúng ta sẽ học tạo thành các công cụ mạnh mẽ hỗ trợ mô tả và phân tích các ngôn ngữ. Ví dụ 1: Sử dụng các qui tắc văn phạm để mô tả ngôn ngữ. Cho rằng ngôn ngữ L = {a,b} của tất cả các chuỗi trên bảng chữ cái {a, b}. Trong ví dụ 2.15, chúng ta đã thấy định nghĩa đệ quy của L được biễu diễn như sau: 1. A  L 2. Cho bất cứ S  L, Sa  L. 3. Cho bất cứ S  L, Sb  L. 4. Không có các chuỗi khác thuộc L. Cho rằng S ở đây là một biến, biễu diễn cho 1 phần tử bất kỳ của L, mà giá trị của phần tử tồn tại bởi một vài kết nối của các qui tắc từ 1 đến 3. Qui tắc 1có dạng khi chúng ta ghi S  A, chỉ định cách cho S một giá trị để A thay thế. Qui tắc 2 và 3 có thể được viết S  Sa và S  Sb. Điều này có nghĩa S cũng có thể được thay thể bởi Sa hoặc Sb; ngoài ra phải tồn tại giá trị cuối bằng cách tiếp tục sử dụng các qui tắc gán giá trị cho S mới. Biểu tượng  được sử dụng cho từng qui tắc khi một biến được thay thế bởi một chuỗi. Cho 2 chuỗi  và , khi ký hiệu    có nghĩa là  có thể tồn tại bằng cách cung cấp một trong những qui tắc đến một biến đơn trong xâu chuỗi . Sử dụng ký hiệu này trong ví dụ, chúng ta có thể viết: S  Sa  Sba  Sbba  Abba = bba. để mô tả thứ tự từng bước (ứng dụng của các qui tắc 2,3,3, và 1) được dùng để tồn tại hoặc chuyển hóa, xâu chuỗi bba. Sự chuyển hóa kết thúc tại điểm thay thế S bằng một xâu chuỗi thực của các ký hiệu bảng chữ cái (trong trường hợp A này); mỗi bước tương tự trước khi gọi qui nạp, kể từu khi thay thế xâu chuỗi S bằng 1 xâu chuỗi vẫn còn chứa 1 biến. Thậm chí, có thể chú thích một cách đơn giản cho các ký hiệu | nghĩa là “hoặc” và ghi 3 qui tắc đầu tiên như:

Trang 1

ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA CÔNG NGHỆ THÔNG TIN

BÁO CÁO LIỂU LUẬN

MÔN : LÝ THUYẾT TÍNH TOÁN

Giảng viên : GS TS Phan Huy Khánh

Nhóm thực hiện: Huỳnh Kim Tân

Trang 2

NỘI DUNG BÁO CÁO

PHẦN 1 - LÝ THUYẾT

Câu 2:

Chapter 6 Context-Free Grammar.

- Section 6.1 Definition of Context-Free Grammar.

- Section 6.2 More exemples… [1] p163-171.

PHẦN 2 - BÀI TẬP

Câu 8:

Viết chương trình RAM chuẩn và RAM thô

sơ kiểm tra điều kiện các số a, b, c cho trước một cách ngẫu nhiên lần lượt là các cạnh và

đường chéo của một hình chữ nhật.

Trang 3

Ví dụ 1: Sử dụng các qui tắc văn phạm để mô tả ngôn ngữ.

Cho rằng ngôn ngữ L = {a,b}* của tất cả các chuỗi trên bảng chữ cái {a, b} Trong ví dụ 2.15, chúng ta đã thấy định nghĩa đệ quy của L được biễu diễn như sau:

1 A ∈ L

2 Cho bất cứ S ∈ L, Sa ∈ L

3 Cho bất cứ S ∈ L, Sb ∈ L

4 Không có các chuỗi khác thuộc L

Cho rằng S ở đây là một biến, biễu diễn cho 1 phần tử bất kỳ của L, mà giá trị của phần tử tồn tại bởi một vài kết nối của các qui tắc từ 1 đến 3 Qui tắc 1có dạng khi chúng ta ghi S → A, chỉ định cách cho S một giá trị để A thay thế Qui tắc 2 và 3

có thể được viết S → Sa và S → Sb Điều này có nghĩa S cũng có thể được thay thể bởi Sa hoặc Sb; ngoài ra phải tồn tại giá trị cuối bằng cách tiếp tục sử dụng các qui tắc gán giá trị cho S mới

Biểu tượng → được sử dụng cho từng qui tắc khi một biến được thay thế bởi một chuỗi Cho 2 chuỗi α và β, khi ký hiệu α ⇒ β có nghĩa là β có thể tồn tại bằng cách cung cấp một trong những qui tắc đến một biến đơn trong xâu chuỗi α Sử dụng

ký hiệu này trong ví dụ, chúng ta có thể viết:

S ⇒ Sa ⇒ Sba ⇒ Sbba ⇒ Abba = bba

để mô tả thứ tự từng bước (ứng dụng của các qui tắc 2,3,3, và 1) được dùng để tồn tại hoặc chuyển hóa, xâu chuỗi bba Sự chuyển hóa kết thúc tại điểm thay thế S bằng một xâu chuỗi thực của các ký hiệu bảng chữ cái (trong trường hợp A này); mỗi bước tương tự trước khi gọi qui nạp, kể từu khi thay thế xâu chuỗi S bằng 1 xâu chuỗi vẫn còn chứa 1 biến

Thậm chí, có thể chú thích một cách đơn giản cho các ký hiệu | nghĩa là

“hoặc” và ghi 3 qui tắc đầu tiên như:

S → A | Sa | Sb

Trang 4

(Trong các chú thích mới, bỏ qua cách viết qui tắc 4, mặc dù kết quả vẫn không tường minh ) Chúng ta lưu ý về các tham chiếu mới trong một biểu thức như là Sa |

Sb, hai khả năng là Sa và Sb, không là a và S- trong các từ khác, việc nối các xâu chuỗi có quyền ưu tiên trên quá trình hoạt động

Trong ví dụ 2.15, chó thấy rằng khả năng của L:

1 A ∈ L

2 a ∈ L

3 b ∈ L

4 Cho mỗi x và y trong L, x,y ∈ L

5 Không có xâu chuỗi khác trong L

Sử dụng chú thích mới, chúng ta sẽ tổng quát hóa ‘các qui tắc văn phạm’ được viết :

S → A | a | b| SSVới cách thức đó, có nhiều cách để chứa xâu chuỗi bba Hai dẫn xuất được hiển thị như sau :

S ⇒ SS ⇒ bS ⇒ bSS ⇒ bbS ⇒ bba

S ⇒ SS ⇒ Sa ⇒ Ssa ⇒ bSa ⇒ bbaNăm bước trong dòng đầu phù hợp với các qui tắc 4, 3, 4, 3, và 2, và trong dòng thứ 2 phù hợp với các qui tắc 4, 2, 4, 3, và 3

Trong cả 2 trường hợp trong ví dụ 6.1, các định dạng được sử dụng trong định nghĩa đệ quy có thể được giải thích như các qui tắc văn phạm trong văn phạm phi ngữ cảnh Trước khi đưa ra định nghĩa chính thức của văn phạm, chúng ta nên xem thêm 2 ví dụ Trong ví dụ 6.2, mặc dù văn phạm tương đối đơn giản hơn trong ví dụ 6.1, ngôn ngữ tương ứng thuộc loại bất qui tắc Trong ví dụ 6.3 thì tiêu biểu hơn cho kiểu văn phạm chứa nhiều hơn 1 biến

2 Cho mỗi x ∈ L, axb ∈ L

3 Không có gì nữa trong L

Ngôn ngữ L đơn giản được xem là ngôn ngữ bất qui tắc {anbn | n ≥ 0} Các qui tắc văn phạm trong phần đầu của ví dụ 6.1, cho ngôn ngữ {a,b}*, cho phép a’s và b’s được thêm vào một cách độc lập lẫn nhau Ở đây, theo hướng xử lý khác, mỗi lần một ký hiệu được thêm vào cuối mỗi xâu chuỗi bởi ứng dụng của qui tắc văn phạm S

Trang 5

→ aSb, ký hiệu ngược lại đồng thời được thêm vào cuối xâu chuỗi khác Như vậy, ràng buộc không chỉ một mà còn có thể sư dụng bởi bất cứ biểu thức qui tắc.

Ví dụ 6.3: Tính đối xứng

Xem xét cả 2 ngôn ngữ pal của tính chất đối xứng trên bảng chữ cái {a, b} và phần bổ sung N, tập hợp các thành phần không đối xúng trên {a, b} Từ ví dụ 2.16, chúng ta có định nghĩa qui nạp của pal :

1 A, a, b ∈ pal

2 Cho bất cứ S ∈ pal, aSa và bSb tồn tại trong pal.

3 Không có các xâu chuỗi khác trong pal.

Vì vậy, có thể mô tả pal trong văn phạm phi ngữ cảnh với các qui tắc văn phạm:

S → A| a | b | aSa | bSbNgôn ngữ N cũng tuân theo qui tắc 2: Cho bất cứ x không đối xứng, cả hai axa

và bxb sẽ không đối xứng Tuy nhiên, định nghĩa qui nạp của N không thể đơn giản như định nghĩa của pal, bởi vì không có tập hợp vô hạn của các xâu chuỗi mà có thể phân phối như các phần tử cơ bản trong định nghĩa Tồn tại tập vô hạn N0 để mỗi thành phần không đối xứng có thể vẫn tồn tại từ 1 phần tử của N0 bởi các ứng dụng của qui tắc 2 (Bài tập 6.42) Cho 1 chuỗi không đối xứng :

abbaabaNếu bắt đầu tại các điểm cuối và làm việc theo cách thử kết hợp các ký hiệu tại điểm đầu với các ký hiệu tại điểm kết thúc, xâu chuỗi này xem như một chuỗi đối xứng cho 2 bước đầu tiên Để biến nó thành xâu chuỗi không đối xứng tại phần chính giữa baa, phần bắt đầu với 1 ký hiệu và kết thúc với 1 ký hiệu ngược lại; xâu chuỗi ở giữa hai có thể bất cứ kiểu gì Một chuỗi không đối xứng nếu và chỉ nếu nó có phần giữa thuộc kiểu này Có các xâu chuỗi không đối xứng “cơ bản”, và vì vậy có thể đưa

ra định nghĩa của N:

1 Cho bất cứ A {a, b}*, aAb và bAa tồn tại trong N

2 Cho bất cứ S N, aSa và bSb tồn tại trong N

3 Không tồn tại các xâu chuỗi khác trong N

Để tồn tại văn phạm phi ngữ cảnh mô tả N, bây giờ có thể giới thiệu một cách đơn giản một biên A thứ 2, biễu diễn cho một phần tử bất kỳ của {a, b}*, và kết hợp các qui tắc văn phạm cho ngôn ngữ này từ ví dụ 6.1:

S → aAb | bAa | aSa | bSb

A → A | Aa | AbMột dẫn xuất của chuỗi không đối xứng abbaaba, ví dụ như sau:

S ⇒ aSa ⇒ abSba ⇒ abbAaba ⇒ abbAaaba ⇒ abbAaaba = abbaaba

Trang 6

Nói chung và thường cần thiết nên bao gồm một vài biến trong văn phạm phi ngữ cảnh mô tả ngôn ngữ L Sẽ vẫn có một biến đặc biệt để biễu diễn một chuỗi tùy

ý trong L, và thông thường để chứng tỏ một chuỗi S (biến bắt đầu) Sau đó, các biến khác có thể xem như các chuỗi đặc trưng trong các ngôn ngữ hỗ trợ chắc chắn bao hàm trong định nghĩa của L (Chúng ta có thể vẫn giải thích văn phạm như định nghĩa qui nạp của L, nếu mở rộng khái niệm qui nạp một cách không đáng kể bao

hàm cả ý tưởng của qui nạp lẫn nhau: đúng hơn một đối tượng được định nghĩa trong

các thời kỳ của chính nó, một vài đối tượng được định nghĩa trong các thời kỳ lẫn nhau.)

Một định nghĩa tổng quát đưa ra từ các ví dụ này:

Giả sử G = (V, ∑, P, S) là một CFG Như trong 3 ví dụ đầu, chúng ta sẽ duy trì

ký hiệu → cho các dẫn xuất riêng biệt trong P Sử dụng ký hiệu ⇒ cho các bước trong một dẫn xuất như trong ví dụ 6.1 và 6.3 Trong 1 vài trường hợp, nó hữu ích để chỉ định rõ ràng dẫn xuất chi tiết tới văn phạm G, và trong trường hợp này, ghi là ⇒G

α⇒G β

nghĩa là xâu chuỗi β có thể chứa trong xâu chuỗi α bằng cách thay thế một vài biến xuất hiện trên phần bên trái của một dẫn xuất trong G bởi phần bên phải tương ứng, hoặc là:

α = α1Aα2

β = α1ϒα2

Và một trong các dẫn xuất trong G là A → ϒ (Bây giờ có thể hiểu rõ hơn về phần phi ngữ cảnh Nếu tại một vài điểm trong một dẫn xuất, chúng ta đã duy trì một xâu chuỗi α chứa biến A, thì có lẽ tiếp tục bằng cách thay thế ϒ cho A, không vấn đề

gì cho các xâu chuỗi α1 vàα2 không phụ thuộc vào ngữ cảnh.)

Trong trường hợp này, chúng ta sẽ nói rằng α dẫn xuất β, hoặc β được dẫn xuất từ α, trong từng bước Tổng quát là:

α⇒*

G β

(và có thể ngắn gọn hơn α ⇒* β nếu không bao hàm văn phạm) nếu α dẫn xuất β

trong các bước hoặc không bước nào; hoặc α = β, hoặc thoát khỏi 1 số nguyên k ≥ 1

Định nghĩa 6.1: Định nghĩa của văn phạm phi ngữ cảnh

Một văn phạm phi ngữ cảnh (CFG) là 1 bộ G =(V, ∑, P, S), mà trong đó: V và

∑ là các tập hữu hạn tách rời nhau, S là một phần tử của V, và P là một tập hữu hạn của các cách thức theo dạng A →α, mà A ∈ V và α ∈ (V ∪∑)*

Các phần tử của V được gọi là biến, hoặc ký hiệu không chưa kết thúc, và các phần tử của bảng chữ cái ∑ được gọi là ký hiệu kết thúc, hoặc điểm kết thúc S được gọi là ký hiệu bắt đầu; và các phần tử của P gọi là các qui tắc văn phạm, hoặc các dẫn xuất

Trang 7

và các xâu chuỗi α0,α1, …, αk, với α0 = α và αk = β, đến nỗi αi ⇒G αi+1 cho mỗi i với

0 ≤ i ≤ k -1

Ví dụ 6.4: Ngôn ngữ của các biểu thức đại số.

Một ngôn ngữ quan trọng trong khoa học máy tính là ngôn ngữ của các biểu thức đại số hợp lệ Đơn giản, chúng ta hạn chế một vài biểu thức đơn mà có thể định dạng cho 4 toán tử hai ngôi +, -, *, /, dấu ngoặc đơn trái và phải, và định danh đơn a Một vài tính năng bỏ quên, vì vậy các toán tử một ngôi, bất cứ các toán tử hai ngôi khác ngoài 4 toán tử trên, số nguyên mẫu như là 3.0 hoặc …, các biểu thức bao gồm chú thích mang tính chức năng, và nhiều định danh chung hơn Hầu hết các chức năng có thể được xử lý đủ đơn giản; ví dụ như, ngôn ngữ của các định danh bất kỳ có thể được “thêm vào” các chức năng này bằng cách sử dụng biến A mặc dù ký hiệu kết thúc a và mô tả dẫn xuất cho phép bất cứ định danh được dẫn xuất từ A (Xem ví

dụ 3.5 và 3.6.)

Một định nghĩa qui nạp của ngôn ngữ được dựa trên sự theo dõi mà các biểu thức hợp lệ có thể được định dạng bằng cách nối 2 biểu thức hợp lệ sử dụng một trong bốn toán tử hoặc bằng cách đóng biểu thức hợp lệ với dấu ngoặc đơn, và 2 tài khoản điều hành này cho tất cả các biểu thức hợp lệ ngoại trừ định danh đơn a Cách

dễ hiểu nhất cho văn phạm phi ngữ cảnh, vì vậy, có lẽ là dùng các dẫn xuất

S → S + S | S – S | S * S | S/S | (S)| aXâu chuỗi a + (a * a)/a – a có thể bao hàm từ dẫn xuất

S ⇒ S – S ⇒ S + S –S ⇒ a + S – S ⇒ a + S/S – S

⇒ a + (S)/S – S ⇒ a + (S * S)/S – S ⇒ a + (a * S)/S – S

⇒ a + (a * a)/S – S ⇒ a + (a * a)/a – S ⇒ a + (a * a )/a – a

Dễ dàng nhìn thấy có nhiều dẫn xuất khác cũng tốt Ví dụ:

S ⇒ S/S ⇒ S + S/S ⇒ a + S/S ⇒ a + (S)/S

⇒ a + (S * S)/S ⇒ a + (a * S)/S ⇒ a + (a * a)/S

⇒ a + (a * a )/S - S ⇒ a + (a * a)/a – S ⇒ a + (a * a)/a –a

Lần đầu dẫn xuất thường nguyên mẫu hơn lần thứ 2 Các bắt đầu lần đầu với dẫn xuất:

S → S – S

Định nghĩa 6.2: Ngôn ngữ được phát sinh từ một CFG

Cho G =(V, ∑, P, S) là 1 CFG Ngôn ngữ được phát sinh bởi G là

L(G) = {x ∈∑* | S ⇒*

G x}

Một ngôn ngữ L là ngôn ngữ phi ngữ cảnh (CFL) nếu có một CFG G mà L = L(G)

Trang 8

và vì vậy chỉ định làm sáng tỏ các biểu thức nguyên mẫu, sự khác nhau giữa nó với các biểu thức khác Điều này dường như đúng bới biểu thức thường được đánh giá như sau:

1 Đánh giá a * a, và gọi nó có giá trị A.

2 Đánh giá A/a, và gọi nó có giá trị B.

3 Đánh giá a + B, và gọi nó có giá trị C.

4 Đánh giá C – a.

Biểu thức “là” khác với biểu thức con với giá trị C và biểu thức con a Dẫn

xuất thứ 2, trái ngược hoàn toàn, làm sáng tỏ biểu thức như kết quả phép chia Mặc

dù không cò gì trong văn phạm ảnh hưởng đến dẫn xuất này, nó không phản ánh cách nhìn nhận về cấu trúc đúng của biểu thức

Phần kết thúc có thể tồn tại trong văn phạm phi ngữ cảnh dành cho ngôn ngữ

có lẽ không là thích hợp nhất Nó không kết hợp chặt chẽ theo bất cứ cách qui ước chuẩn, phải thực hiện với quyền ưu tiên của các toán tử và theo thứ tự tính toán từ trái qua phải, được áp dụng tính toán biểu thức.(Quyền ưu tiên của các toán tử được

áp dụng trong biểu thức a + b * c, phép nhân được thực hiện trước phép cộng; và biểu thức a – b + c có nghĩa (a - b) + c), không phải a- (b + c) Tuy nhiên, việc chọn giữa hai dẫn xuất của một xâu chuỗi, nó thường mong đợi chọn lựa, nếu có thể, một CFG cho một xâu chuỗi có thể chỉ có một dẫn xuất (ngoại trừ sự khác nhau không đáng kể giữa thứ tự hai biến trong một vài chuỗi trung gian được chọn để thay thế) Chúng ta

sẽ gặp lại câu hỏi này trong phần 6.4, khi thảo luận về sự nhập nhằng trong văn phạm phi ngữ cảnh

(câu lệnh) → … | (câu lệnh if) | (câu lệnh for ) |

Cú pháp của 2 kiểu câu lệnh này có thể được mô tả bởi các qui tắc:

(câu lệnh if) → if ({biểu thức}) {câu lệnh}

(câu lệnh for) → for({biểu thức}; (biểu thức)) {câu lệnh}

Mà {biểu thức}là biến khác, kết quả cũng khó khăn để mô tả một cách hoàn thành

Trang 9

Mặc dù trong cả hai trường hợp, phần cuối trên phần bên phải chỉ rõ câu lệnh đơn, tính logic của chương trình thường yêu cầu nhiều hơn một Vì vậy, thật cần thiết cho định nghĩa của {câu lệnh }cho phép một câu lện kép, đơn giản là thứ tự của nhiều câu lệnh hoặc không được đóng bởi {} Có thể dễ dàng viết định nghĩa cho {câu lệnh kép}cho trường hợp này Mô hình cú pháp như sự trình bày thiết lập cho cùng loại.

{câu lệnh }

Một phần thông qua mô hình bắt đầu với {, kết thúc với}, và có thể vượt qua vòng lặp nhiều lần hoặc không lần nào

Ví dụ 6.6: Các qui tắc văn phạm cho tiếng Anh.

Ưu điểm của việc sử dụng ngôn ngữ lập trình bậc cao giống như C và Pascal

mà cho phép chúng để viết các câu lệnh giống như tiếng Anh Nếu có thể sử dụng văn phạm phi ngữ cảnh để nắm bắt nhiều qui tắc của các ngôn ngữ lập trình, mà về chính tiếng Anh, tuân theo “các qui tắc văn phạm” hay không ?

Các câu tiếng Anh mà đơn giản đầy đủ có thể được mô tả bởi CFGs Nhiều câu phức tạp có thể phân tích bởi tính dẫn xuất

{câu tường thuật} → {mệnh đề chủ ngữ}{mệnh đề động từ} {bổ ngữ}|

{mệnh đề chủ ngữ}{mệnh đề động từ}

Nếu cung cấp các lý do cho mỗi phần của ba biến ở phần bên phải Tạo các lý

do khác nhau, các câu tiếng Anh có nhiều thành ngữ với văn phạm phi ngữ cảnh, thậm chí văn phạm phi ngữ cảnh với kích thước giới hạn, thì không khó; cái khó là làm điều này và tại cùng thời điểm không cho phép câu nói sai ngữ pháp Thậm chí khó hơn là các câu không tuân theo cú pháp tiếng Anh nhưng với người nói tiếng Anh gốc có lẽ sẽ không bao giờ nói, bởi vì họ không phát âm đúng

Ví dụ đơn giản này có lẽ minh họa cho điểm Xem xét các dẫn xuất:

{câu tường thuật}→ {chủ ngữ}{động từ}{bổ ngữ}

{chủ ngữ} → {danh từ thích hợp}

{danh từ thích hợp} → John | Jane

{động từ} → nhớ {bổ ngữ} → {danh từ thích hợp} | {đại từ phản thân}

{đại từ phản thân} → himself | herself

Nhiều hơn một câu lệnh tuân theo văn phạm này không hoàn toàn làm việc, ví dụ: “John nhớ chính cô ấy” và “Jane nhớ chính cậu ấy” Điều này có thể được lọa

Trang 10

trừ trong cách thức dễ hiểu (bao gồm sự phức tạp của văn phạm ) bằng cách đưa ra dẫn xuất giống như:

{câu tường thuật} → {danh từ giống đực}{động từ}{đại từ phản thân giống đực}

Rõ ràng hơn nhiều vấn đề tinh tế là “Jane nhớ Jane” Bình thường, chúng ta không nói như vậy, trừ khi có 2 người khác nhau nhưng trùng tên, nhưng không có cách rành mạch để ngăn cấm điều đó và cũng không ngăn cấm “Jane nhớ John” (Ít nhất, không có cách rõ ràng thật sự cần thiết sử dụng một dẫn xuất khác nhau cho mỗi câu) Tùy chọn không đáng kể này có sẵn, kể từ khi ngôn ngữ có ngôi Để phân biệt “Jane nhớ John,” là một câu tiếng Anh tốt một cách hoàn hảo, từ “Jane nhớ Jane” yêu cầu sử dụng ngữ cảnh và một cách chính xác điều này văn phạm phi ngữ cảnh không cho phép

mà ni(x) là số của i’s trong xâu chuỗi x

Như trong ví dụ 6.1 – 6.3, chúng ta có thể bắt đầu nghĩ về một định nghĩa qui nạp của L, và một lần tìm thấy một Chúng ta có thể dễ dàng chuyển nó về văn phạm phi ngữ cảnh

Một cách rõ ràng, A ∈ L Cho xâu chuỗi x trong L, sẽ tạo 1 xâu chuỗi dài hơn trong L bằng cách thêm một số 0 và một số 1 (Ngược lại, bất cứ xâu rỗng trong L có thể được dùng theo cách này) Một cách để thêm một ký hiệu vào điểm cuối, thực hiện hoặc 0x1 hoặc 1x0 Nó gợi ý cho dẫn xuất :

S → A | 0S1 | 1S0Không có xâu chuỗi nào trong L có thể chứa trong các dẫn xuất này, bởi vì các phần tử của L bắt đầu và kết thúc với cùng ký hiệu ; các xâu chuỗi 0110, 10001101,

và 0010111100 là ví dụ Nếu tìm kiếm các cách thức nhấn mạnh mỗi phần này trong các đọan của các phần tử đơn giản của L, chú ý mỗi phần tử trong sự kết hợp hai phần tử không rỗng của L (ví dụ, xâu chuỗi thứ ba là sự kết hợp của 001011 và 1100) Nhận xét này gợi ý dẫn xuất S → SS

Lý do rõ ràng nếu G là một CFG chứa các dẫn xuất thì

S → A | 0S1 | 1S0 | SSsau đó sự dẫn xuất trong G tạo duy nhất xâu chuỗi trong L Sẽ xác nhận ngược lại, rằng L ⊆ L (G)

Trang 11

Sẽ hỗ trợ khi giới thiệu :

Theo giả thuyết ban đầu, k ≥ 0 và cho bất cứ y với |y| ≤ k và d(y) = 0, y ∈

L(G) Nếu |x| = k + 1 và d(x) = 0, thì x ∈ L(G)

Nếu x bắt đầu 0 và kết thúc 1, thì x = 0y1 cho vài xâu chuỗi y thỏa mãn d(y) =

0 Theo giả thuyết ban đầu, y ∈ L(G) Vậy, khi S ⇒*

G y, dẫn xuất x từ S bắt đầu với dẫn xuất S → 1S0 và tiếp tục dẫn xuất y từ S thứ hai Khi x bắt đầu 1 kết thúc 0 thì được xử lý cùng cách, ngoại trừ S → 1S0 thường bắt đầu dẫn xuất

Trường hợp còn lại x bắt đầu và kết thúc cùng ký hiệu Khi d(x) = 0 có chiều dài ít nhất 2; giả định x = 0y0 cho vài xâu chuỗi y Chúng ta nên trình bày x là một dẫn xuất trong G Một dẫn xuất phải bắt đầu với sản phẩm S → SS; để trình bày đó

là một dẫn xuất thì phải x = wz, trong đó w và z là các xâu chuỗi ngắn có thể được dẫn xuất từ S (có thể cho phép dẫn xuất với S → SS, sau đó tiếp tục dẫn xuất w từ S ban đầu và z từ S tiếp theo.) Cách khác để nhấn mạnh điều kiện này thì cho rằng x là tiền tố của w sao cho 0 < |w| < |x| và d(w) = 0

Cho d(w) có tiền tố w của x Tiền tố ngắn nhất không rỗng là 0, và d(0) = 1; tiền tố dài nhất ngắn hơn x là 0y, và d(0y) = -1 (bởi ký hiệu cuối cùng của x là 0, và d(x) =0) Hơn nữa, giá trị d- của tiền tố thay đổi bằng 1, một ký hiệu mở rộng được thêm vào mỗi lần Có thể là tiền tố w, dài hơn 0 và ngắn hơn 0y, với d(w) = 0 Đó là kết quả cần đạt Trường hợp khi x = 1y1 là như nhau, và sự chứng minh hoàn thành

Ví dụ 6.8: CFG khác cho {x | n 0 (x) = n 1 (x)}

Tiếp tục với ngôn ngữ L ={x ∈ {0,1}* | n0(x) = n1(x)} cho ví dụ sau cùng; chúng ta xây dựng một CFG với 3 biến, dựa trên cách thức khác nhau để định nghĩa quy nạp cho L

Để bao hàm một phần tử của L là thêm cả hai ký hiệu thành xâu chuỗi sẵn có trong L Tuy nhiên, cách khác là thêm một ký hiệu đơn vào xâu chuỗi rất hiếm thấy của ký hiệu ngược nhau Hơn nữa, mối phần tử của L có thể được bao hàm cách thức này và trong thực tế có thể được bào hàm bằng cách thêm ký hiệu mở rộng tại vị trí bắt đầu Khai báo biến A và B, để biễu diễn các xâu chuỗi với ngoài 1 và ngoài 0, một cách tách biệt và biễu diễn hai ngôn ngữ L0 và L1 :

L0 = {x ∈ {0,1}* | n0(x) = n1(x) + 1} = {x ∈ {0,1}* | d(x) = 1}

L1 = {x ∈ {0,1}* | n0(x) = n1(x) + 1} = {x ∈ {0,1}* | d(x) = -1}

trong đó: d là hàm trong ví dụ 6.7 được định nghĩa d(x) = n0(x) – n1(x) Thật dễ dàng

để tính toán kết quả cần bắt đầu với S:

S → 0B | 1A | A

Trang 12

Cũng dễ dàng để tìm thấy kết quả cho mỗi biến A và B Nếu một xâu chuỗi trong L0

bắt đầu với 0, hoặc nếu một xâu chuỗi trong L1 bắt đầu với 1, thì đó là một phần tử của L Do vậy, kết quả thích hợp là:

A → 0S B → 1SNếu một xâu chuỗi trong L0 bắt đầu với 1, hoặc nếu một xâu chuỗi trong L1 bắt đầu

với 0

Trong trường hợp đầu, nếu x = 1y và x ∈ L0 thì y có nhiều 0 hơn 1 Và y có thể được

viết như sự kết hợp hai xâu chuỗi, mỗi xâu ngoài 0, và cho kết quả hoàn chỉnh A- bằng cách thêm A → 1AA, và xử lý B tương tự

Sử dụng cùng kỹ thuật trong ví dụ 6.7 ở đây Nếu d(x) = 1 và x = 1y, A là tiền tố của

y với d(A) = 0, và chính y là tiền tố của y với d(y) = 2 Vì vậy, có một vài tiền tố trung gian w của y với d(w) = 1, và y = wz trong đó w,z ∈ L0

Thảo luận này ít nhất hợp lý cho CFG với các kết quả

S → 0B | 1A | A

A → 0S | 1AA

B → 1S | 0BBphát sinh ngôn ngữ L Để bắt đầu biến là A hoặc B, chỉ có thể là một CFG phát sinh

L0 hoặc L1 Không khó để đưa ra sự kiểm chứng; xem bài tập 6.50

Định lý sau cung cấp ba cách đơn giản của việc chứa một CFG mới từ các ngôn ngữ được cho là phi ngữ cảnh

Pu = P1 ∪ P2 ∪ {Su → S1 | S2 }Nếu x có trong L1 hoặc trong L2, thì Su ⇒* x trong văn phạm Gu, bởi có thể bắt đầu dẫn xuất với Su → S1 hoặc Su → S2 và tiếp tục với dẫn xuất của x trong G1 hoặc G2 Do đó

Định lý 6.1:

Nếu L1 và L2 là ngôn ngữ phi ngữ cảnh thì ngôn ngữ L1 ∪ L2 , L1L2, và L1* cũng

là CFL

Trang 13

L = L1 ∪ L2 ⊆ L(Gu)Mặt khác, nếu x là dẫn xuất từ Su trong Gn, bước đầu tiên trong bất cứ dẫn xuất phải là

Pc = P1 ∪ P2 ∪ {Sc → S1S2 }Nếu x ∈ L1L2, thì x = x1x2, trong đó xi ∈ Li ứng với i Khi dẫn xuất x trong Gc như sau:

Sc ⇒ S1S2⇒* x1Su ⇒* x1x2 = xBước thứ 2 là dẫn xuất của x1 trong G1 và bước thứ 3 là dẫn xuất của x2 trong

G2 Ngược lại, nếu x có thể được dẫn xuất từ Sc, thì ở bước 1, trong dẫn xuất phải là

Sc ⇒ S1S2, x phải được dẫn xuất từ S1S2 Do đó, x = x1x2, trong đó ứng với mỗi i, xi có thể được dẫn xuất từ Si trong Gc Khi V1 ∩ V2 = ∅, được dẫn xuất từ Si trong Gc có nghĩa là được dẫn xuất từ Si trong Gi, và x ∈ L1L2

Văn phạm G* = (V, ∑, S, P) phát sinh L1 Cho

V= V1 ∪{S}

trong đó S ∉ V1 Ngôn ngữ L1* chứa các xâu chuỗi có dạng x = x1x2…xk, trong đó mỗi

xi ∈ L1 Khi mỗi xi có thể được dẫn xuất từ S1, thì dẫn xuất x từ S đủ khả năng dẫn xuất một xâu chuỗi của k S1’s Có thể thực hiện như đưa ra kết quả

S → S1S | Atrong P Do đó,

P = P1 ∪{S → S1S | A}

Chứng tỏ L1* ⊆ L(G*) rõ ràng Nếu x ∈ L(G*), thì x = A hoặc x có thể được dẫn xuất

từ một vài xâu chuỗi của dạng S1* trong G* Trong trường hợp 2, khi duy nhất kết quả trong G* bắt đầu với S1 thuộc trong G1, bao gồm cả

Trang 14

S1 → XB X → d B → b

riêng biệt Nếu chúng ta cung cấp cấu trúc cho phần đầu của chứng minh không đặt nhãn lại cho biến, kết quả văn phạm cho phép dẫn xuất

S ⇒ S1⇒XA ⇒dA ⇒da

thậm chí da không được dẫn xuất từ cả 2 văn phạm nguyên mẫu

Hệ quả 6.1 : Mỗi ngôn ngữ có qui tắc là một CFL.

Chứng minh :

Theo định nghĩa 3.1, các ngôn ngữ có qui tắc trên ∑ là các ngôn ngữ được chứa từ ∅, {A}, và {a}(a ∈∑), sử dụng các phép tính kết hợp, ghép nối và Kleene* Mỗi ngôn ngữ chính ∅, {A}, và {a} là một ngôn ngữ phi ngữ cảnh (Trong trường hợp đầu, chúng ta có thể sử dụng văn phạm bình thường không cần kết quả, và trong hai trường hợp khác, một kết quả là đủ)

Vì vậy hệ quả theo định lý 6.1, sử dụng giả thuyết cấu trúc của nguyên tắc

Ví dụ 6 9 : Một CFG tương đương một biểu thức qui tắc

Cho L là ngôn ngữ tương đương với biểu thức qui tắc

(011 + 1)*(01)*

Chúng ta có thể nắm bắt một vài công thức hiển nhiên trong thuật toán được chứng minh bởi định lý 6.1 Dẫn xuất

A → 011 | 1phát sinh ngôn ngữ {011,1} Theo phần ba của định lý, chúng ta có thể dùng các dẫn xuất

B → AB | A

A → 011 | 1với B như ký hiệu bắt đầu để phát sinh {011, 1}* Tương tự

C → DC | A

D → 01Dẫn xuất {01}* từ ký hiệu bắt đầu C Cuối cùng, chúng ta phát sinh ghép nối 2 ngôn ngữ bằng cách thêm dẫn xuất S → BC Văn phạm cuối có ký hiệu bắt đầu S, biến phụ trợ A, B, C và D, và các dẫn xuất:

Trang 15

Bắt đầu với bất cứ biểu thức qui tắc, chúng ta có thể bao hàm tương đương CFG sử dụng kỹ thuật minh họa trong ví dụ này Trong phần kế tiếp, bất cứ ngôn ngữ qui tắc

L cũng có thể được mô tả bởi một CFG, mà tất cả các dẫn xuất có dạng rất đơn giản,

và như một CFG có thể được bao hàm dễ dàng từ 1 FA chấp nhận L

Ví dụ 6.10: Một CFG cho {x | n 0 (x) n 1 (x)}

Cho ngôn ngữ L = {x ∈ {0,1}* | n0(x) ≠ n1(x)}

Cả hai CFG đều không tìm thấy trong ví dụ 6.7 và 6.8 cho bổ ngữ của L một cách đặc biệt Như trong chương 8, không có kỹ thuật chung cho việc tìm kiếm một văn phạm phát sinh bổ ngữ của CFL đã cho, trong một vài trường hợp không phải tất cả đều là ngôn ngữ phi ngữ cảnh Tuy nhiên, có thể nhấn mạnh L như việc kết hợp các ngôn ngữ L0 và L1, trong đó

L0 = {x ∈ {0,1}* | n0(x) > n1(x)}

L1 = {x ∈ {0,1}* | n1(x) > n0(x)}

và có thể kết hợp tìm kiếm một CFG G0 phát sinh L0 Rõ ràng 0 ∈ L0, và cho bất cứ x

∈ L0 sẽ luôn luôn giới thiệu một phần tử x0 và 0x trong L0 Điều này gợi ý dẫn xuất

S → 0 | S0 | 0SCũng cần thêm 1’s vào các xâu chuỗi Và không thể ngoại trừ thêm 1 vào một phần

tử của L0 , luôn luôn đưa ra một phần tử L0; tuy nhiên, nếu có 2 xâu chuỗi trong L0, ghép nối chúng thành chuỗi có ít nhất 2 chuỗi nhiều 0’s hơn 1’s và sau đó thêm 1 đơn

sẽ vẫn là một phần tử của L0 Chúng ta có thể thêm ở bên trái, bên phải hoặc ở giữa hai chuỗi Kết quả tương ứng

S → 1SS | SS1 | S1SKhông khó để nhìn thấy bất cứ xâu chuỗi nào được dẫn xuất từ kết quả trên

S → 0| S0 | 0S | 1SS | SS1 | S1S

là một phần tử của L0 (xem bài tập 6.43) Trong đảo ngược trực tiếp, chúng ta có thể làm tốt hơn: nếu G0 là văn phạm với kết quả

S → 0| 0S | 1SS | SS1 | S1Smỗi chuỗi trong L0 có thể được dẫn xuất trong G0

Chứng minh đưa ra độ dài của xâu chuỗi Xét trường hợp khó nhất, những trường hợp còn lại giải quyết trong bài tập Như ví dụ trước, cho d(x) = n0(x) – n1(x) Bước cơ bản, cho một xâu chuỗi trong L0 của chiều dài 1, là rõ ràng Mục tiêu k ≥ 1

và bất cứ x sao cho |x| ≤ k và d(x) > 0 có thể được dẫn xuất trong G0; và xét một xâu chuỗi x sao cho |x| = k+1 và d(x) > 0

Xét trường hợp x = 0y0 cho vài xâu chuỗi y Nếu x chỉ chứa 0’s, nó có được dẫn xuất từ S sử dụng kết quả S → 0 | 0S; vì vậy x chứa ít nhất một xâu 1 Kết quả biễu diễn x có dạng

x = w1z cho vài w và z với d(w) > 0 và d(z) >0

Ngày đăng: 11/11/2014, 15:21

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w