El comentario de @enone menciona que GNAT rechaza x AND THEN y AND z
, pero no explica por qué. Es cierto, en cierto sentido, que and
y and then
tienen la misma precedencia, pero esa no es toda la historia.
La gramática para una expresión es:
expression ::=
relation {and relation} | relation {and then relation}
| relation {or relation} | relation {or else relation}
| relation {xor relation}
donde { FOO }
denota cero o más ocurrencias de FOO
.
Esta gramática está específicamente diseñada para permitir que cualquiera de estos operadores o formularios de control se encadena en una sola expresión (X and Y and Z
, A and then B and then C
), pero prohíbe mezclarlos. Entonces, la expresión en la pregunta, x AND THEN y AND z
, es ilegal, y la pregunta de qué significa ni siquiera surge. El objetivo de esta regla es precisamente evitar la confusión en casos como este.
Solo tiene que escribir (X and then Y) and Z
o X and then (Y and Z)
, el que coincida con lo que desea hacer.
Lo mismo se aplica a la mezcla and
y 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
GNAT rechazará para compilar el primer ejemplo con mensaje de error "operadores lógicos mixtos en la expresión". – oenone