1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng Ngôn ngữ hình thức: Phần 1 - ĐH Sư phạm kỹ thuật Nam Định

107 40 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

Tiêu đề Ngôn Ngữ Hình Thức
Tác giả Phạm Hùng Phú, Vũ Thị Phương
Trường học Đại Học Sư Phạm Kỹ Thuật Nam Định
Chuyên ngành Công Nghệ Thông Tin
Thể loại Tập Bài Giảng
Năm xuất bản 2012
Thành phố Nam Định
Định dạng
Số trang 107
Dung lượng 1,13 MB

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

Cấu trúc

  • Chương 1. TỔNG QUAN VỀ NGÔN NGỮ VÀ AUTOMAT (7)
    • 1.1. Các khái niệm cơ bản (7)
      • 1.1.1. Khái niệm ngôn ngữ hình thức (7)
      • 1.1.2. Bảng chữ cái (alphabet) (9)
      • 1.1.3. Xâu trên bảng chữ cái (9)
      • 1.1.4. Các phép toán trên xâu (10)
      • 1.1.5. Ngôn ngữ (language) (11)
    • 1.2. Văn phạm và ngôn ngữ (14)
      • 1.2.1. Văn phạm (14)
      • 1.2.2. Ngôn ngữ sinh bởi Văn phạm (16)
      • 1.2.3. Văn phạm tương đương (17)
    • 1.3. Phân loại văn phạm và ngôn ngữ (17)
      • 1.3.1. Văn phạm và ngôn ngữ loại 0 (17)
      • 1.3.2. Văn phạm và ngôn ngữ loại 1 (18)
      • 1.3.3. Văn phạm và ngôn ngữ loại 2 (18)
      • 1.3.4. Văn phạm và ngôn ngữ loại 3 (18)
      • 1.3.5. Ví dụ (19)
    • 1.4. Một số tính chất của ngôn ngữ (20)
      • 1.4.1. Tính chất 1 (20)
      • 1.4.2 Tính chất 2 (21)
      • 1.4.3. Tính chất 3 (21)
      • 1.4.4. Tính chất 4 (22)
      • 1.4.5. Tính chất 5 (Tính đệ quy của ngôn ngữ) (22)
    • 1.5. Automat (24)
      • 1.5.1. Mô tả automat (24)
      • 1.5.2. Phân loại automat (25)
  • Chương 2. VĂN PHẠM CHÍNH QUY VÀ AUTOMAT HỮU HẠN (31)
    • 2.1. Automat hữu hạn (FINITE AUTOMAT - FA) (32)
      • 2.1.1. Định nghĩa Automat hữu hạn (32)
      • 2.1.2. Automat hữu hạn đơn định (37)
      • 2.1.3. Automat hữu hạn không đơn định-NFA (Nondeterministic Finite Automata) (43)
      • 2.1.4. Sự tương đương giữa DFA và NFA (50)
      • 2.1.5. NFA với ε-dịch chuyển (NFAε) (57)
      • 2.1.6. Sự tương đương giữa NFA có và không có ε-dịch chuyển (63)
    • 2.2. Biểu thức chính quy (RE: Regular Expressions) (65)
      • 2.2.1. Định nghĩa (66)
      • 2.2.2. Một số tính chất đại số của biểu thức chính quy (67)
      • 2.2.3. Sự tương đương giữa automat hữu hạn và biểu thức chính quy (68)
    • 2.3. Văn phạm chính quy (80)
      • 2.3.1. Văn phạm tuyến tính (80)
      • 2.3.2. Sự tương đương giữa văn phạm chính quy và automat hữu hạn (81)
      • 2.3.3. Tính chất của ngôn ngữ chính quy (88)
      • 2.3.4. Bổ đề bơm cho ngôn ngữ chính quy (91)
      • 2.3.5. Xác định ngôn ngữ chính quy (93)
  • Chương 3. VĂN PHẠM PHI NGỮ CẢNH VÀ AUTOMAT ĐẨY XUỐNG (0)
    • 3.1. Văn phạm phi ngữ cảnh (CFG: Context Free Grammar) (0)
      • 3.1.1. Định nghĩa (0)
      • 3.1.2. Dẫn xuất và ngôn ngữ (0)
      • 3.1.3. Cây dẫn xuất (0)
      • 3.1.4. Quan hệ giữa dẫn xuất và cây dẫn xuất (0)
      • 3.1.5. Dẫn xuất trái nhất, dẫn xuất phải nhất (0)
      • 3.1.6. Văn phạm nhập nhằng (mơ hồ) (0)
    • 3.2. Rút gọn văn phạm phi ngữ cảnh (0)
      • 3.2.1. Loại bỏ các ký tự thừa (0)
      • 3.2.2. Luật sinh ε (ε quy tắc) (0)
      • 3.2.3. Luật sinh đơn vị (0)
    • 3.3. Chuẩn hóa văn phạm phi ngữ cảnh (0)
      • 3.3.1. Dạng chuẩn Chomsky - CNF (Chomsky Normal Form) (0)
      • 3.3.2. Dạng chuẩn Greibach (Greibach Normal Form - GNF) (0)
    • 3.4. Tính chất của ngôn ngữ phi ngữ cảnh (0)
      • 3.4.1. Bổ đề bơm đối với CFL (Dùng để chứng minh một ngôn ngữ không là ngôn ngữ phi ngữ cảnh) (0)
      • 3.4.2. Tính chất đóng của CFL (0)
    • 3.5. Automat đẩy xuống (Push down Automata) (0)
      • 3.5.1. Mô tả PDA (0)
      • 3.5.2. Định nghĩa Automat đẩy xuống (0)
      • 3.5.3. Ngôn ngữ đoán nhận bởi PDA (0)
      • 3.5.4. PDA và văn phạm phi ngữ cảnh (0)
  • TÀI LIỆU THAM KHẢO (0)

Nội dung

Bài giảng Ngôn ngữ hình thức: Phần 1 nhằm cung cấp các kiến thức cơ bản, tổng quan về ngôn ngữ, văn phạm và automat; giúp sinh viên nắm vững các kiến thức cơ bản về văn phạm chính quy và automat hữu hạn, văn phạm phi ngữ cảnh và automat đẩy xuống là công cụ dùng để xây dựng và phân tích từ vựng, cú pháp của các ngôn ngữ lập trình.

TỔNG QUAN VỀ NGÔN NGỮ VÀ AUTOMAT

Các khái niệm cơ bản

1.1.1 Khái niệm ngôn ngữ hình thức

Ta đã từng nghe, từng nói nhiều về ngôn ngữ nhƣ ngôn ngữ tiếng Anh, tiếng

Ngôn ngữ lập trình Pascal và ngôn ngữ thuật toán là những khái niệm quan trọng trong lĩnh vực lập trình, nhưng ít người có thể định nghĩa chính xác ngôn ngữ là gì và có bao nhiêu loại ngôn ngữ Điều đáng quan tâm hơn cả là cách để phát triển và sở hữu ngôn ngữ riêng của mình.

Các nhà ngôn ngữ học đã nghiên cứu ngôn ngữ từ lâu, nhưng chủ yếu tập trung vào các khía cạnh xã hội và lịch sử như quá trình hình thành và đặc trưng ngôn ngữ của các dân tộc Sự xuất hiện của máy tính đã tạo ra nhu cầu sử dụng ngôn ngữ để diễn đạt thuật toán và dịch giữa các ngôn ngữ thuật toán khác nhau Điều này đã đặt ra nhiều vấn đề cần được giải quyết trong lĩnh vực ngôn ngữ học hiện đại.

- Làm thế nào để biểu diễn ngôn ngữ?

- Ngôn ngữ thuật toán cần phải có đặc trƣng gì?

- Thế nào là dịch từ ngôn ngữ này sang ngôn ngữ khác?

- Thế nào là bản dịch đúng? …

Quan tâm nghiên cứu, giải quyết những vấn đề nêu trên là lĩnh vực nghiên cứu của ngôn ngữ hình thức và chương trình dịch

Ngôn ngữ hình thức là một bộ môn khoa học nghiên cứu ngôn ngữ thông qua công cụ toán học, cho phép loại bỏ các đặc trưng riêng của từng loại ngôn ngữ để trừu tượng hoá và hình thức hoá các vấn đề cốt lõi của ngôn ngữ Vì lý do này, nó còn được gọi là “Lý thuyết ngôn ngữ lập trình” Để minh hoạ cho phương pháp nghiên cứu của lĩnh vực này, chúng ta sẽ xem xét một ví dụ cụ thể.

Xét trong câu tiếng Việt: “Tôi ăn cơm”

Câu trong tiếng Việt thường bao gồm ba thành phần chính: chủ ngữ, vị ngữ và bổ ngữ Ví dụ, trong câu "Tôi ăn cơm", "tôi" là chủ ngữ, "ăn" là vị ngữ, và "cơm" là bổ ngữ Sự sắp xếp này tạo nên cấu trúc cơ bản của một câu hoàn chỉnh trong tiếng Việt.

Trong đó có thể là hoặc , thay cho các viết này ta viết ngắn gọn:

 |

Tương tự như vậy ta có thể viết:

 anh | tôi | nó| ông | bà | em |…

 cam | bánh | kẹo | xôi | báo | voi…

 đi | đứng | học | làm | nhảy | viết | vẽ…

Theo nguyên tắc này, người ta có thể tạo ra các câu một cách máy móc Ví dụ nhƣ: tôi viết báo cáo, anh ấy học bài, …

Chương 1 Tổng quan về Ngôn ngữ và Automat

Một bảng chữ cái, hay còn gọi là bộ chữ cái, là một tập hợp hữu hạn các ký tự, được ký hiệu là  Các ký tự trong bảng chữ cái này được gọi là chữ cái hoặc ký hiệu.

- Tập hợp các chữ cái La tinh a, b, c, …, A, B, …, Z  là một bảng chữ cái và a, b, , A, là các chữ cái hay các ký tự

- Tập hợp các bít nhị phân 0, 1 là một bảng chữ cái và 0, 1 là các ký hiệu hay các ký tự

- Tập hợp các chữ cái Hy Lạp  = , , , …,  là một bảng chữ cái và ,

, , …, , là các ký hiệu hay các ký tự

Tập hợp các chữ số thập phân từ 0 đến 9 tạo thành một bảng chữ cái, trong đó các chữ cái từ 1 đến 9 được coi là các ký hiệu hoặc ký tự Để xác định một ký tự có thuộc về bảng chữ cái này hay không, ta sử dụng ký hiệu  để chỉ sự thuộc về và ký hiệu  để chỉ sự không thuộc về.

1.1.3 Xâu trên bảng chữ cái

Xâu (string) hay từ (word) trong một bảng chữ cái  là một dãy hữu hạn gồm một hoặc nhiều ký tự từ bảng chữ cái đó, với khả năng xuất hiện nhiều lần của mỗi ký tự.

- Aaab, bbbbb là các từ trên bảng chữ cái La Tinh

- , 0, 1, 00101, 000011 là các từ trên bảng chữ cái  = 0, 1 Độ dài của từ hay xâu w là số ký tự tạo thành xâu w và đƣợc ký hiệu là |w|

- Thuật ngữ xâu hay từ còn đồng nghĩa với xâu ký tự

- Xâu rỗng là xâu không có chữ cái nào, độ dài của xâu rỗng bằng không, xâu rỗng đƣợc ký hiệu là 

Xâu x  đƣợc gọi là xâu con của xâu w nếu x đƣợc tạo từ các ký tự nằm liền kề nhau trong xâu w

Tiền tố của xâu w là một xâu con bất kỳ nằm ở đầu xâu w

Hậu tố của xâu w là một xâu con bất kỳ nằm ở cuối xâu w

Ví dụ: cho các xâu w = abc và x = de trên bảng chữ cái La tinh;

- Các xâu a, b, c, ab, bc, abc là các xâu con của xâu w

- Các xâu a, ab, abc là các tiền tố của xâu w

- Các xâu c, bc, abc là các hậu tố của xâu w

1.1.4 Các phép toán trên xâu

1) Phép nhân ghép hai xâu

Cho hai xâu x = x 1 x 2 …x n và y = y 1 y 2 …y m trên bảng chữ cái , phép nhân ghép hai xâu x và y là phép cho ta một xâu xy = x 1 x 2 …xny 1 y 2 …ym trên bảng chữ cái 

Xâu xy là xâu ghép của hai xâu x và y, được tạo ra bằng cách viết xâu x trước, sau đó là xâu y mà không có khoảng trống giữa chúng.

Ví dụ: Xâu ghép của hai xâu w = abc và u = de trên bảng chữ cái La Tinh là xâu wu = abcde và w = w = w

Ta ký hiệu: w 0 = ; w 1 = w; w 2 = ww; , w i = ww i-1 với i > 0

Cho xâu w = a 1 a 2 …an trên bảng chữ cái , phép đảo ngƣợc xâu w là phép cho ta kết quả là một xâu trên bảng chữ cái , ký hiệu là w R và w R = a n a n-1 …a2a 1

Xâu w R là xâu đảo ngược của xâu w, được tạo ra bằng cách viết lại xâu w theo thứ tự ngược Đặc biệt, xâu rỗng ε cũng là xâu đảo ngược của chính nó, tức là ε R = ε.

Chương 1 Tổng quan về Ngôn ngữ và Automat

Bảng chữ cái  bao gồm các ký hiệu, trong đó  * đại diện cho tập hợp tất cả các xâu trên , bao gồm cả xâu rỗng, trong khi  + là tập hợp tất cả các xâu trên  ngoại trừ xâu rỗng Mối quan hệ giữa hai tập hợp này được thể hiện qua công thức  * =  + ∪ {} hay tương đương với  + =  * - {}.

 * = aabcc, aaaaa, cab,…. là các xâu trên bảng chữ cái 

 * = e,0,1,00,01,10,11,000… là tập các xâu trên 

Ta quy ƣớc xâu dạng aaaa…a gồm n kí tự a ký hiệu là a n

Cho bảng chữ cái , tập con bất kỳ của tập hợp  * đƣợc gọi là ngôn ngữ (ngôn ngữ hình thức) trên bảng chữ cái 

Cho  = a; L = a i  với a   và i  N thì L là ngôn ngữ trên bảng chữ cái 

2) Các phép toán trên ngôn ngữ

Ngôn ngữ L được định nghĩa là một tập hợp, với ký hiệu |L| biểu thị số lượng xâu hoặc số phần tử trong L Nếu |L| là một số hữu hạn, thì ngôn ngữ L được coi là ngôn ngữ hữu hạn.

Từ các ngôn ngữ cho trước, ta có thể thu được các ngôn ngữ mới nhờ áp dụng các phép toán trên ngôn ngữ

Language L is a set, allowing for the application of set operations such as union, intersection, and difference on languages sharing the same alphabet, resulting in the formation of new languages within that alphabet.

- Cho  là bảng chữ cái L 1 , L 2 là hai ngôn ngữ trên  thì:

L 1 - L 2 = x xL 1 và x L 2  cũng là các ngôn ngữ trên 

Ngoài ra, còn có một số phép toán thường gặp khác như:

- Phép lấy phần bù (complement):

Phần bù của một ngôn ngữ L trên bảng chữ cái  là một ngôn ngữ trên , ký hiệu là L và đƣợc xác định nhƣ sau:

Tích ghép của hai ngôn ngữ L1và L 2 trên bảng chữ cái Σ là một ngôn ngữ trên bảng chữ cái Σ vàđƣợc xác định nhƣ sau:

Cho Llà ngôn ngữ trên bảng chữ cái 

Ký hiệu: L 0 = , ở đây  ký hiệu cho từ rỗng, đó là từ không chứa ký hiệu nào của bảng chữ cái, hay là từ có độ dài bằng 0

Tổng quát: ký hiệu L i = L i-1 L với i = 1, 2, …, n

- Phép lấy bao đóng (closure)

  1 i L i với mọi n > 0; có thể coi L + là tập tất cả các xâu có độ dài hữu hạn và khác không

  1 i L i với mọi n  0; nhƣ vậy, L * là tập tất cả các xâu có độ dài hữu hạn

Hiển nhiên, lặp, bao đóng của một ngôn ngữ L trên bảng chữ cái Σ là một ngôn ngữ trên bảng chữ cái Σ

Chương 1 Tổng quan về Ngôn ngữ và Automat

Ví dụ: Cho ngôn ngữ L = { a, ba } thì:

- L 3 = { aaa, aaba, abaa, ababa, baaa, baaba, babaa, bababa};

- L * = { ε, a, ba, aa, aba, baa, baba, aaa, aaba, abaa, ababa, baaa, baaba, … }

Một ngôn ngữ L trên bảng chữ cái Σ là tập con của Σ * Vấn đề quan trọng là xác định các xâu thuộc về ngôn ngữ L Điều này dẫn đến việc cần phải biểu diễn ngôn ngữ một cách chính xác Để thực hiện việc này, có nhiều phương pháp có thể áp dụng.

Đối với một ngôn ngữ hữu hạn, số lượng xâu của nó là có hạn Để biểu diễn ngôn ngữ này một cách đơn giản, ta chỉ cần liệt kê tất cả các xâu thuộc về ngôn ngữ đó.

+ Liệt kê không hết hết: Liệt kê một số xâu của ngôn ngữ và có ám chỉ quy luật để tìm các xâu khác

Ví dụ: L 1 = { ε, a, aa, aaa, aaaa, }

- Chỉ ra tính chất đặc trƣng:

Trong trường hợp ngôn ngữ là vô hạn hoặc không thể liệt kê tất cả các xâu, người ta cần tìm ra tính chất đặc trưng chung của các xâu để xác định chúng Tính chất này thường được mô tả thông qua một vị từ, giúp người dùng hiểu rõ hơn về các xâu thuộc ngôn ngữ đó.

Ví dụ: L 1 = { a i | i là một số nguyên tố }

Văn phạm và ngôn ngữ

Văn phạm là một công cụ quan trọng để mô tả ngôn ngữ, với định nghĩa toán học rõ ràng Nó đã được nghiên cứu kỹ lưỡng bởi các nhà toán học và trở thành một thành phần chính yếu trong lý thuyết ngôn ngữ.

Văn phạm G là một hệ thống gồm bốn thành phần đƣợc xác định nhƣ sau:

Chương 1 Tổng quan về Ngôn ngữ và Automat

+ N – Là một tập hữu hạn các ký hiệu không kết thúc (Nonterminal) hay tập các biến (variables)

+ T – Là tập hữu hạn các ký hiệu kết thúc hay ký hiệu cuối (Terminal) với

+ P – Là tập hữu hạn các quy tắc sinh hay còn đƣợc gọi là luật sinh

Nói một cách khác P là một ánh xạ từ tập (N  T) + sang tập (N  T) *

Giả sử α  (N  T) + , β (N  T) * và β là ảnh của α qua ánh xạ P, khi đó cặp

(α, β) là một luật sinh và đƣợc ký hiệu là α  β

+ SN - là ký hiệu chƣa kết thúc đặc biệt dùng làm ký hiệu bắt đầu (start)

Các chữ cái La Tinh viết hoa (A, B, C, ) được sử dụng để chỉ các ký hiệu trong tập ký hiệu không kết thúc N Chữ cái in hoa xuất hiện ở vế trái của luật sinh đầu tiên, đóng vai trò là ký tự khởi đầu của văn phạm.

- Các chữ cái viết thường ở đầu bảng chữ cái La Tinh (a, b, c, ) hoặc các chữ số để chỉ các ký hiệu kết thúc thuộc tập ký hiệu kết thúc T

- Các chữ cái viết thường ở cuối bảng chữ cái La Tinh (x, y, z, w, ) để chỉ xâu các ký hiệu kết thúc

Bằng quy ước này, ta có thể xác định một cách rõ ràng các ký hiệu không kết thúc, ký hiệu kết thúc và ký hiệu bắt đầu của văn phạm thông qua việc xem xét các luật sinh Do đó, để biểu diễn một văn phạm, chỉ cần liệt kê các luật sinh mà không cần phải chỉ rõ tất cả các thành phần của văn phạm.

1.2.2 Ngôn ngữ sinh bởi Văn phạm

Nếu α → β là một luật sinh thì γ α δ  γ β δ đƣợc gọi là một dẫn xuất (trực tiếp), có nghĩa là áp dụng luật sinh α → β vào xâu γ α δ để sinh ra xâu γ β δ

3, , α m-1  α m thì ta nói rằng: α m đƣợc suy dẫn ra từ α

1 thông qua dãy dẫn xuất α

1 dẫn xuất (gián tiếp) ra α m

1 i  α m là dẫn xuất qua i bước;

* α m là dẫn xuất qua không, một hoặc nhiều bước;

+ α m là dẫn xuất qua một hoặc nhiều bước

2) Ngôn ngữ sinh bởi văn phạm

Ngôn ngữ được sinh ra từ văn phạm G = (N, T, P, S) bao gồm các chuỗi w thuộc T* được dẫn xuất từ ký hiệu bắt đầu S thông qua các quy tắc sinh trong tập P, và được ký hiệu là L(G).

Ta có nhận xét mọi dãy dẫn xuất có thể có trong G phải có dạng:

Chương 1 Tổng quan về Ngôn ngữ và Automat

Cho hai văn phạm G1 = (N 1 , T, P 1 , S 1 ) và G 2 = (N 2 , T, P 2 , S 2 ), ta nói rằng G1 tương đương với G 2 , ký hiệu là G 1  G 2 nếu L(G 1 ) = L(G 2 )

Nói cách khác hai văn phạm được gọi là tương đương nếu chúng sinh ra cùng một ngôn ngữ

Cho văn phạm G 1 = (N 1 , T 1 , P 1 , S 1 ) trong đó:

Như vậy, G1 và G 2 là hai văn phạm tương đương.

Phân loại văn phạm và ngôn ngữ

Trong bài viết này, chúng ta sẽ khám phá các loại ngôn ngữ và mối quan hệ giữa chúng Nhiều nhà khoa học đã đề xuất các phương pháp phân loại khác nhau, nhưng phân loại của nhà toán học Chomsky được coi là tốt nhất cho nghiên cứu Chomsky phân loại ngôn ngữ dựa trên các quy tắc sinh, và phương pháp này được sử dụng chủ yếu trong lý thuyết ngôn ngữ hình thức.

1.3.1 Văn phạm và ngôn ngữ loại 0

Văn phạm loại 0, hay còn gọi là văn phạm không hạn chế (Unrestricted Grammar), là loại văn phạm mà các quy tắc sinh của nó không bị ràng buộc bởi bất kỳ điều kiện nào.

Ngôn ngữ sinh bởi văn phạm loại 0 đƣợc gọi là ngôn ngữ loại 0

1.3.2 Văn phạm và ngôn ngữ loại 1

Văn phạm G đƣợc gọi là văn phạm loại 1 nếu các quy tắc sinh của nó có dạng:    , với điều kiện (NT) + và     

Văn phạm loại 1 còn đƣợc gọi là văn phạm cảm ngữ cảnh (Context Sensitive

Ngôn ngữ sinh bởi văn phạm loại 1 đƣợc gọi là ngôn ngữ loại 1 và còn đƣợc gọi là ngôn ngữ cảm ngữ cảnh (CSL)

1.3.3 Văn phạm và ngôn ngữ loại 2

Văn phạm G đƣợc gọi là văn phạm loại 2 nếu các quy tắc sinh của nó có dạng:   ; với N (NT) *

Văn phạm loại 2 còn đƣợc gọi là văn phạm phi ngữ cảnh (Context free

Ngôn ngữ sinh bởi văn phạm loại 2 đƣợc gọi là ngôn ngữ loại 2 và còn đƣợc gọi là ngôn ngữ phi ngữ cảnh (CFL)

1.3.4 Văn phạm và ngôn ngữ loại 3

Văn phạm G đƣợc gọi là văn phạm loại 3 nếu mọi quy tắc sinh của nó có một trong hai dạng:

1 A  Bw hoặc A  w (văn phạm tuyến tính trái);

2 A  wB hoặc A  w (văn phạm tuyến tính phải)

Văn phạm loại 3 còn đƣợc gọi là văn phạm chính quy (Regular Grammar - RG)

Ngôn ngữ sinh bởi văn phạm loại 3 đƣợc gọi là ngôn ngữ loại 3 và còn đƣợc gọi là ngôn ngữ chính quy (RL)

Từ cách phân loại trên ta có nhận xét: Văn phạm loại 3 cũng là văn phạm loại

2; văn phạm loại 2 cũng là văn phạm loại 1; văn phạm loại 1 cũng là văn phạm loại 0

Từ đây suy ra nhận xét trên cũng đúng với các loại ngôn ngữ Tức là:

Chương 1 Tổng quan về Ngôn ngữ và Automat

- P = {S → aS; S → aA; A → bA; A → b} Đây là văn phạm loại 3 (vì tập luật sinh có dạng tuyến tính phải)

Chẳng hạn, một dẫn xuất từ S có dạng:

S  aS  aaS  aaaA  aaabA  aaabbA  aaabbbA  aaabbbb = a 3 b 4

Hay văn phạm sinh ra ngôn ngữ L(G) = {a m b n | m, n ≥ 1} b) - N = {S};

- P: S → abS  a là văn phạm tuyến tính phải c) - N = {S, A, B};

- P: S → Aab; A → Aab B; B → a   là văn phạm tuyến tính trái

P = { S → aSb; S → ab } Đây là văn phạm loại 2 (CFG)

Chẳng hạn, một dẫn xuất từ S có dạng:

Hay văn phạm sinh ra ngôn ngữ L(G

P = { S → aSBC; S → aBC; CB → BC; aB →ab; bB → bb; bC → bc; cC → cc} Đây là văn phạm loại 1 (CSG)

Chẳng hạn, một dẫn xuất từ S có dạng:

S  aSBC  aaBCBC  aabCBC  aabBCC  aabbCC  aabbcC

Hay văn phạm sinh ra ngôn ngữ L(G

P: SA → a; S → bcA; acS → cA Đây là văn phạm loại 0.

Một số tính chất của ngôn ngữ

Ngôn ngữ có bản chất là một tập hợp, vì vậy nó sở hữu đầy đủ các tính chất của tập hợp Tuy nhiên, ngôn ngữ cũng được hình thành từ văn phạm, điều này đặt ra câu hỏi về những tính chất bổ sung ngoài các tính chất của tập hợp mà ngôn ngữ có Phần này sẽ trình bày một số tính chất của ngôn ngữ được sinh ra từ văn phạm.

Loại của ngôn ngữ đóng với phép hợp

Nói cách khác, tính chất 1 khẳng định rằng hợp của 2 ngôn ngữ cùng loại là ngôn ngữ cùng loại

Giả sử có hai văn phạm G1 = (N1, T, P1, S1) và G2 = (N2, T, P2, S2) tương ứng sinh ra ngôn ngữ L1 và L2 Khi kết hợp hai ngôn ngữ này, ta có L = L1 ∪ L2 và cần chứng minh rằng L là ngôn ngữ được sinh ra bởi một văn phạm G có cùng loại với G1 và G2 Lưu ý rằng để việc xem xét này có ý nghĩa, hai văn phạm phải chia sẻ cùng một bảng chữ cái T.

Chương 1 Tổng quan về Ngôn ngữ và Automat

Ta xây dựng văn phạm G = (N, T, P, S) thoả mãn 2 điều kiện:

Muốn thế, ta lấy N = N 1 N 2 S (S không thuộc N 1 , N 2 );

Với cách xây dựng G nhƣ trên rõ ràng G cùng loại với G 1 , G 2 Bây giờ, ta cần chứng tỏ: L = L(G) = L 1 L 2

Giả sử wL, theo định nghĩa S *  w trong G, từ cách xây dựng P, bước đầu tiên trong G chỉ có thể:

S  S1 * w hoặc S  S2 * w; nhƣng từ S1 * w hoặc S2 * w ta suy ra w  L1L2 Ngƣợc lại nếu w  L1  L2, khi đó w  L1 hoặc w L2

Theo định nghĩa suy ra S1 * w hoặc S 2 *  w Nếu w  L 1 có nghĩa là

S 1 *  w Suy ra S  S 1 *  w ; tức là S *  w hay w  L, còn nếu w L 2 có nghĩa là S 2 *  w Suy ra S  S 2 *  w suy ra S *  w hay w  L

Loại của ngôn ngữ đóng với phép lặp

Tính chất 2 khẳng định rằng phép lặp của một ngôn ngữ phải thuộc cùng loại với ngôn ngữ ban đầu Cụ thể, nếu M = L L…L = L i, thì M sẽ là ngôn ngữ cùng loại với L Việc kiểm tra tính đúng đắn của các tính chất này là hoàn toàn khả thi.

Cho G = (N, T, P, S) không thuộc loại văn phạm 0, vì ký hiệu ban đầu S xuất hiện ở vế phải của quy tắc sinh Điều này dẫn đến sự tồn tại của văn phạm G’ tương đương với G, nhưng không có ký hiệu bắt đầu ở vế phải của quy tắc sinh.

Giả sử cho G = (N, T, P, S) là văn phạm loại 1, hoặc loại 2, hoặc loại 3, ta xây dựng G‟= (N‟, T, P‟, S‟) nhƣ sau:

N‟= N  S‟; ở đây S‟ là ký hiệu mới chƣa có trong N và T

Nói cách khác P‟ gồm tất cả các quy tắc sinh của G có bổ sung thêm các quy tắc sinh dạng S‟   nếu trong P có quy tắc sinh dạng S  

Trong cách xây dựng của G', không có quy tắc nào có ký hiệu bắt đầu S' xuất hiện ở vế phải Chúng ta cần chứng minh rằng G và G' là tương đương, tức là L(G) = L(G').

Giả sử w thuộc L(G), theo định nghĩa, dẫn xuất S* dẫn đến w Bước đầu tiên của dẫn xuất này là S dẫn đến α, với α thuộc (N∪T)+ Trong quá trình xây dựng G', vì trong G có quy tắc S → α, nên trong G' cũng có quy tắc S' → α Do đó, dẫn xuất S' dẫn đến α* dẫn đến w nằm trong G', vì dẫn xuất α* dẫn đến w trong G cũng là dẫn xuất trong G'.

Ngƣợc lại giả sử w L(G‟) khi đó theo định nghĩa ta có S‟ *  w Lập luận tương tự như trên ta có L(G)  L(G‟) Suy ra L(G) = L(G‟)

Tính chất 3 cho phép xem các văn phạm loại 1, 2, 3 không có ký hiệu bắt đầu ở vế phải của các quy tắc sinh Nếu từ rỗng  thuộc L(G), thì trong P chắc chắn sẽ có quy tắc S  .

Cho G = (N, T, P, S) không phải là văn phạm loại 0, khi đó L(G)\ hoặc L(G)   là ngôn ngữ cùng loại L(G)

Tính chất 4 có thể dễ dàng chứng minh dựa trên tính chất 3, bởi nếu văn phạm không phải là loại 0 sinh ra từ rỗng, thì tập hợp các quy tắc sinh P sẽ bao gồm quy tắc.

Việc loại bỏ hoặc bổ sung quy tắc sinh S   trong ngữ pháp G không làm thay đổi loại của ngôn ngữ Do đó, tập ngôn ngữ L(G) có thể được định nghĩa là L(G)- hoặc L(G)  .

1.4.5 Tính chất 5 (Tính đệ quy của ngôn ngữ)

Văn phạm G được coi là đệ quy nếu có thuật toán xác định một từ w có thuộc ngôn ngữ L(G) hay không Trước khi bàn về tính đệ quy của ngôn ngữ, cần lưu ý một số nhận xét quan trọng.

Chương 1 Tổng quan về Ngôn ngữ và Automat

Giả sử G = (N, T, P, S) là một văn phạm cảm ngữ cảnh, xâu rỗng  thuộc L(G) nếu và chỉ nếu tập quy tắc P có quy tắc S   Do đó, việc kiểm tra sự tồn tại của quy tắc S   trong P là cần thiết Khi loại bỏ quy tắc S   khỏi P, chúng ta sẽ có một văn phạm cảm ngữ cảnh mới.

Văn phạm G' = (N, T, P', S) tạo ra ngôn ngữ L(G) mà không bao gồm chuỗi rỗng ε Mỗi dẫn xuất trong G' đều tuân thủ điều kiện của văn phạm cảm ngữ cảnh, tức là mọi quy tắc sinh trong G' có độ dài vế phải lớn hơn hoặc bằng vế trái.

Giả sử V = NT, V = n và w là xâu khác xâu rỗng thuộc L(G‟)

Ta suy ra S *  w Giả sử dẫn xuất có dạng:

S   1   2  …   m (a) Ở đây  m = w Từ nhận xét trên ta suy ra:

Giả sử tồn tại i sao cho các xâu  i và  i+j trong dãy dẫn xuất có độ dài bằng p Nếu j > n p, thì trong dãy dẫn xuất (a) sẽ có ít nhất hai xâu giống nhau, dẫn đến việc trong V* chỉ có tối đa n p xâu có độ dài p Ngược lại, chúng ta có thể bỏ đi ít nhất một bước trong dãy dẫn xuất Nếu  r =  s với r < s, thì dãy dẫn xuất (a) có thể được viết lại ngắn hơn.

Về mặt trực quan, nếu tồn tại một dẫn xuất của w, thì dẫn xuất đó sẽ không quá dài Nhận xét này là cơ sở cho định lý sau: Định lý: G = (N, T, P, S) là văn phạm cảm ngữ cảnh, do đó G là văn phạm đệ quy.

Giả sử ngôn ngữ L(G) không chứa từ rỗng, ta có thể giả định rằng P không có quy tắc S   Với w thuộc L(G), w nằm trong T+ và có độ dài n, chúng ta cần phát triển một thuật toán để xác định xem w có thuộc L(G) hay không.

Ta định nghĩa tập T m nhƣ sau:

Ta cũng dễ dàng thấy rằng có thể tìm T m qua T m-1

Nếu S *   và   n thì  phải thuộc vào một T m nào đó, trái lại nếu không dẫn xuất đƣợc ra  hoặc > n thì  sẽ không thuộc bất kỳ T m nào

Từ cách xây dựng Tm ở trên suy ra T m là dãy không giảm T m-1  Tm với mọi m 1; hơn nữa, dãy này bị chặn nên tồn tại m mà T m = T m-1 = T‟ Nếu w không thuộc

T m khi đó w không thuộc L(G) và đương nhiên nếu w thuộc T m thì S *  w

Automat

Ngoài văn phạm, ngôn ngữ còn được biểu diễn qua automat, một "máy" trừu tượng với cơ cấu và hoạt động đơn giản nhưng có khả năng nhận diện ngôn ngữ Automat có thể xác định xem một xâu bất kỳ có thuộc ngôn ngữ hay không thông qua một quy trình đã được lập trình sẵn Các máy này hoạt động theo đúng lộ trình đã định để thực hiện quá trình tự động hóa Một trong những loại máy tự động tiêu biểu và mạnh mẽ nhất chính là

Chương 1 Tổng quan về Ngôn ngữ và Automat máy tính số ngày nay Tuy hoạt động theo kiểu “máy”, song thực chất mỗi bước làm việc của automat là một sự thay thế ký hiệu, nghĩa là một bước dẫn xuất như đã nói ở trên Nói chung, một mô hình automat thường bao gồm những thành phần chủ yếu nhƣ sau:

Hình 1 Mô hình chung cho một automat

Xâu được xác định sẽ được lưu trữ trên băng vào (input) Tại mỗi thời điểm, máy sẽ đọc một ký tự từ băng vào, đồng thời xem xét ký hiệu trong bộ nhớ Dựa trên thông tin này, bộ điều khiển của automat sẽ quyết định bước chuyển đến trạng thái tiếp theo.

Các loại automat tương ứng với một số lớp văn phạm sẽ được giới thiệu lần lượt trong các chương tiếp theo

Dựa vào sự hoạt động của automat, có thể chia automat thành hai loại automat đơn định và automat không đơn định

Automat đơn định (Deterministic Automata) là một loại automat mà tại mỗi bước di chuyển, bộ điều khiển chỉ có một lựa chọn duy nhất cho trạng thái tiếp theo khi đọc ký tự trên băng vào Tính duy nhất này thể hiện tính đơn định, cho thấy hàm chuyển của automat này luôn là đơn trị.

Automat không đơn định (Non-deterministic Automata) là loại automat mà tại mỗi bước di chuyển, bộ điều khiển có nhiều khả năng để chọn lựa trạng thái tiếp theo khi đọc ký tự trên băng vào Tính không đơn định này được thể hiện qua hàm chuyển đa trị của automat, cho phép nhiều trạng thái có thể được chọn đồng thời.

Bộ điều khiển Đầu đọc

CÂU HỎI VÀ BÀI TẬP CHƯƠNG 1

1.1 Nêu khái niệm ngôn ngữ hình thức, công cụ và lĩnh vực nghiên cứu của nó 1.2 Nêu các khái niệm: bảng chữ cái, xâu trên bảng chữ cái, tiền tố, hậu tố; cho ví dụ

1.3 Nêu các phép toán trên xâu; cho ví dụ

1.4 Nêu các khái niệm:  * ,  + , ngôn ngữ; cho ví dụ

1.5 Nêu các phép toán trên ngôn ngữ; cho ví dụ

1.6 Nêu định nghĩa văn phạm; cho ví dụ

1.7 Nêu khái niệm ngôn ngữ sinh bởi văn phạm; cho ví dụ

1.8 Nêu cách phân loại và các loại văn phạm và ngôn ngữ; cho ví dụ

1.9 Nêu khái niệm văn phạm tương đương; cho ví dụ

1.10 Nêu các tính chất của ngôn ngữ

1.11 Mô tả automat, cách phân loại và các loại automat

1.12 Nêu các phương pháp biểu diễn ngôn ngữ; cho ví dụ

1.13 Cho bảng chữ cái T = {0 ,1} Ta ký hiệu T * là tập tất cả các xâu (kể cả xâu rỗng )

1) Hãy biểu diễn T * dưới dạng liệt kê theo thứ tự độ dài tăng dần và trong các xâu có cùng độ dài thì theo thứ tự từ điển

2) Chỉ ra một số ngôn ngữ trên bảng chữ cái T

1.14 Cho bảng chữ cái T = {0 ,1} L 1 và L 2 là hai ngôn ngữ trên bảng chữ cái T; với:

Câu hỏi và bài tập chương 1

1.15 Cho bảng chữ cái  = {a , b} L là một ngôn ngữ trên bảng chữ cái ; với: L

1.16 Tìm các biểu diễn hữu hạn cho các ngôn ngữ vô hạn sau:

1.17 Cho các văn phạm sau đây:

1) G = (N, T, P, S) với tập quy tắc sinh là:

P ={S  ABC; AB aADb; Dab  bDb; DbC  BaC; aB Ba; AB ;

2) G = (N, T, P, S) với tập quy tắc sinh là:

P = {S  ABaDF; BD DCB; BC  bB; AD AAE;

EC AE; EB BE; EF BBDF; DF  B | }

3) G = (N, T, P, S) với tập quy tắc sinh là:

P = {S  SS; S aSb; S bSa; S ab; S ba}

4) G = (N, T, P, S) với tập quy tắc sinh là:

Văn phạm P = {S  aA; S  a; A  abB | B | } bao gồm các quy tắc sản sinh Để xác định loại văn phạm, ta có thể phân loại như sau: văn phạm chính quy là các văn phạm có thể được mô tả bằng các quy tắc sản sinh có dạng A → aB hoặc A → a, trong khi văn phạm phi ngữ cảnh cho phép các quy tắc có dạng A → α, với α có thể là chuỗi bất kỳ Trong trường hợp này, P là văn phạm phi ngữ cảnh vì nó có quy tắc A  abB Cuối cùng, văn phạm ngữ cấu là các văn phạm có thể được mô tả bằng ngữ pháp hình thức với các quy tắc phức tạp hơn Đối với phần viết lại, văn phạm có thể được diễn đạt đầy đủ như sau: S → aA | a; A → abB | B | ε; B → ε.

1.18 Hãy chỉ ra mỗi văn phạm sau đây thuộc loại nào? Nêu các thành phần của mỗi văn phạm đó

2) S  AB; AB  BA; A  aA; B  Bb; A  a; B  b

3) S  A; S  AAB; Aa  Aba; A aa; BbAbb; AB ABB; B b 1.19 Cho văn phạm có tập các luật sinh: S Sa; S a; S

1) Văn phạm trên thuộc loại nào; nêu đầy đủ các thành phần của văn phạm trên

2) Chỉ ra các dẫn xuất sinh ra mỗi từ sau:

3) Chỉ ra ngôn ngữ sinh bởi văn phạm trên

1.20 Cho văn phạm có tập các luật sinh: S aA; A aA; A aB; B bB; Bb

1) Văn phạm trên thuộc loại nào; nêu đầy đủ các thành phần của văn phạm trên

2) Chỉ ra các dẫn xuất sinh ra mỗi từ sau:

3) Chỉ ra ngôn ngữ sinh bởi văn phạm trên

1.21 Cho văn phạm có tập các luật sinh: S bSa; S

1) Văn phạm trên thuộc loại nào; nêu đầy đủ các thành phần của văn phạm trên

2) Chỉ ra các dẫn xuất sinh ra mỗi từ sau:

3) Chỉ ra ngôn ngữ sinh bởi văn phạm trên

1.22 Cho văn phạm có tập các luật sinh: S aAb; S; A aAb; A

1) Văn phạm trên thuộc loại nào; nêu đầy đủ các thành phần của văn phạm trên

2) Chỉ ra các dẫn xuất sinh ra mỗi từ sau:

3) Chỉ ra ngôn ngữ sinh bởi văn phạm trên

Câu hỏi và bài tập chương 1

1.23 Cho văn phạm có tập các luật sinh: S AB; A aA; A a; B aB; Bb

1) Văn phạm trên thuộc loại nào; nêu đầy đủ các thành phần của văn phạm trên

2) Chỉ ra các dẫn xuất sinh ra mỗi từ sau:

3) Chỉ ra ngôn ngữ sinh bởi văn phạm trên

1.24 Chỉ ra văn phạm G có tập T = a, b sao cho xâu L(G) có một trong các tính chất sau:

1) Bắt đầu bằng kí tự a

2) Kết thúc bằng hai kí tự ab

3) Kết thúc bằng hai kí tự ba

4) Không kết thúc bằng ab

1) Chỉ ra văn phạm tuyến tính trái sinh ra ngôn ngữ trên

2) Chỉ ra văn phạm tuyến tính phải sinh ra ngôn ngữ trên

3) Chỉ ra văn phạm phi ngữ cảnh (không chính quy) sinh ra ngôn ngữ trên 1.26 Cho ngôn ngữ: L = {0 3 1 i | iN + }

1) Chỉ ra văn phạm tuyến tính trái sinh ra ngôn ngữ trên

2) Chỉ ra văn phạm tuyến tính phải sinh ra ngôn ngữ trên

3) Chỉ ra văn phạm phi ngữ cảnh (không chính quy) sinh ra ngôn ngữ trên 1.27 Cho ngôn ngữ: L = {0 i 1 i 2 j 3 j | iN + , jN } Xây dựng văn phạm phi ngữ cảnh sinh ra ngôn ngữ trên

1.28 Cho ngôn ngữ L = {a n b n c m | nN + , mN} Hãy chỉ ra văn phạm phi ngữ cảnh G sao cho L(G) = L

1.29 Cho ngôn ngữ L = {(ab) n c m | n, mN + } Hãy chỉ ra:

1) Văn phạm tuyến tính phải sinh ra ngôn ngữ trên

2) Văn phạm tuyến tính trái sinh ra ngôn ngữ trên

3) Văn phạm phi ngữ cảnh sinh ra ngôn ngữ trên

1) Xây dựng văn phạm tuyến tính trái sinh ra ngôn ngữ trên

2) Xây dựng văn phạm tuyến tính phải sinh ra ngôn ngữ trên

3) Xây dựng văn phạm phi ngữ cảnh (không chính quy) sinh ra ngôn ngữ trên 1.31 Cho ngôn ngữ: L = {0 i 1 j 2 k | i, j, kN }

1) Xây dựng văn phạm tuyến tính trái sinh ra ngôn ngữ trên

2) Xây dựng văn phạm tuyến tính phải sinh ra ngôn ngữ trên

3) Xây dựng văn phạm phi ngữ cảnh (không chính quy) sinh ra ngôn ngữ trên 1.32 Cho ngôn ngữ: L = {0 i 1 j 2 k 3 m | i, j, k, mN }

1) Xây dựng văn phạm tuyến tính trái sinh ra ngôn ngữ trên

2) Xây dựng văn phạm tuyến tính phải sinh ra ngôn ngữ trên

3) Xây dựng văn phạm phi ngữ cảnh (không chính quy) sinh ra ngôn ngữ trên

Chương 2 Ngôn ngữ chính quy và Automat hữu hạn

VĂN PHẠM CHÍNH QUY VÀ AUTOMAT HỮU HẠN

Automat hữu hạn (FINITE AUTOMAT - FA)

Automat hữu hạn FA là mô hình tính toán mô tả hệ thống thông qua thông tin vào (input) và thông tin ra (output) Tại mỗi thời điểm, hệ thống có thể ở một trong số hữu hạn các trạng thái (states), mỗi trạng thái này phản ánh thông tin liên quan đến các input đã nhận và xác định các phép chuyển tiếp cho dãy input tiếp theo.

Nghiên cứu các hệ thống trạng thái hữu hạn rất quan trọng do tính tự nhiên và khả năng ứng dụng rộng rãi trong nhiều lĩnh vực thực tế Automat hữu hạn (FA) được chia thành hai loại: đơn định (DFA) và không đơn định (NFA), cả hai đều có khả năng nhận dạng chính xác tập chính quy Mặc dù automat hữu hạn đơn định dễ dàng nhận dạng ngôn ngữ hơn, nhưng kích thước của nó thường lớn hơn so với automat hữu hạn không đơn định tương đương.

Automat hữu hạn là một công cụ quan trọng trong việc nghiên cứu các ngôn ngữ chính quy Định nghĩa về automat hữu hạn sẽ giúp hiểu rõ hơn về vai trò và ứng dụng của nó trong lý thuyết ngôn ngữ.

2.1.1 Định nghĩa Automat hữu hạn

Một cách hình thức ta coi Automat hữu hạn là một hệ thống gồm 5 thành phần, ký hiệu là M = trong đó:

Q - Tập hữu hạn khác rỗng các trạng thái

 - Tập hữu hạn khác rỗng các ký hiệu vào (gọi tắt là bảng chữ cái vào)

 - Ánh xạ còn gọi là hàm chuyển trạng thái và có một trong hai dạng sau:

Chương 2 Ngôn ngữ chính quy và Automat hữu hạn

(q, a)  p q 0 - Là trạng thái bắt đầu; q 0  Q

F  tập các trạng thái kết thúc; F  Q

Nếu p là ảnh của (q, a) qua ánh xạ  thì ký hiệu là (q,a) = p; với qQ, a và p Q hoặc p 2 Q a 1 a 2 a 3 a 4 … ai … … an

Hình 2.1 Mô hình mô tả một FA

Ta vẽ FA nhƣ là bộ điều khiển hữu hạn trạng thái, với mỗi trạng thái qQ,

FA đọc một ký hiệu a  Σ viết trên băng vào (nhƣ hình vẽ)

Trong quá trình chuyển đổi, trạng thái q của FA sẽ đọc ký hiệu a trên băng, sau đó chuyển sang trạng thái mới được xác định bởi hàm chuyển δ(q, a) Tiếp theo, đầu đọc sẽ dịch sang phải một ký tự Nếu hàm δ(q, a) chuyển đến một trong các trạng thái kết thúc, quá trình sẽ hoàn tất.

FA chỉ nhận xâu trên băng từ vị trí trước đầu đọc mà không bao gồm ký tự tại vị trí mà đầu đọc vừa di chuyển đến Khi đầu đọc di chuyển đến cuối xâu trên băng, FA mới có thể nhận toàn bộ xâu đó.

1) Cho automat hữu hạn M = trong đó:

Bộ điều khiển Đầu đọc

2) Cho automat hữu hạn M = trong đó:

2.1.1 Biểu diễn Automat hữu hạn

1) Phương pháp đồ thị Để tiện cho việc xem xét một cách trực quan, người ta dùng sơ đồ để biểu diễn Automat, phương pháp này gọi là phương pháp đồ thị Trong đồ thị, người ta biểu diễn mỗi Automat ứng với một đồ thị có hướng, có trọng số Mỗi trạng thái của Q ứng với một đỉnh của đồ thị; mỗi cung có hướng đi từ đỉnh q đến đỉnh p có trọng số là a nếu (q, a) = p

Chương 2 Ngôn ngữ chính quy và Automat hữu hạn

Trong phương pháp này, người ta dùng bảng gồm m dòng, n cột trong đó m là số trạng thái của Q, n là số kí tự vào của bảng chữ cái vào 

- Mỗi hàng là một trạng thái q i với i = 1, , m ;

- Mỗi cột là một ký hiệu vào a j với j = 1, , n;

- Ô (i, j), giao của hàng i và cột j là q k nếu (q i , a j ) = q k

Ví dụ 1: Cho automat M = trong đó:

(q 2 , 0) = q 0 ; (q 2 , 1) = q 3 ; (q 3 , 0) = q 1 ; (q 3 , 1) = q 2 Biểu diễn của automat trên bằng phương pháp đồ thị

Hình 2.2 Biểu diễn Automat bằng đồ thị

Biểu diễn automat bằng bảng

Bảng 2.1 Bảng chuyển trạng thái

Ví dụ 2: Cho automat hữu hạn M = trong đó:

(q 2 , 0) = q 3 ; (q 2 , 1) = q 1 ; (q 3 , 0) = q 3 ; (q 3 , 1) = q 3 Biểu diễn của automat trên bằng phương pháp đồ thị

Hình 2.3 Đồ thị biểu diễn Automat

Chương 2 Ngôn ngữ chính quy và Automat hữu hạn

Biểu diễn automat bằng bảng

Bảng 2.2 Bảng chuyển trạng thái

2.1.2 Automat hữu hạn đơn định

Cho Automat hữu hạn M = , ta gọi M là Automat hữu hạn đơn định nếu:Với a, q Q ta có (q, a) = 1 và hàm chuyển  có dạng 1 (*)

Automat hữu hạn đơn định là một hệ thống gồm 5 thành phần; ký hiệu là M , trong đó:

Q - Tập hữu hạn khác rỗng các trạng thái

 - Tập hữu hạn khác rỗng các ký hiệu vào (gọi tắt là bảng chữ cái vào)

 - Ánh xạ còn gọi là hàm chuyển trạng thái có dạng:

(q, a)  p q 0 - Là trạng thái bắt đầu; q 0  Q

F - Tập con của Q ( F  Q) là tập các trạng thái kết thúc

Nếu p là hình ảnh của (q, a) qua ánh xạ δ, thì ký hiệu là δ(q, a) = p, trong đó q, p thuộc tập Q và a thuộc tập Σ Điều này được hiểu là một phép chuyển từ trạng thái q sang trạng thái p khi tự động hóa nhận ký tự a.

Automat hữu hạn đơn định ở trạng thái q sẽ nhận một ký tự a và có thể không thay đổi trạng thái (chuyển vào chính nó) hoặc chuyển sang một trạng thái duy nhất khác.

Ngược lại, Automat không thỏa mãn điều kiện gọi là Automat không đơn định (Nondeterministic Automat) Nếu M là Automat hữu hạn không đơn định, thì tồn tại ký tự a thuộc tập Σ và trạng thái q thuộc tập Q sao cho số lượng trạng thái tiếp theo của q khi đọc a là lớn hơn 1, hoặc hàm chuyển trạng thái δ(q, a) sẽ là một tập con của Q.

2) Hàm chuyển trạng thái mở rộng Để có thể mô tả cách hình thức hoạt động của DFA trên một xâu vào, ta mở rộng hàm chuyển δ để áp dụng đối với một trạng thái trên một xâu Ta định nghĩa hàm chuyển mở rộng δ * là một ánh xạ từ Q × Σ * → Q với ý nghĩa δ * (q, w) là trạng thái DFA chuyển đến từ trạng thái q trên xâu vào w:

Ví dụ: Cho Automat hữu hạn M =

Chương 2 Ngôn ngữ chính quy và Automat hữu hạn

Hàm chuyển  xác định nhƣ sau:

(q 2 , 1) = q 3 ; (q 3 , 0) = q 1 ; (q 3 , 1) = q 2 Hãy tính   (q 2 , 1010) Áp dụng công thức (1), ta có:

3) Ngôn ngữ đoán nhận bởi automat hữu hạn đơn định

Cho Automat hữu hạn đơn định M = , ta gọi ngôn ngữ đoán nhận bởi Automat hữu hạn đơn định M là tập:

Ngôn ngữ được nhận bởi Automat hữu hạn đơn định (DFA) M là tập hợp tất cả các xâu w thuộc * mà khi bắt đầu từ trạng thái ban đầu q0, DFA có thể chuyển đến một trạng thái kết thúc trong tập F sau khi đọc xâu w.

Một chuỗi được chấp nhận bởi một DFA nếu có một dãy chuyển trạng thái tương ứng với chuỗi đầu vào, bắt đầu từ trạng thái khởi đầu và kết thúc tại trạng thái chấp nhận.

Hình 2.4 Mô tả quá trình DFA M đoán nhận xâu

Nhƣ vậy, để kiểm tra một xâu vào w = a

2 a n đƣợc đoán nhận bởi một NFA hay không ? Ta phải tính  * (q 0 ,w) q0  q1  q2  qn-1 qn w = a 1 a 2 a 3 … a n -1 an

Nếu qn F thì w  N(M); ngƣợc lại qn F thì w  N(M) Ở đây q 1 q2qn  Q

Cho Automat hữu hạn M = trong ví dụ trên và đƣợc biểu diễn dưới dạng bảng là: q 0 = q 0 ; F = q 0 

Bảng 2.3 Biểu diễn automat bằng bảng

Hãy kiểm tra xem xâu w = 110101 có thuộc L(M) không?

Chương 2 Ngôn ngữ chính quy và Automat hữu hạn

Ta có thể chứng minh đƣợc rằng L(M) là tập mọi xâu có số chẵn số 0 và số chẵn số 1

Từ các kết quả trên, ta có giải thuật sử dụng DFA để đoán nhận xâu của ngôn ngữ

4) Giải thuật mô phỏng hoạt động của một DFA

Input : Xâu vào w kết thúc bởi $

Output: Câu trả lời "YES" nếu DFA đoán nhận đƣợc xâu w và "NO" nếu ngƣợc lại

0 ; c := getchar() ; {c là ký hiệu vào đầu tiên}

While c < > $ do begin q := δ(q, c); c := nextchar(); {c là ký hiệu vào đƣợc đọc tiếp theo} end;

Sử dụng giải thuật trên với automat đƣợc cho ở hình 2.5 để đoán nhận các từ sau:

Hình 2.5 Đồ thị biểu diễn Automat

Ta trình bày giải thuật sử dụng automat đơn định đoán nhận w bằng bảng sau: b

Bảng 2.4 Quá trình Automat đoán nhận xâu

Ta có q = 3  F Vậy automat trên đoán nhận đƣợc từ w = bbaaabb

Ta trình bày giải thuật sử dụng automat đơn định đoán nhận w bằng bảng sau:

Bảng 2.5 Quá trình Automat đoán nhận xâu

Ta có q = 2  F Vậy automat trên không đoán nhận đƣợc từ w = bbaaaaab

Chương 2 Ngôn ngữ chính quy và Automat hữu hạn

2.1.3 Automat hữu hạn không đơn định-NFA (Nondeterministic Finite Automata)

Mô hình DFA có thể được sửa đổi để cho phép lựa chọn nhiều phép chuyển từ một trạng thái với cùng một ký hiệu, dẫn đến một trạng thái tiếp theo Mô hình này được gọi là automat hữu hạn không đơn định (NFA).

Cho Automat hữu hạn M = , ta gọi M là Automat hữu hạn không đơn định nếu: a và q Q sao cho (q, a) >1 và hàm chuyển  có dạng 2 Cụ thể:

Automat hữu hạn không đơn định là một hệ thống gồm 5 thành phần, ký hiệu là

Q - Tập hữu hạn khác rỗng các trạng thái

 - Tập hữu hạn khác rỗng các ký hiệu vào (gọi tắt là bảng chữ cái vào)

 - Ánh xạ còn gọi là hàm chuyển trạng thái có dạng:

(q, a)  p q 0 - Là trạng thái bắt đầu; q 0  Q

F - Tập con của Q là tập các trạng thái kết thúc

Nếu p là ảnh của (q, a) qua ánh xạ δ, ký hiệu là δ(q,a) = p, với q thuộc Q, a thuộc Σ và p thuộc 2^Q (p là tập con của Q) Do đó, δ(q, a) là tập hợp p chứa tất cả các trạng thái p_i thuộc Q mà có phép chuyển trên nhãn a từ trạng thái q tới p_i.

Cho automat hữu hạn không đơn định (NFA) M = trong đó:

- Biểu diễn NFA trên bằng bảng, ta có

Bảng 2.6 Bảng chuyển trạng thái

- Biểu diễn NFA trên bằng đồ thị, ta có

Hình 2.6 Đồ thị của NFA

Chương 2 Ngôn ngữ chính quy và Automat hữu hạn

2) Hàm chuyển trạng thái mở rộng Để có thể mô tả cách hình thức hoạt động của NFA trên một xâu vào, ta mở rộng hàm chuyển δ để áp dụng đối với một trạng thái trên một xâu Ta định nghĩa hàm chuyển mở rộng δ * là một ánh xạ từ Q × Σ * → Q với ý nghĩa δ * (q, w) là tập trạng thái mà NFA có thể chuyển đến từ trạng thái q trên xâu vào w:

Cho automat trong ví dụ trên biểu diễn bằng đồ thị ở hình 2.6

Hãy tính  * (q 0 , 01001) Áp dụng công thức 2 ở trên, ta có:

Biểu thức chính quy (RE: Regular Expressions)

Lớp ngôn ngữ mà một automat hữu hạn có thể nhận diện có thể được mô tả bằng biểu thức chính quy, một dạng biểu thức ngắn gọn và súc tích Trong phần này, chúng ta sẽ giới thiệu các phép toán hợp, nhân ghép và lấy bao đóng Kleene trên các tập hợp xâu để định nghĩa biểu thức chính quy, đồng thời chứng minh rằng lớp ngôn ngữ được nhận diện bởi một automat hữu hạn thực sự tương đương với lớp ngôn ngữ được mô tả bởi biểu thức chính quy.

Cho Σ là một bộ chữ cái Biểu thức chính quy trên Σ và các tập hợp mà chúng mô tả đƣợc định nghĩa một cách đệ quy nhƣ sau:

1 ∅ là biểu thức chính quy ký hiệu cho tập rỗng

2 ε là biểu thức chính quy ký hiệu cho tập {ε}

3 a  Σ, a là biểu thức chính quy ký hiệu cho tập {a}

4 Nếu r và s là các biểu thức chính quy ký hiệu cho các tập hợp R và S thì (r + s), (rs) và ( r * ) là các biểu thức chính quy ký hiệu cho các tập hợp R  S, RS,

Khi viết biểu thức chính quy, có thể loại bỏ các dấu ngoặc đơn, tuy nhiên cần lưu ý rằng thứ tự ưu tiên của các phép toán được sắp xếp theo thứ tự giảm dần: phép bao đóng, phép nhân ghép và phép hợp.

Chẳng hạn: Biểu thức ((0(1 * )) + 1) có thể viết là 01 * + 1

Phép lấy bao đóng dương cũng có thể được sử dụng khi viết biểu thức chính quy Ta có thể viết rút gọn r r * hay r * r thành r +

Khi cần phân biệt, chúng ta sử dụng ký hiệu r để chỉ biểu thức chính quy và L(r) để chỉ ngôn ngữ được ký hiệu bởi biểu thức đó Tuy nhiên, trong nhiều trường hợp, ta có thể dùng ký hiệu r cho cả hai trường hợp.

1 Một số biểu thức chính quy ký hiệu cho các ngôn ngữ:

- 00 là biểu thức chính quy biểu diễn tập {00}

- (0+1) * ký hiệu cho tập hợp tất cả các xâu số 0 và số 1, kể cả xâu rỗng = {ε, 0, 1, 00, 01, 10, 11, 010, 011, 0010 }

- (0+1) * 00(0+1) * ký hiệu cho tập hợp tất cả các xâu 0,1 có ít nhất hai số 0 liên tiếp

- (1+10) * ký hiệu cho tất cả các xâu 0, 1 bắt đầu bằng số 1 và không có hai số

- (0 + ε)(1+10) * ký hiệu cho tất cả các xâu không có hai số 0 liên tiếp

Chương 2 Ngôn ngữ chính quy và Automat hữu hạn

- (0+1) * 011 ký hiệu cho tất cả các xâu 0, 1 tận cùng bởi 011

Ký hiệu 0 * 1 * 2 đại diện cho tất cả các chuỗi có một số lượng tùy ý các ký tự 0, tiếp theo là một ký tự 1 và sau cùng là một ký tự 2.

- 00 * 11 * 22 * ký hiệu cho tất cả các xâu trong tập 0 * 1 * 2 * với ít nhất một trong mỗi ký tự 00 * 11 * 22 * có thể đƣợc viết gọn thành 0 + 1 + 2 +

2 Biểu thức chính quy ký hiệu cho tập hợp các xâu là tên biến đúng trong ngôn ngữ lập trình Pascal:

Một xâu trong chương trình Pascal được coi là hợp lệ nếu nó bắt đầu bằng một chữ cái và tiếp theo là các chữ cái, số, ký hiệu gạch dưới hoặc một số ký tự cho phép khác trên bàn phím.

Biểu thức chính quy có dạng nhƣ sau: r = (A + …+ Z + a + … + z) (A + …+ Z + a + … + z + 0 + … + 9 + _ + … ) *

3 Biểu thức chính quy ký hiệu cho tập hợp các số nguyên trong ngôn ngữ lập trình Pascal:

Một xâu trong chương trình Pascal là một số nguyên có thể bắt đầu bằng dấu âm (-), dấu dương (+), hoặc không có ký hiệu nào, và phải có ít nhất một ký tự số theo sau.

Biểu thức chính quy có dạng nhƣ sau: r = ( „+‟ + „-‟ + ε) ( 0 + … + 9 (0 + … +9 ) *

Việc tìm kiếm một biểu thức chính quy để biểu thị một ngôn ngữ thường khó hơn so với việc xác định ngôn ngữ được biểu diễn bởi một biểu thức chính quy, do không có thuật toán nào cho loại bài toán này.

2.2.2 Một số tính chất đại số của biểu thức chính quy

Dễ dàng chứng minh rằng, nếu cho r, s, t là các biểu thức chính quy thì ta có các đẳng thức sau:

Trong đó, ta có r = s có nghĩa là L(r) = L(s)

2.2.3 Sự tương đương giữa automat hữu hạn và biểu thức chính quy

Các ngôn ngữ được nhận diện bởi automat hữu hạn tương ứng với các ngôn ngữ được mô tả bằng biểu thức chính quy Do đó, các ngôn ngữ này thường được gọi là tập chính quy.

1) Xây dựng NFA ε đoán nhận L(r) a) Định lý

Nếu r là biểu thức chính quy thì tồn tại một NFA với ε-dịch chuyển đoán nhận L(r)

Chúng tôi sẽ chứng minh rằng tồn tại một NFA M với ε-dịch chuyển có một trạng thái kết thúc, không có phép chuyển nào ra khỏi trạng thái này, để nhận biểu thức chính quy r Cụ thể, chúng tôi sẽ sử dụng quy nạp theo số phép toán của biểu thức chính quy r để khẳng định rằng L(M) = L(r).

Biểu thức chính quy r không có phép toán thì r chỉ có thể là ∅, ε hoặc a với a  Σ

Chương 2 Ngôn ngữ chính quy và Automat hữu hạn

Các NFA dưới đây thoả mãn điều kiện trên:

Hình 2.18 Các NFAε biểu diễn cho các biểu thức không có phép toán

- r có chứa các phép toán:

Giả sử định lý đúng với r có ít hơn i phép toán, i ≥ 1

Xét r có i phép toán Có các trường hợp:

Cả hai biểu thức chính quy r

2 có ít hơn i phép toán, giả sử có 2 automat hữu hạn NFA M

Vì các trạng thái có thể thay đổi tên nên ta giả sử hai tập trạng thái Q

0 là trạng thái bắt đầu mới và {f

0} là tập trạng thái kết thúc mới, ta xây dựng NFA M = , trong đó δ đƣợc xác định nhƣ sau:

Chú ý do giả thiết quy nạp là không có phép chuyển nào ra khỏi f

2 Vì vậy tất cả các phép chuyển của M

2 đều có trong M Cách xây dựng M chỉ ra trong hình 2.19 Bất kỳ đường đi nào trong sơ đồ chuyển của M từ q

0 phải bắt đầu bằng cách đi tới q

2 bằng nhãn ε Nếu đường đi qua q

1 thì nó theo một đường đi nào đó trong M

Tương tự trong trường hợp đường đi qua q

2 Có một đƣòng đi từ q

0 nhãn x khi và chỉ khi có đường đi nhãn x trong M

1 hoặc có đường đi nhãn x trong M

Hình 2.19 NFAε biểu diễn cho phép hợp (cộng)

2 là các automat NFA như trong trường hợp trên và ta xây dựng automat M = trong đó, δ đƣợc xác định nhƣ sau:

Cách xây dựng M chỉ ra trong hình 2.20a Mỗi đường đi trong M từ q

2 là đường đi có nhãn x từ q

1 sau đó là một cung từ f

2 nhãn ε và tiếp đến là đường đi từ q

2 Hoặc cách xây dựng M chỉ ra trong hình 2.20b Mỗi đường đi trong M từ q

2 là đường đi có nhãn x từ q

1 sau đó là đường đi từ f1 cũng chính là q

Chương 2 Ngôn ngữ chính quy và Automat hữu hạn

Hình 2.20b NFAε biểu diễn cho phép nhân ghép

Cách xây dựng M được chỉ ra trong hình 2.21 Mỗi đường đi từ q

1 bằng nhãn ε và sau đó là đường đi từ q

0 bằng nhãn ε Như vậy có đường đi từ q

0 nhãn là x nếu và chỉ nếu ta có thể viết x = x

Hình 2.21 NFAε biểu diễn cho phép lấy bao đóng dương

Cách xây dựng M được chỉ ra trong hình 2.22 Mỗi đường đi từ q

0 gồm: hoặc đường đi từ q

0 bằng nhãn ε; hoặc đường đi từ q

1 bằng nhãn ε và sau đó là đường đi từ q

1 trên xâu thuộc L(M), rồi đến f

0 bằng nhãn ε Nhƣ vậy có đường đi từ q

0 nhãn là x nếu và chỉ nếu ta có thể viết x = x

Hình 2.22 NFAε biểu diễn cho phép lấy bao đóng Kleen

Xây dựng NFAε đoán nhận ngôn ngữ đƣợc ký hiệu bởi biểu thức chính quy r = 01 * + 1

Tập ngôn ngữ L(r) = { 1, 0, 01, 011, 0111, 01111, 011111, … } bao gồm các chuỗi bit nhị phân, trong đó có các bit đơn 0 và 1, cũng như các chuỗi bắt đầu bằng bit 0, tiếp theo là một chuỗi bit 1 với độ dài tùy ý.

Theo quy luật thứ tự ƣu tiên, biểu thức 01 * + 1 thực chất là (0(1 * )) + 1, vì vậy nó có dạng r

Chúng ta sẽ lần lượt xây dựng các NFA cho từng biểu thức chính quy con, sau đó áp dụng các quy tắc kết hợp để tạo ra NFA cho toàn bộ biểu thức chính quy đã cho.

2 = 1 dễ dàng đƣợc xây dựng:

Chương 2 Ngôn ngữ chính quy và Automat hữu hạn

Theo quy tắc 4) ta xây dựng đƣợc NFA cho r

Theo quy tắc 2) ta xây dựng đƣợc NFA cho r

Cuối cùng, theo quy tắc 1) ta xây dựng NFA cho r = r

Hình 2.23 NFAε biểu diễn cho r = 01 * + 1

Định lý trên cung cấp cơ sở cho giải thuật chuyển đổi biểu thức chính quy r thành automat hữu hạn NFAε Điều quan trọng cần lưu ý là thứ tự ưu tiên của các phép toán trong biểu thức chính quy, điều này ảnh hưởng lớn đến quá trình phân tích biểu thức thành các biểu thức con, đặc biệt khi biểu thức được viết ở dạng tắt mà không có dấu ngoặc Giải thuật xây dựng NFAε sẽ nhận diện ngôn ngữ L(r).

Input: Biểu thức chính quy r

+ Tìm phép toán phải thực hiện cuối cùng

+ Nếu có thì tìm các toán hạng của phép toán đó

Ngƣợc lại nếu không có thì đó là biểu thức không có phép toán

+ Với mỗi toán hạng quay lại bước 1 cho đến khi toán hạng là biểu thức không có phép toán

+ Xây dựng các automat đơn giản cho các biểu thức chính quy không chứa phép toán

Để xây dựng các automat cho mỗi biểu thức chính quy, cần thực hiện phép toán theo thứ tự ngược lại cho đến khi hoàn thành automat cho biểu thức chính quy r.

Xây dựng NFAε đoán nhận ngôn ngữ đƣợc ký hiệu bởi biểu thức chính quy r = a * (a + b) b +

Chương 2 Ngôn ngữ chính quy và Automat hữu hạn

Hình 2.24 NFAε biểu diễn cho r = a * (a + b) b +

Biểu thức chính quy r cho phép xây dựng automat hữu hạn NFAε để nhận diện ngôn ngữ L(r) Vấn đề đặt ra là xác định phương pháp nào để từ automat hữu hạn M có thể tạo ra biểu thức chính quy tương ứng với ngôn ngữ mà M nhận diện.

2) Xây dựng biểu thức chính quy r biểu diễn L(M) a) Định lý

Nếu L đƣợc đoán nhận bởi một DFA, thì L đƣợc ký hiệu bởi một biểu thức chính quy

Chứng minh: Đặt L là tập hợp đƣợc đoán nhận bởi DFA M =

Ngày đăng: 08/06/2021, 14:22

TỪ KHÓA LIÊN QUAN

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