2.9.1 OCamllex
Ocamllex [15] 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. Ocamllex sẽ 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]. Tập tin mã nguồn được dịch và liên kết lại để sinh ra tập tin có khả năng thực thi. Tập tin thực thi này khi chạy sẽ xử lý đầu vào của nó dựa vào các biểu thức chính quy. Khi nó tìm thấy một từ vựng nó sẽ thực thi đoạn mã nguồn OCaml tương ứng. Tập tin mã nguồn đặc tả từ vựng có đi mở rộng là .mll. Để biên dịch tập tin này sử dụng dòng lệnh:ocamllex∗.mll. Tập tin đặc tả từ vựng gồm có bốn thành phần: header,các định nghĩa, các luậtvàtrailer. Trong đó, các thành phầnheadervàruleslà cần thiết cịn hai thành phần còn lại làrules vàtrailerlà tùy chọn. Cấu trúc tập tin đặc tả từ vựng được mơ tả như Hình 2.35. Hình 2.36 là ví dụ mơ tả một tập tin đặc tả từ vựng.
(* thành phần header *) { header }
(* thành phần định nghĩa *) let ident = regexp
let ...
(* thành phần luật *)
rule entrypoint [arg1... argn] = parse | pattern { action }
| ...
| pattern { action }
and entrypoint [arg1... argn] = parse ... and ... (* thành phần trailer *) { trailer } Hình 2.35: Cấu trúc tập tin đặc tả từ vựng. 2.9.2 OCamlyacc
Ocamlyacc [16] là bộ sinh dùng để sinh ra chương trình phân tích cú pháp bằng ngơn ngữ OCaml từ một tập tin đặc tả văn phạm phi ngữ cảnh. Chương trình OCaml này sẽ có chức năng phân tích cú pháp cho tập tin dữ liệu đầu vào tuân thủ theo văn phạm đó. Tập tin mã nguồn đặc tả cú pháp có đi mở rộng là
Chương 2.Kiến thức cơ bản { l e t num_lines = r e f 0 l e t num_chars = r e f 0 } r u l e count = parse
| '\n' { i n c r num_lines ; i n c r num_chars ; count ←-
l e x b u f } | _ { i n c r num_chars ; count l e x b u f } | e o f { ( ) } { l e t main ( ) = l e t l e x b u f = Lexing . from_channel s t d i n i n count l e x b u f ; P r i n t f . p r i n t f " # o f l i n e s = %d , # o f c h a r s = %d\n " !←- num_lines ! num_chars l e t _ = P r i n t e x c . p r i n t main ( ) } Hình 2.36: Ví dụ tập tin đặc tả từ vựng.
tả cú pháp gồm có bốn thành phần: header,khai báo Ocamlyacc, luật văn phạmvà
trailer. Cấu trúc tập tin đặc tả cú pháp được mơ tả như Hình 2.37.
%{
Header (mã nguồn OCaml) %}
Khai báo Ocamlyacc %%
Các luật văn phạm %%
trailer (có thể có mã nguồn OCaml)
Chương 3 AGTool
3.1 Giới thiệu AGTool
Phương pháp kiểm chứng mơ hình cịn gặp phải vấn đề "bùng nổ khơng gian trạng thái". Một giả thuyết được đặt ra là thay vì kiểm chứng trên tồn bộ hệ thống, chúng ta sẽ kiểm chứng từng thành phần của hệ thống đó. Với giả thuyết này thì phương pháp kiểm chứng giả định-đảm bảo có tiềm năng trong việc giải quyết bài tốn của phương pháp kiểm chứng mơ hình. Để sử dụng được phương pháp kiểm chứng đảm bảo giả định, chúng ta cần sinh ra cho hệ thống một giả định (Assumption). Và AGTool [7] là một trong những công cụ dùng để thực hiện cơng việc sinh ra giả định đó. Hình 3.1 mơ tả tổng quan về AGTool.
Hình 3.1: Mơ hình công cụ kiểm chứng AGTool.
Các thành phần M1, M2 và thuộc tính Pcủa hệ thống được đặc tả bởi các