V. XỬ LÝ TUẦN TỰ
5. PHÁT BIỂU CASE
Phát biểu CASE được sử dụng khi giá trị của biểu thức duy nhất có thể được dùng để lựa chọn một trong số hoạt động.
Cú pháp cho phát biểu CASE như sau: case expression is
when choices => sequential statements; when choices => sequential statements; -- branches are allowed
[ when others => sequential statements ]; end case;
Kết quả biểu thức là số nguyên, hoặc kiểu liệt kê của mảng một chiều chẳng hạn như bit_vector. Phát biểu case đánh giá biểu thức và so sánh giá trị của biểu thức với mỗi giá trị của các lựa chọn. Mệnh đề when tương ứng với lựa chọn trùng hợp sẽ được thực hiện. Các nguyên tắc sau phải nhớ:
Không có 2 lựa chọn trùng lắp (lựa chọn này bao phủ lựa chọn kia).
Nếu phát biểu lựa chọn ‚when others‛ không hiện diện thì tất cả giá trị có thể có của biểu thức phải bao phủ hết bởi các lựa chọn.
Phát biểu CASE chứa từ khoá CASE theo sau là biểu thức và từ khoá IS. Biểu thức có giá trị tương thích với CHOICES nằm trong phát biểu WHEN hoặc tương thích với phát biểu WHEN OTHERS.
Nếu biểu thức tương thích với phần CHOICES của các phát biểu WHEN choices => thì
sequence_of_statement theo sau sẽ được thực hiện. Sau khi các phát biểu này được thực hiện xong thì điều khiển chuyển tới phát biểu nằm sau từ khoá END CASE.
Ví dụ 2-15: phát biểu case :
CASE instruction IS
WHEN load_accum => accum <= data; WHEN store_accum => data_out <= accum; WHEN load|store => process_IO (addr) ; WHEN OTHERS => process_error (instruction);
END CASE;
Phát biểu CASE thực hiện phát biểu tương ứng tuỳ thuộc vào giá trị của biểu thức ngõ vào. Nếu giá trị của biểu thức là một giá trị nằm trong các giá trị được liệt kê trong các mệnh đề
WHEN thì sau đó phát biểu theo sau mệnh đề WHEN được thực hiện. Ngược lại thì phát biểu theo sau mệnh đề OTHERS được thực hiện.
Trong ví dụ này khi giá trị của biểu thức là load_accum thì phát biểu gán đầu tiên được thực hiện. Nếu giá trị của biểu thức là load hoặc store thì thủ tục process_IO được gọi.
Nếu giá trị của biểu thức nằm ngoài dãy lựa chọn đã cho thì sau đó mệnh đề OTHERS tương thích với biểu thức và phát biểu theo sau mệnh đề OTHERS được thực hiện. Sẽ phát sinh lỗi nếu không có mệnh đề OTHERS và các lựa chọn đã cho không bao trùm giá trị có thể có của biểu thức.
Ví dụ 2-16 với biểu thức có kết quả trả về phức tạp hơn. Phát biểu CASE dùng kiểu dữ liệu này để lựa chọn một trong các phát biểu.
Ví dụ 2-16:
TYPE vectype IS ARRAY (0 TO 1) OF BIT; VARIABLE bit_vector: vectype;
… CASE bit_vector IS CASE bit_vector IS WHEN “00” => RETURN 0; WHEN “01” => RETURN 1; WHEN “10” => RETURN 2; WHEN “11” => RETURN 3; END CASE;
Ví dụ này trình bày một phương pháp chuyển đổi một mảng bit thành một số nguyên. Khi hai bit của biến bit_vec có giá trị ‘0’ thì lựa chọn ‚00‛ tương thích và giá trị trả về là 0. Khi hai bit của biến bit_vec có giá trị ‘1’ thì lựa chọn ‚11‛ tương thích và giá trị trả về là 3. Phát biểu CASE không cần mệnh đề OTHERS vì tất cả các giá trị của biến bit_vec được liệt kê bởi các lựa chọn.