nhận xét của @ oenone đề cập rằng GNAT từ chối x AND THEN y AND z
, nhưng không giải thích tại sao. Đó là sự thật, theo nghĩa nào đó, rằng and
và and then
có cùng quyền ưu tiên, nhưng đó không phải là toàn bộ câu chuyện.
Ngữ pháp cho một biểu thức là:
expression ::=
relation {and relation} | relation {and then relation}
| relation {or relation} | relation {or else relation}
| relation {xor relation}
nơi { FOO }
biểu thị bằng không hoặc nhiều lần xuất hiện của FOO
.
Ngữ pháp này được thiết kế đặc biệt để cho phép bất kỳ một trong những toán tử này hoặc biểu mẫu kiểm soát bị xích trong một biểu thức duy nhất (X and Y and Z
, A and then B and then C
), nhưng để cấm trộn chúng. Vì vậy, biểu thức trong câu hỏi, x AND THEN y AND z
, là bất hợp pháp và câu hỏi về ý nghĩa của nó thậm chí không nảy sinh. Điểm của quy tắc này là chính xác để tránh nhầm lẫn trong các trường hợp như thế này.
Bạn chỉ cần viết (X and then Y) and Z
hoặc X and then (Y and Z)
, tùy theo cái nào phù hợp với những gì bạn muốn làm.
cũng áp dụng để trộn and
và or
:
X and Y and Z -- legal
X and Y or Z -- ILLEGAL
(X and Y) or Z -- legal
X and (Y or Z) -- legal
Nguồn
2011-08-02 15:47:39
GNAT sẽ từ chối để biên dịch ví dụ đầu tiên với thông báo lỗi "toán tử logic hỗn hợp trong khái niệm". – oenone