Câu lệnh trong Promela

Một phần của tài liệu Kiểm tra mô hình phần mềm sử dụng lý thuyết Ôtômat Buchi và Logic thời gian tuyến tín (Trang 81 - 83)

Trong Promela không có sự phân biệt giữa lệnh điều kiện và câu lệnh, thậm chí cả các điều kiện boolean cũng có thểđược sử dụng như các câu lệnh. Câu lệnh có thể là câu lệnh thi hành (executable) hoặc lệnh bị tạm thời trì

hoãn (blocked) tuỳ thuộc vào trạng thái tổng thể của hệ thống. Khi điều kiện

được thoả mãn, thì câu lệnh điều kiện chính là lệnh thi hành. Lệnh thi hành là các lệnh có thểđược thi hành ngay lập tức, lệnh blocked là lệnh chưa được thi hành ngay. Câu lệnh gán luôn là câu lệnh thi hành.

Một biểu thức logic có thể là một câu lệnh thực thi nếu nó có giá trị khác 0 2 < 3 : luôn là lệnh thi hành

x < 27 chỉ là lệnh thi hành nếu giá trị của x < 27 3 + x chỉ là lệnh thi hành nếu x khác –3

Một số lệnh thường dùng:

¾ Lệnh skip: không làm gì cả (does nothing), chỉ dùng để thay đổi biến

đếm tiến trình của tiến trình), luôn là lệnh thi hành.

¾ Lệnh run: chỉ là lệnh thi hành nếu một tiến trình mới được tạo ra, chú ý số tiến trình được tạo ra là có giới hạn.

¾ Lệnh printf: luôn là lệnh thi hành, nhưng không dùng đểđánh giá trong

suốt quá trình xác thực. int x; proctype Aap() { int y=1; skip;

run Noot(); /*Là lệnh thi hành nếu Noot được tạo */ x=2;

x>2 && y==1;

/* Chỉ thi hành nếu một số tiến trình khác làm x>2 */ skip;

}

¾ Lệnh assert (<expr>): luôn luôn là lệnh thi hành. Nếu <expr> có giá trị

(violated). Câu lệnh assert thường được sử dụng trong các mô hình Promela để kiểm tra xem các điều kiện có được thoả mãn hay không

Một phần của tài liệu Kiểm tra mô hình phần mềm sử dụng lý thuyết Ôtômat Buchi và Logic thời gian tuyến tín (Trang 81 - 83)