La solución rápida es poner entre paréntesis las comparaciones.
Código:
f (a=b) and (b<>c) and (c>=d) and (d<=a) then
Si no pones paréntesis, el compilador no puede saber si el AND esta siendo usado para enmascarar los bits de alguna variable. Esto es una sentencia válida:
Código:
if a=(b and c) then
Obviamente no es lo mismo que
Código:
if (a=b) and c then
siendo c una variable del tipo boolean.
Saludos!