Giả sử một thành phần phần mềm C là một Sender component với giả thiết như sau:
Tập các hành vi quan sát được trên C là {in, send, ack}, và
Tập các dẫn xuất thực hiện được trên C là {in, in send, in send ack}. Hãy xây dựng mô hình mô tả chính xác các hành vi của thành phần Sender ở trên.
Input:
Alphabet = {in, send, ack }.
Tập các dẫn xuất L = {in, in send, in send ack}.
Output:
Ôtômát hữu hạn M = (Q, Σ, , q0, F) đoán nhận tập dẫn xuất L.
Thử nghiệm với GenModelTool:
Trước tiên, dữ liệu đầu vào được đọc từ tệp input.txt vào tab input trên công cụ GenModelTool được mô tả trên hình 4.3. Khi thực hiện chức năng generate, chương trình sẽ gọi giải thuật makeDFA để xây dựng ôtômát đoán nhận L theo các bước như sau:
Xây dựng biểu thức chính quy tương đương ngôn ngữ L:
in in send in send ack
Với mỗi biểu thức chính quy thành phần, giải thuật xây dựng otomat hữu hạn tương đương như sau:
Với biểu thức chính quy thành phần in, ta xây dựng được ôtômát hữu hạn thành phần M1 = (Q1, 1, 1, q01, F1), trong đó:
Q1 = {q1, q2}, 1 = {in}, 1 = {(q1, in, q2)}, q0 1
= q1, và F1 = {q2}.
Với biểu thức chính quy thành phần in send, ta xây dựng được ôtômát hữu hạn thành phần M2 = (Q2, 2, 2, q0
2
, F2), trong đó: Q2 = {q3, q4, q5}, 2 = {in, send}, 2 = {(q3, in, q4), (q4, send, q5)}, q02 = q3, và F2 = {q5}.
Với biểu thức chính quy thành phần in send ack, ta xây dựng được ôtômát hữu hạn thành phần M3 = (Q3, 3, 3, q03, F3), trong đó: Q3 = {q6, q7, q8, q9}, 3 = {in, send, ack}, 3 = {(q6, in, q7), (q7, send, q8), (q8, ack, q9)}, q0
3
= q6, và F3 = {q9}.
Hợp các ôtômát thành phần ta thu được ôtômát hữu hạn M = (Q, , , q0, F) tương đương với biểu thức chính quy biểu diễn ngôn ngữ L như sau:
Ta thêm một trạng thái để làm trạng thái vào hay trạng thái khởi tạo của ôtômát M, ký hiệu là q0. Khi đó, tập trạng thái Q được xây dựng bằng cách hợp các tập trạng thái của các ôtômát thành phần thu được:
Q = {q0, q1, q2, q3, q4, q5, q6, q7, q8, q9}
Tập các hành vi được xây dựng bằng cách hợp các tập con 1 2 3 thu được:
= {in, send, ack}
Tập quy tắc đoán nhận được xây dựng bằng cách hợp các tập quy tắc của các ôtômát thành phần 1 2 3 {(q0, , q0 1 ), (q0, , q0 2 ), (q0, , q0 3)} được: = {(q0, , q0 1 ), (q0, , q0 2 ), (q0, , q0 3 ), (q1, in, q2), (q3, in, q4), (q4, send, q5), (q6, in, q7), (q7, send, q8), (q8, ack, q9)}
Tập các trạng thái chấp nhận (trạng thái kết) được xây dựng bằng cách hợp các trạng thái kết của M1, M2, M3 được:
F = {q2, q5, q9}
Để đơn giản hóa, chúng ta có thể loại bỏ các quy tắc trong tập quy tắc của ôtômát trên như sau:
Với mỗi quy tắc (qi, , qj) ta loại bỏ trạng thái qj và đồng thời thay thế mọi quy tắc bắt đầu từ qj như (qj, , qk) bởi quy tắc (qi, , qk) với Σ. Khi đó, ta sẽ được ôtômát M = (Q, , , q0, F) tương đương được chỉ ra trong hình 4.4, trong đó:
Q = {q0, q1, q2, q3, q4, q5, q6 }, = {in, send, ack},
= {(q0, in, q1), (q1, send, q2), (q2, ack, q3), (q0, in, q4), (q4, send, q5), (q0, in, q6)},
F = {q3, q5, q6}, và Trạng thái khởi tạo q0.
Hình 4.4: Một Ôtômát đầu ra của công cụ GenModelTool.