a. Kiểu mảng (array)
Tương tự như các ngôn ngữ lập trình khác, Promela cũng có dữ liệu kiểu mảng (array). Mảng trong Promela là mảng một chiều, muốn khai báo mảng hai chiều thì chúng ta cần dùng cách khác để thực hiện. Cấu trúc và ngữ nghĩa của mảng tương tự như trong ngôn ngữ lập trình C.
Các phần tử của mảng được khai báo tuần tự như sau:
Int Array[4];
Array[0] = 3; Array[1] = 12; Array[2] = 14; Array[3] = 32; Mảng của các dữ liệu kiểu bit hay bool sẽ được lưu trong mảng kiểu byte, để tiết kiệm bộ nhớ thì các kiểu dữ liệu khác cũng có thể lưu trong mảng kiểu byte bằng cách dịch chuyển bit (shift) và dùng mặt nạ (mask).
b. Định nghĩa kiểu (type definitions)
Các kiểu kết hợp được định nghĩa với typedef và thường được dùng để định nghĩa cấu trúc của các thông điệp được gửi qua các kênh:
typedef MESSAGE { mtype message; byte source; byte destination; bool urgent }
Kiểu tự định nghĩa này cũng được dùng để khai báo mảng 2 chiều trong Promela. Cú pháp của kiểu tự định nghĩa này tương tự với các ngôn ngữ giống C.
c. Bộ tiền xử lý (The preprocessor)
SPIN được cài đặt bằng ngôn ngữ C, nên nó cũng có những đặc tính tương tự C. Nó sử dụng một công cụ biên dịch được gọi là bộ tiền xử lý – nó sẽ được gọi trước khi bộ biên dịch thực thi. Bộ tiền xử lý cũng được dùng để dẫn dắt quá trình xử lý các macro dựa vào văn bản (text-based) trên mã nguồn. Dựa vào văn bản có nghĩa là bộ tiền xử lý không có bất kỳ tri thức nào về cú pháp và ngữ nghĩa của ngôn ngữ, thay vào đó là xem mã nguồn như là văn bản thuần.
Khi SPIN chạy ở bất kỳ mode nào, nó cũng gọi bộ tiền xử lý trước tiên, thông thường thì nó sẽ giống như là bộ tiền xử lý được kết hợp với bộ biên dịch dùng để biên dịch các bộ kiểm chứng.
Chúng ta có thể gặp các bộ tiền xử lý như #define, #include, và inline
tương tự như ngôn ngữ C trong SPIN.
#include “for.h” // Khai báo thư viện
#define N 5 // Định nghĩa một ký hiệu, nhãn
#define mutex (critical <=1) // Khai báo ký hiệu cho biểu thức
// được dùng trong các đặc tả tính // đúng đắn
Ngoài ra bộ tiền xử lý còn được cài đặt, ứng dụng trong việc biên dịch điều kiện (condition compilation), và các macro.