CHƯƠNG 5 THIẾT KẾ CHI TIẾT SERVER
5.9. Lớp chuyển kết quả từ các Solver về dạng chuẩn convert
Là lớp chuyển tất cả các đầu ra theo định dạng của các Solver sang dạng chuẩn theo quy ước của hệ thống. Do mỗi Solver đều có cách thể hiện kết quả riêng, nên khi thêm một Solver vào trong một hệ thống ta phải viết thêm vào lớp Convert hàm chuyển đổi từ Solver sang dạng chuẩn của hệ thống.
Hiện tại, để cho người dùng dễ hiểu ta sử dụng cách biểu diễn trung tố giống như các biểu diễn thông thường trong toán học. Chẳng hạn như khi giải bài toán SMT, Z3, Yieces cho ta kết quả như bảng so sánh 5.1.
Bảng 5.1 Ví dụ so sánh kết quả trả về của các Solver
Z3 Yieces Dạng quy định của hệ
thống(x1 -> 1/100000) (= x1 1/100000) (X1 = 1/100000) (x1 -> 1/100000) (= x1 1/100000) (X1 = 1/100000)
Ta có thể nhận thấy được cách biểu diễn một trường hợp nghiệm đơn giản của một bài toán của các Solver Z3 và Yieces. Trong một số trường hợp nghiệm được diễn tả đặc biệt để quy ước dạng biểu diễn của hệ thống và xây dựng phương thức biến đổi từ các Solver sang dạng biểu diễn ấy đòi hỏi sự nghiên cứu nhiều hơn về thuật toán và thời gian tìm hiểu của các Solver. Các chức năng này sẽ được phát triển dần lên qua quá trình hệ thống.
Lớp có sử dụng biến trạng thái hoạt động. Nếu ta để trạng thái hoạt động active là giá trị false thì toàn bộ kết quả nhận được từ Solver sẽ không chuyển sang dạng chuẩn mà chuyển trực tiếp đến User.
public static String ConvertResult(String res, String Solver_name){ if (active == false)
return res;
Debug.debug(" Truoc khi bien doi "+Solver_name +": " + res); // Nếu Solver gửi kết quả đến là Yices
return Yices_to_SMTResult(res); // Nếu Solver gửi kết quả đến là Z3
if (Solver_name.toLowerCase().equals("z3")) return Z3_to_SMTResult(res);
// Nếu không phải là các Solver trên return Orther_to_Yices(res);
}
Hình 5.13 Phương thức chuyển đổi kết quả - convertResult thuộc lớp convert.
Hiện tại trong phạm vi và thời gian của bài khóa luận, lớp convert chỉ chuyển một số dạng biểu diễn đơn giản của Z3 và Yieces sang dạng biểu diễn chung của hệ thống. Nếu như ta có một Solver mới sử dụng cho hệ thống ta phải xây dựng phương thức chuyển kết quả đầu ra thành dạng chung cho Solver đó. Nếu không được viết phương thức chuyển đầu ra, hệ thống sẽ giữ nguyên cách hiển thị của Solver đó chuyển đến cho người dùng (Hình 5.13).