Vì thực chất của nó là một lĩnhvực khoa học liên ngành, nhu cầu mô tả hình thức văn phạm được phát sinhtrong nhiều ngành khoa học khác nhau từ ngôn ngữ học đến sinh vật học.. Chính vì vậ
Trang 1M c L c ục Lục ục Lục
MỞ ĐẦU 3
Chương 1 GIỚI THIỆU CHUNG 4
1.1 Nêu bài toán 4
1.2 Yêu cầu bài toán 4
Chương 2 CƠ SỞ LÝ THUYẾT 5
2.1 Ngôn ngữ hình thức 5
2.1.1 Khái niệm ngôn ngữ hình thức 5
2.1.2 Các khái niệm liên quan 5
2.2 Văn phạm 6
2.2.1 Khái niệm văn phạm 6
2.2.2.Các khái niệm liên quan 7
2.2.3 Phân loại văn phạm 8
2.3 Automata hữu hạn 9
2.3.1 Khái niệm chung về automat 9
2.3.2 Các loại automat 10
Chương 3 CÁC THUÂT TOÁN 13
3.1 Các thuật toán biến đổi trên automat 13
3.1.1 Thuật toán kiểm tra đoán nhận chuỗi 13
3.1.2 Tối giản automat 14
3.1.3 Chuyển NFA sang DFA 16
3.1.4 Chuyển NFAɛ sang NFA 17
3.1.5 Chuyển NFAɛ sang DFA 19
3.2 Các thuật toán biến đổi giữa automata và văn phạm 21
3.2.1 Chuyển FA sang văn phạm chính quy 21
3.2.2 Chuyển văn phạm sang FA 22
3.3.Các thuật toán biến đổi trên văn phạm 23
Trang 23.3.1 Chuyển văn phạm tuyến tính phải thành văn phạm tuyến tính
trái(ngược lại) 23
3.3.2 Rút gọn văn phạm phi ngữ cảnh 24
Chương 4 CÀI ĐẶT CHƯƠNG TRÌNH 28
4.1 Cài đặt thuật toán 28
4.2 Thiết kế, xây dựng chương trình 32
KẾT LUẬN 38
1.Kết quả đạt được 38
2.Hướng phát triển 38
TÀI LIỆU THAM KHẢO 39
Trang 3MỞ ĐẦU
Lý thuyết automat và ngôn ngữ hình thức đóng một vai trò rất quan trọngtrong các cơ sở toán học của tin học Ngôn ngữ hình thức được sử dụng trongviệc xây dựng các ngôn ngữ lập trình, lý thuyết về các chương trình dịch Cácngôn ngữ hình thức tạo thành một công cụ mô tả đối với các mô hình tính toán
cả cho dạng thông tin vào ra lẫn kiểu thao tác Vì thực chất của nó là một lĩnhvực khoa học liên ngành, nhu cầu mô tả hình thức văn phạm được phát sinhtrong nhiều ngành khoa học khác nhau từ ngôn ngữ học đến sinh vật học Chính
vì vậy, đối với những người trong lĩnh vực công nghệ thông tin thì việc tìm hiểucác khái niệm về lý thuyết automat và ngôn ngữ hình thức là không thể thiếu.Cũng chính vì vậy, ngôn ngữ hình thức được đưa vào làm môn học cơ sở chuyênngành cho tất cả các sinh viên công nghệ thông tin
Đây là môn học cơ bản, mang tính phức tạp, trừu tượng cao Chính vìvậy, khi gặp những giải thuật phức tạp thì các lời giải hàn lâm sẽ rất buồn tẻ và
dễ gây nhàm chán Vì vậy, nếu như có thể xây dựng một bộ công cụ hỗ trợ trongviệc giảng dạy môn automata và ngôn ngữ hình thức với ứng dụng trực tiếptrong công tác học tập thì em tin chắc rằng nó có thể giúp các bài giảng bộ mônAutomata và ngôn ngữ hình thức phong phú và sinh động hơn Dựa trên ý tưởngtrên, cùng với sự hướng dẫn, giúp đỡ nhiệt tình của thầy giáo Hà Chí Trung em
tham gia nghiên cứu đề tài: “Tìm hiểu và xây dựng chương trình mô phỏng
các thuật toán hỗ trợ học tập và giảng dạy môn học automata và ngôn ngữ hình thức”
Hình thức làm bài em sẽ mô tả cụ thể và chi tiết vào phần dưới và em sửdụng hoàn toàn bằng ngôn ngữ lập trình C#
Lúc mới nhận đề tài em dự định và mong muốn làm được tất cả các phầntrong giáo trình đại cương môn automata và ngôn ngữ hình thức Nhưng do thờigian và kiến thức của em còn có hạn nên em vẫn chưa hoàn thiện được tất cả vàkhông thể tránh khỏi những sai sót Em rất mong sự đóng góp của thầy cô để đềtài của em có thể mở rộng hơn, sâu sắc hơn và đặc biệt là có thể được ứng dụngtrong học tập và công tác giảng dạy
Trang 4Chương 1 GIỚI THIỆU CHUNG
1.1 Nêu bài toán
Bài toán: “Tìm hiểu và xây dựng chương trình mô phỏng các thuật toán
hỗ trợ học tập và giảng dạy môn học automata và ngôn ngữ hình thức”
Môn học automat và ngôn ngữ hình thức là môn học cơ bản hết sức cầnthiết đối với chuyên ngành tin học, bản thân nó mang tính phức tạp, trừu tượngcao Chính vì vậy, khi gặp những giải thuật phức tạp thì các lời giải hàn lâm sẽrất buồn tẻ và dễ gây nhàm chán Vì vậy, cần có một bộ công cụ mô phỏng trựcquan các thuật toán cũng như các hoạt động của automat hỗ trợ trong việc giảngdạy với ứng dụng trực tiếp trong công tác học tập thì có thể giúp các bài giảngmôn học trở nên phong phú và sinh động hơn Giúp việc giảng dạy đạt được yêucầu đề ra
1.2 Yêu cầu bài toán
Bài toán: “Tìm hiểu và xây dựng chương trình mô phỏng các thuật toán
hỗ trợ học tập và giảng dạy môn học automata và ngôn ngữ hình thức” gồm haiphần đó là:
1 Nghiên cứu, tìm hiểu các thuật toán trong môn automat và ngôn ngữhình thức
2 Xây dựng chương trình mô phỏng các thuật toán đó, đồng thời là công
cụ cho phép hỗ trợ người dùng thuận tiện hơn khi muốn làm việc trên file word
Để đạt được mục đích đề ra cần phải nắm tìm hiểu rõ về lý thuyếtAutomat, văn phạm, các thuật toán có liên quan Sau đã tìm hiểu thì xây dựngchương trình để giải quyết yêu cầu của bài toán
Trang 5Chương 2 CƠ SỞ LÝ THUYẾT
2.1 Ngôn ngữ hình thức
2.1.1 Khái niệm ngôn ngữ hình thức
Ngôn ngữ: theo từ điển, là một hệ thống thích hợp cho việc biểu thị các ý
nghĩ, các sự kiện, hay các khái niệm, bao gồm tập các ký hiệu, các qui tắc đểvận dụng chúng
Một ngôn ngữ hình thức L: trên bộ chữ cái S là một tập hợp các chuỗi từcác ký hiệu của bộ chữ cái S
Trong đó:
S* : tập hợp tất cả các chuỗi con, kể cả chuỗi rỗng ε, sinh ra S
S+ : tập hợp tất cả các chuỗi con, ngoại trừ chuỗi rỗng ε, sinh ra S
S* = S+ + {ε} ε} S+ = S* - {ε} ε}
Cách biểu diễn ngôn ngữ: Có ba cách:
Liệt kê các phần tử chuỗi Ví dụ biểu diễn các phần tử của ngôn ngữ Lgồm các chuỗi aa,aba,baa,baba như sau: L = {ε} aa, aba, baa, baba}
Mô tả ngôn ngữ thông qua đặc điểm chủ yếu Ví dụ một ngôn ngữ gồmcác chuỗi có chữ cái a và theo sau là số nguyên tố biểu diễn như sau: L = {ε} ai | i
là số nguyên tố}
Biểu diễn ngôn ngữ một cách tổng quát thông qua văn phạm và automata
Đó là cơ chế sản sinh và cơ chế đoán nhận Trong đó:
Văn phạm: cơ chế sản sinh ra mọi chuỗi của ngôn ngữ
Automata: là một máy trừu tượng hay một cơ chế cho phép đoán nhậnmột chuỗi bất kỳ có thuộc một ngôn ngữ L hay không
2.1.2 Các khái niệm liên quan
Bảng chữ cái: Tập Σ khác rỗng gồm hữu hạn hay vô hạn các ký hiệu Mỗiphần tử a∈∑ được gọi là một chữ cái hay một ký hiệu
Ví dụ: {ε} 0, 1, 2, , 9}: được gọi là bảng chữ số thập phân
Trang 6Chuỗi: Là một dãy hữu hạn các kí hiệu từ bảng chữ cái Ví dụ: Cho ∑={ε}
a1, a2, … a n}, một dãy α=a i1 a i 2 … a it, a ij ⊂ ∑ được gọi là một từ hay một chuỗi
trên bảng Σ Cụ thể với Σ = {ε} a, b}, thì abab và aaabbba là các chuỗi trên Σ
Độ
dài chuỗi: là số các ký hiệu tạo thành chuỗi
Ví dụ:|abca| = 4
Chuỗi rỗng : ký hiệu ε, chuỗi không có ký hiệu nào và |ε| = 0
Chuỗi con: chuỗi v là chuỗi con của w nếu v được tạo bởi các ký hiệu liền
kề nhau trong chuỗi w
Ví dụ: chuỗi 10 là chuỗi con của chuỗi 010001
C
huỗi tiền tố: là chuỗi con bất kỳ nằm ở đầu chuỗi.
Ví dụ: chuỗi 010 là chuỗi tiền tố của chuỗi 0 10 001
Chuỗi hậu tố: là chuỗi con bất kỳ nằm ở cuối chuỗi.
Ví dụ: chuỗi 001 là chuỗi hậu tố của chuỗi 010001
Chuỗi nối kết: chuỗi được tạo thành bằng cách viết chuỗi thứ nhất, sau đóchuỗi thứ hai,
Ví dụ: w = a1a2 a n và v = b1b2 b m nối kết của hai chuỗi này là chuỗi wv
= a1a2 a n b1b2 b m Hay nối ghép của chuỗi Long và Int là LongInt
Chú ý: nối kết của chuỗi rỗng εw = wε = w (với mọi w) Vì vậy, ε là đơn
vị của phép nối kết
Chuỗi đảo ngược: của chuỗi w, ký hiệu wR, là chuỗi w được viết theo thứ
tự ngược lại
Ví dụ: chuỗi w = abcd đả ngược của w là wR = dcba và ta có εR = ε
Phép cắt trái: của từ α cho từ β là phần còn lại của từ α sau khi cắt bỏ
phần đầu β trong từ α
Phép cắt phải: của từ α cho từ β là phần còn lại của từ α sau khi cắt bỏ
phần đuôi β trong từ α
2.2 Văn phạm
2.2.1 Khái niệm văn phạm
Văn phạm: theo từ điển là một tập các qui tắc về cấu tạo từ và các qui tắc
về cách liên kết các từ lại thành câu
Trang 7Định nghĩa văn phạm G là một bộ sắp thứ tự gồm 4 thành phần
G = < Σ, Δ, S, P > trong đó:
Σ: bảng chữ cái, gọi là bảng chữ cái cơ bản Tập các kí hiệu kết thúc.Δ: (Δ ∩ Σ =Ø), gọi là bảng ký hiệu phụ Tập các kí hiệu không kết thúc.), gọi là bảng ký hiệu phụ Tập các kí hiệu không kết thúc
S ∈ Δ: Được gọi là biến khởi đầu(kí hiệu mục tiêu)
P: tập hữu hạn các luật sinh dạng α→β, trong đó:α, β ∈ (Σ ∪ Δ)* trong αchứa ít nhất một ký hiệu không kết thúc (đôi khi, ta gọi chúng là các qui tắchoặc luật viết lại)
2.2.2.Các khái niệm liên quan
Dẫn xuất trực tiếp: nếu α→β là một luật sinh thì áp dụng đối với chuỗiw= gαd ta có được gαd → gβd
Dẫn xuất gián tiếp: nếu các chuỗi a1, a2, , am ⊂ ∑¿và a1 → a2, a2 →
a3, , am-1 → am thì am có thể được dẫn xuất gián tiếp từ a1 như sau a1 → * am
Ngôn ngữ L sinh bởi văn phạm G:
Cho G = < Σ, Δ, S, P > là một văn phạm, thì tập L (G) = {ε} w | w ⊂ Σ* và S
→ * w} được gọi là ngôn ngữ được sinh ra bởi G
Văn phạm tương đương: là 2 văn phạm sinh ra cùng một ngôn ngữ (G1
Trang 82.2.3 Phân loại văn phạm
Theo Chomsky văn phạm được chia thành 4 loại sau:
Văn phạm không hạn chế, văn phạm cảm ngữ cảnh, văn phạm phi ngữ
cảnh và văn phạm chính quy Mối quan hệ của chúng thể hiện như sau:
Văn phạm loại 0: (văn phạm không hạn chế) là văn phạm không cần thỏa
điều kiện ràng buộc nào trên tập các luật sinh Tất cả các loại văn phạm đều
thuộc văn phạm loại 0
Văn phạm loại 1: (văn phạm cảm ngữ cảnh) nếu văn phạm G có các luật
sinh dạng α→β và ,|β| ≥ |α| ví dụ:
Văn phạm loại 2: (văn phạm phi ngữ cảnh) là văn phạm có luật sinh dạng
A→α với A là một biến đơn và α là chuỗi các ký hiệu thuộc (Σ ∪Δ)*;
Văn phạm loại 3: (văn phạm chính quy) có mọi luật sinh dạng tuyến tính
phải hoặc tuyến tính trái Trong đó:
Tuyến tính phải là luật sinh có dạng: A → wB hoặc A → w;
Tuyến tính trái là luật sinh có dạng: A → Bw hoặc A → w;
(Với A, B là các biến đơn, w là chuỗi ký hiệu kết thúc (có thể là rỗng))
Nếu ký hiệu L0, L1, L2, L3 là lớp các ngôn ngữ được sinh ra bởi văn phạm
Trang 92.3 Automata hữu hạn
2.3.1 Khái niệm chung về automat
Automat: là máy tự động, là thiết bị có thể tự thực hiện công việc màkhông cần sự can thiệp của con người Nó hoạt động dựa trên một số quy tắc vàdựa vào các quy tắc này con người lập trình cho nó hoạt động theo ý muốn củamình Máy tính số ngày nay chính là một máy tự động điển hình và mạnh nhấthiện nay Cụ thể automat là một mô hình toán học hay máy trừu tượng có cơ cấu
và hoạt động đơn giản nhưng có khả năng đoán nhận ngôn ngữ
Finite automata (FA) là mô hình tính toán hữu hạn: có khởi đầu và kếtthúc, mọi thành phần đều có kích thước hữu hạn cố định và không thể mở rộngtrong suốt quá trình tính toán
Automata làm việc theo các bước thời gian rời rạc (steps)
Nói chung, thông tin ra sản sinh bởi một FA phụ thuộc vào cả thông tinvào hiện tại và trước đó
Biểu diễn một FA: Có hai cách: biểu đồ dịch chuyển và bảng dịchchuyển
Trang 10Ngoài ra có thể biểu diễn dưới dạng bảng chuyển trạng thái như sau:
…
Σ : bộ chữ cái nhập vào (a, b, c …);
δ : D→ Q là hàm chuyển (hay ánh xạ), D ⊆ Q × Σ, có nghĩa là δ(p, a) =q
hoặc δ(p, a) = Ø), gọi là bảng ký hiệu phụ Tập các kí hiệu không kết thúc., trong đó p, q ϵQ , a ϵ Σ;
Trang 124.δ*(q,a) = e*(δ(δ*(q, e),a)) = e*(δ(e*(q),a))
5.δ*(q, wa) = e*( δ( δ*(q, w), a)) hoặc
δ*(q, wa) = e*(P) với P = {ε} p | r Îδ(r, a) } δ*(q, w), p Îδ(r, a) } δ(r, a)}
6.δ*(R, w) = È qÎR δ*(q, w)
Ví dụ
Trang 13Chương 3 CÁC THUÂT TOÁN
3.1 Các thuật toán biến đổi trên automat
3.1.1 Thuật toán kiểm tra đoán nhận chuỗi
a Tư tưởng
Duyệt lần lượt các kí tự của chuỗi cần đoán nhận, bắt đầu từ trạng thái bắtđầu của automat Nếu kí tự cuối cùng của chuỗi được duyệt tới trạng thái kếtthúc của Automat thì kết luận automat đó đoán nhận chuỗi đó
b Giả mã
Input: Chuỗi cần đoán nhận và FA dùng để đoán nhận chuỗi.
Output:Chuỗi có được đoán nhận bởi FA này không
Trang 14Quá trình đoán nhận 00101 như sau:
b.Giả mã
Giải thuật bắt đầu bằng việc đánh dấu các cặp trạng thái qi và qj là khácnhau (phân biệt) nếu một trạng thái là đoán nhận còn trạng thái còn lại thì khôngđoán nhận Phần còn lại của giải thuật là xem xét một cách hệ thống các cặptrạng thái không được đánh dấu Khi hai trạng thái cho thấy là phân biệt, thì cólời gọi chuỗi đệ quy DIST để thiết lập D[i,j]=1 Lời gọi DIST(i,j) không chỉđánh dấu qi và qj là phân biệt , nó còn đánh dấu mỗi cặp trạng thái qm,qn (với[m,n] thuộc S[i,j]) là khác nhau cho tới lời gọi DIST(m,n)
Trang 152 For mọi cặp i, j , i<j, If có 1 qi hoặc qj là 1 trạng thái đoán nhận vàcòn lại không phải là 1 trạng thái đoán nhận, Then D[ i,j] := 1
3 For mọi cặp i, j, i<j, với D[ i,j ] =0 Do
3.1 If có tồn tại 1 a € ∑ như là δ(qi, a) =qm , δ(qj ,a) = qn và D[m,n] =
1 hoặc D[n,m] =1
Then DIST(i,j)=1
3.2 Else
For mỗi a € ∑ Do : cho δ(qi ,a) =qm và δ( qj, a) = qn
If m<n and [ i, j ] ≠ [m,n] Then thêm [i,j] vào S[m,n]
Else If m>n và [ i,j ] ≠ [n,m] Then thêm [ i, j ] vào S[m,n]
Cho automat đơn định sau:
Sau bước đanh dấu ta có bảng đánh dấu như sau:
Ghép các trạng thái không phân biệt được ta được DFA rút gọn:
Trang 163.1.3 Chuyển NFA sang DFA
a Tư tưởng
Từ định lý nếu ngôn ngữ L là tập được chấp nhận bởi một NFA thì tồn tạimột DFA chấp nhận L Vì vậy sẽ tồn tại một DFA tương đương NFA chấp nhậncùng một ngôn ngữ
b Giả mã
Input: NFA M=(Q,∑,δ,q0,F) vào hàm dịch t của M
OutPut: DFA tương đương
2.1.3 Thêm một cung từ X vào Y nhãn là a
Else done := true
Until done
3 Tập các trạng thái đoán nhận của DM là F’ = {ε} X Q’ | X chưá
1 thành phân qi ϵ F}
c.Ví dụ
Trang 17Cho automat đa định (NFA) sau:
Từ đồ thị chuyển trạng thái trên ta có bảng chuyển như sau:
q0 [q0,q1] q0
[q0,q1] [q0,q1] [q0,q2]
[q0,q2] [q0,q1] [q0,q2]Vậy ta có DFA sau:
b Giả mã
Input: NFAɛ A(Q, Σ, δ, q0, F) chấp nhận L
Output: NFA A’={ε} Q, Σ, δ’, q0, F’}
Trang 18Thuật toán
Tìm các thành phần của NFA như sau:
-F’ = F ∪ q 0 nếu ɛ*(q, a q 0 ) chứa ít nhất một trạng thái thuộc F Ngược lại, F’
= F;
-δ’(q, a) = δ*(q, a).
c Ví dụ
cho NFAɛ sau:
Xá định NFA M’ = {ε} Q, Σ, δ’, q0, F’} tương đương theo thuật toán trên
Trang 193.1.5 Chuyển NFAɛ sang DFA
Input : NFAɛ M=(Q,∑,δ,q0,F) vào hàm dịch t của M
Output: DFA tương đương
2.1.3 Thêm một cung từ X vào Y nhãn là a
Else done := true
Trang 20Theo thuật toán trên ta tìm được các bao đóng sau:
Trang 21DFA tương ứng:
3.2 Các thuật toán biến đổi giữa automata và văn phạm
3.2.1 Chuyển FA sang văn phạm chính quy
a Tư tưởng
Nếu L là một tập hợp chính quy thì L được sinh ra từ một RG (văn phạmtuyến tính trái hoặc tuyến tính phải) nào đó Do đó, một FA có thể được biểudiễn bởi một RG
b Giả mã
Giải thuật xây dựng RG tuyến tính phải cho FA:
Forearch(các hàm chuyển trạng thái δ của FA):
If( δ(p, a) = q)
Trang 22Then RG có luật sinh: p →aq.
xét DFA cho 0(10)* sau:
Biểu diễn bởi văn phạm sau:
Giải thuật xây dựng FA cho văn phạm tuyến tính phải:
Xây dựng tập Q gồm các trạng thái có dạng [α] với α là S hoặc chuỗi hậu
tố của vế phải một luật sinh nào đó trong P
Trang 23b.Ví dụ
Xây dựng FA cho RG: S→0A ; A → 10A | e
Ta xây dựng được FA biểu diễn nó như sau:
Như vậy ta có thể xây dựng giải thuật theo 3 bước:
Xác định văn phạm tuyến tính phải G’ = < Σ, Δ, S, P’ >
Xây dựng NFA cho G’;
Đảo ngược chiều các cạnh của NFA này, vị trí kết thúc trở thành vị trí bắtđầu và ngược lại
3.3.Các thuật toán biến đổi trên văn phạm
3.3.1 Chuyển văn phạm tuyến tính phải thành văn phạm tuyến tính trái(ngượclại)
a Tư tưởng
Cho văn phạm G = < Σ, Δ, S, P >, và G’ = < Σ, Δ, S, P’ >, trong đó nếu:P’ = {ε} A → α | A → αR ∈ P } ,
thì L(G’)R = L(G)