Lớp ngôn ngữ đƣợc chấp nhận bởi một ôtômat hữu hạn cũng có thể đƣợc mô tả thông qua dạng biểu thức ngắn gọn và súc tích gọi là biểu thức chính quy. Trong phần này, chúng ta sẽ giới thiệu sự kết hợp của các phép toán hợp, nối kết và bao đóng Kleene trên các tập hợp chuỗi để định nghĩa biểu thức chính quy và chứng tỏ rằng lớp ngôn ngữ đƣợc chấp nhận bởi một ôtômat hữu hạn thì thực sự là lớp ngôn ngữ đƣợc mô tả bởi biểu thức chính quy.
4.1. Định nghĩa:
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) Với mọi a thuộc Σ, a là 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 giao S, RS, R* tƣơng ứng.
Trong khi viết biểu thức chính quy ta có thể bỏ bớt các dấu ngoặc đơn với lƣu ý rằng thứ tự ƣu tiên của các phép toán xếp theo thứ tự giảm dần là: phép bao đóng, phép nối kết, phép hợp.
Chẳng hạn: Biểu thức ((0(1*))+1) có thể viết là 01*+1.
4.2. Sự tƣơng đƣơng giữa ôtômat hữu hạn và biểu thức chính quy
Các ngôn ngữ đƣợc chấp nhận bởi ôtômat hữu hạn cũng là các ngôn ngữ đƣợc mô tả bởi biểu thức chính quy. Chính vì sự tƣơng đƣơng này mà ngƣời ta gọi ngôn ngữ chấp nhận bởi ôtômat hữu hạn là các tập chính quy. Trong phần này, thông qua 2 định lý ta sẽ chỉ ra bằng quy nạp theo kích thƣớc của (số phép toán trong) biểu thức chính quy rằng tồn tại một NFA với ε-dịch chuyển chấp nhận cùng ngôn ngữ; đồng thời với mỗi DFA cũng có một biểu thức chính quy xác định ngôn ngữ của nó.
Định lý 4.1: 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 chấp nhận L(r).
Ví dụ 4.1: Xây dựng NFAε chấp nhận lớp ngôn ngữ đƣợc ký hiệu bởi biểu thức chính quy r = 01*+ 1.
Ta thấy L(r) = { 1, 0, 01, 011, 0111, 01111, 011111, … } là tập ngôn ngữ chứa các bit đơn 0, 1 và các chuỗi bit nhị phân bắt đầu bằng bit 0, theo sau là một chuỗi bit 1 với độ dài tuỳ ý.
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 r1 + r2 với r1 = 01* và r2 = 1.
Tin học Lý Thuyết trên WEB‖ Ta sẽ lần lƣợt xây dựng các NFA cho các biểu thức chính quy con, sau đó dựa vào các quy tắc kết hợp để xây dựng NFA cho toàn bộ biểu thức chính quy đã cho.
. NFA cho r2 = 1 dễ dàng để xây dựng :
Hình 4.1 Các NFAε cho các kết hợp đơn
. NFA cho r1 = 01*:
Ta tách r1 = r3 r4 , trong đó r3 = 0 và r4 = 1* . NFA cho r3 = 0 :
Hình 4.2 Các NFAε cho các kết hợp đơn
. NFA r4 = 1* :
Ta viết r4 = r5*, trong đó r5 = 1. NFA cho r5 = 1 :
Hình 4.3 Các NFAε cho các kết hợp đơn
Theo quy tắc 3) ta xây dựng đƣợc NFA cho r4 = r5* = 1* nhƣ sau :
Hình 4.4 Ví dụ
Hình 4.5 Ví dụ
Cuối cùng, theo quy tắc 1) ta xây dựng NFA cho r = r1 + r2 = 01*+ 1 nhƣ sau :
Hình 4.6 Ví dụ NFAε
Phần chứng minh của Định lý 4.1 trên cũng chính là cơ sở của giải thuật chuyển đổi một biểu thức chính quy thành ôtômát hữu hạn. Một điểm cần lƣu ý là thứ tự ƣu tiên của các phép toán đƣợc sử dụng trong biểu thức chính quy, điều này rất quan trọng cho quá trình tách biểu thức chính quy thành các biểu thức con trong những trƣờng hợp viết biểu thức chính quy ở dạng tắt (không có dấu ngoặc). Bây giờ, ta cần chứng tỏ rằng mọi tập hợp đƣợc chấp nhận bởi một ôtômát hữu hạn thì cũng đƣợc ký hiệu bởi một số biểu thức chính quy.
Định lý 4.2: Nếu L đƣợc chấp nhận bởi một DFA, thì L đƣợc ký hiệu bởi một biểu thức chính quy.
Ví dụ 3.2: Viết biểu thức chính quy ký hiệu cho ngôn ngữ đƣợc chấp nhận bởi DFA sau :
Hình 4.7 Ví dụ DFA cho RE
Gọi DFA đƣợc chỉ ra trong hình 4.7 là M ({q1, q2, q3}, {0, 1}, δ, q1, {q2, q3}). Ta thấy, tập hợp tất cả các chuỗi đƣợc chấp nhận bởi DFA trên là các chuỗi làm cho ôtômat chuyển từ trạng thái bắt đầu q1 đến một trong hai trạng thái kết thúc q2 và q3 và không chuyển qua số tối đa là 3 (k = 3) trạng thái của ôtômat. Vậy ta cần viết biểu thức chính quy ký hiệu cho tập hợp này nhƣ sau :
Tin học Lý Thuyết trên WEB‖ Theo công thức đã đƣợc chứng minh trong Định lý, ta có thể tính đƣợc các giá trị rk
ij với i, j là chỉ số các trạng thái từ 1 đến 3 và với k = 0, 1 và 2, nhƣ chỉ ra trong bảng sau: k=0 k=1 k=2 rk11 Ε Ε (00)* rk12 0 0 0(00)* rk13 1 1 0*1 rk21 0 0 0(00)* rk22 Ε ε + 00 (00)* rk23 1 1 + 01 0*1 rk31 Ø Ø (0 + 1)(00)*0 rk32 0 + 1 0 + 1 (0 + 1)(00)* rk33 Ε Ε ε + (0 + 1)0*1 Bảng 4.1 Bảng trạng thái
Bằng cách dùng các công thức tƣơng đƣơng nhƣ (r + s) t = rt + st và (ε + r)* = r* để đơn giản các biểu thức, chẳng hạn khi tính biểu thức :
r122 = r021 (r011 )* r012 + r022 = 0(ε)*0 + ε = 00 + ε Tƣơng tự, khi đơn giản biểu thức:
r213 = r112 (r122 )* r123 + r113 = 0(00 + ε)*(1 + 01) + 1
ta nhận thấy (00 + ε)* tƣơng đƣơng với (00) và (1 + 01) thì tƣơng đƣơng với (ε +0)1 nên ta rút gọn :
r213 = 0(00)*(ε + 0)1 + 1
Mặt khác, chú ý rằng (00)*(ε + 0) thì tƣơng đƣơng với 0*, vì thế 0(00)*(ε + 0)1+1 cũng bằng 00*1 + 1 hay cuối cùng là 0*1.
Để hoàn thành việc xây dựng biểu thức chính quy cho M, ta cần tính r3
12 và r313. Ta viết: r312 = r213 (r233 )* r232 + r212 = 0*1(ε + (0 + 1)0*1)*(0 + 1)(00)* + 0(00)* = 0*1((0 + 1)0*1)*(0 + 1)(00)* + 0(00)* và r313 = r213 (r233 )* r233 + r213 = 0*1(ε + (0 + 1)0*1)*(ε + (0 + 1))0*1) + 0*1 = 0*1((0 + 1)0*1)*
Vậy biểu thức chính quy có dạng :
r = r312 + r313 = 0*1((0 + 1)0*1)*(ε + (0 + 1)(00)*) + 0(00)*
V. VĂN PHẠM CHÍNH QUI VÀ CÁC TÍNH CHẤT 5.1. Văn phạm chính qui (RG : Regular Grammar)