$patterns=array(
'/\band\b/i',
'/\bor\b/i',
'/\bfoo\b/i',
'/\bbar\b/i',
'/\bnot\b/i');
$replace=array(
'*', // value for 'and'
'+', // value for 'or'
'1', // value for 'foo'
'0', // value for 'bar'
'!'); // value for 'not'
$expression="foo AND NOT bar";
$result=eval(preg_replace($pattern, $replace, $expression));
Вы можете легко добавить свои собственные факты, он будет автоматически обрабатывать скобки и приоритет.Было бы неплохо подумать о том, как вы будете обрабатывать неожиданные входные данные в выражении $ (подсказка, что замененная версия должна содержать только 1, 0, +, *, (,) и!)
C.