4 Chuyển đổi giữa các dạng biểu diễn của LTS
4.2 Chuyển đổi LF sang FSP
4.2.1 Ý tưởng
Hệ thống sẽ cài đặt một thành phần được gọi là LF2FSP. Thành phần này có
chức năng chuyển đổi dữ liệu từ LF sang FSP. Bài toán chuyển đổi từ LF sang FSP được mơ tả như Hình 4.5.
Hình 4.5: Cấu trúc thành phần chuyển đổi từ LF sang FSP.
AGTool sinh ra giả định dưới dạng LF và được thành phần LF2FSPxử lý.
Kết quả đầu ra của thành phầnLF2FSPlà dữ liệu FSP. Thành phần LF2FSPcài
Chương 4.Chuyển đổi giữa các dạng biểu diễn của LTS
Thuật toán 4.2Thuật toán chuyển đổi LF sang FSP.
Đầu vào: list_transitions là danh sách các hàm chuyển trạng thái, list_states là danh sách các trạng thái.
Đầu ra: fsp_str là chuỗi kí tự biểu diễn một FSP.
1: Khởi tạo fsp_str = null, count = 0, i = 0, tmp = empty
2: {khởi tạo xâu fsp_str rỗng, khởi tạo biến đếm count và i bằng 0, khởi tạo xâu tmp rỗng}
3: for allstate in list_statesdo
4: count := 0
5: tmp := null
6: for all(start_state, transition_label, stop_state) in list_transitionsdo
7: {Phương thức ReplaceCharInString dùng để thay thế một kí tự trong một
xâu bằng kí tự khác}
8: {Phương thức GetStopState dùng để kiểm tra xem một trạng thái có phải
là trạng thái kết thúc hay không?}
9: ifstart_state = state then
10: ifcount = 0then
11: tmp := tmp + (String.Uppercase start_state) + " = ({" + ReplaceCharIn- String transition_label ’=’ ’_’) + "} -> " + (GetStopState list_transitions stop_state)
12: else
13: tmp := tmp + "\n | {" + ReplaceCharInString transition_label ’=’ ’_’) + "} -> " + (GetStopState list_transitions stop_state)
14: end if 15: count++ 16: end if 17: end for 18: ifcount > 0then 19: i++ 20: ifi > 1then 21: fsp_str := fsp_str + ",\n" + tmp + ")" 22: else 23: fsp_str := fsp_str + tmp + ")" 24: end if 25: end if 26: end for 27: fsp_str fsp_str + ".\n"; 28: return fsp_str
Chương 4.Chuyển đổi giữa các dạng biểu diễn của LTS
Danh sáchlist_transitionsbao gồm các phần tử có định dạng là (start_state, transition_label, stop_state). Tại dịng 11 của Thuật tốn 4.2 sẽ tìm ra các hàm
chuyển có cùng trạng thái bắt đầu startstates. Nếu biến đếm count = 0 thì tạo
mới một tiến trình con cho FSP. Ngược lại, tiến trình con sẽ được thêm vào FSP trước đó. Tại các dịng từ 20 đến 27, Thuật toán 4.2 xác định một tiến trình có phải là tiến trình bắt đầu của FSP hay khơng? Và FSP sẽ được thêm kí hiệu kết thúc vào cuối tại dòng 29.
Đầu vào:
Danh sách list_transitions: [(S0, "in", S1), (S1, "send", S2), (S2, "ack", S0)] Danh sách list_states: [S0, S1, S2]
Các bước thực hiện: 1: Bước 1:
2: Khởi tạo các biến:
3: fsp_str = null: là xâu rỗng
4: tmp = empty: là xâu rỗng
5: count = 0, i = 0: là các biến đếm 6: Bước 2:
7: Duyệt danh sách list_states 8: Gán count = 0, tmp = null 9: Phần tử S0:
10: Duyệt danh sách list_transitions 11: Phần tử (S0, in, S1): 12: count = 0 13: tmp = "S0 = (in -> S1" 14: count = 1 15: Phần tử (S1, send, S2): 16: S0 != S1 -> bỏ qua 17: Phần tử (S2, ack, S0): 18: S0 != S1 -> bỏ qua 19: (count = 1) > 0 -> i = 1
Chương 4.Chuyển đổi giữa các dạng biểu diễn của LTS
20: fsp_tmp = "S0 = ({in} -> S1)"
21: Tương tự đối với 2 phần tử S1 và S2, ta được:
22: fsp_tmp = "S0 = ({in} -> S1), S1 = ({send} -> S2),S2 = ({ack} -> S0)" 23: Bước 3:
24: Trả về chuỗi fsp_tmp biểu diễn một FSP
4.2.2 Phân tích đánh giá
Thuật tốn 4.2 có tính dừng. Điều này có nghĩa là thuật tốn kết thúc sau một khoảng hữu hạn thời gian thực thi. Tham số đầu vào của Thuật toán 4.2 là hai
danh sách list_transitions và list_states. Trong Thuật tốn 4.2, chương trình sẽ
dừng khi duyệt hết tồn bộlist_transitionsvàlist_states. Các danh sách này đều là danh sách hữu hạn phần tử.
Luận văn đã trình bày phương pháp chuyển từ LF sang FSP. Tuy nhiên, kết quả thu được chưa được tối ưu hóa và phương pháp này chỉ mới được sinh ra FSP ở dưới dạng đơn giản nhất. Để giải quyết được bài toán này, cần phải dựa vào đặc tả và cú pháp của FSP. Sau đó cải tiến Thuật tốn 4.2 để thu được xâu biểu diễn FSP được tối ưu hóa tốt hơn.
Chương 5
Thực nghiệm
5.1 Cài đặt chương trình
Chương trình được cài đặt dựa trên phần nhân của AGTool. Dựa vào đó, luận văn sẽ cài đặt các thành phần có chức năng chuyển đổi giữa các phương pháp biểu diễn của LTS. Trong quá trình nghiên cứu và phát triển chương trình, các thành phần này được kết hợp với cơng trình khóa luận tốt nghiệp của sinh viên Vũ Hồng Long [9] để cài đặt một chương trình GUI-AGTool có giao diện người dùng trên Ubuntu. Luận văn cũng đã tích hợp với LTSA thơng qua một cầu nối để hỗ trợ chuyển đổi từ FSP sang LF. GUI-AGTool được cài đặt bằng ngôn ngữ
OCaml và các thành phần mới sử dụng công cụocamllex và ocamlyacc để đọc,
phân tích tập tin dữ liệu đầu vào. Ocamllex là bộ sinh dùng để sinh ra chương trình phân tích đốn nhận các mẫu từ vựng trong tập tin đầu vào. Các biểu thức chính quy và các luật được đặc tả trong tập tin từ vựng.Ocamllexsẽ sinh ra tập tin mã nguồn OCaml dựa vào tập tin đặc tả này. Tập tin mã nguồn được sinh ra
sẽ định nghĩa các hàm xử lý từ vựng [15].Ocamlyacc là bộ sinh dùng để sinh ra
chương trình phân tích cú pháp của tập tin đầu vào [16]. Chương trình OCaml sẽ có chức năng phân tích cú pháp cho tập tin dữ liệu đầu vào.
5.2 Giới thiệu về chương trình
Chương trình GUI-AGTool đã được cài đặt và cung cấp miễn phí tại địa chỉ 1.
Chương trình u cầu cài đặt các gói thư viện sau: • OCaml 3.12 được cung cấp tại địa chỉ2.
1http://uet.vnu.edu.vn/~hungpn/GUI-AGTool/