Как заменить условного оператора на & amp; и ||?

Я работаю на Парсер выражений и я хотел бы добавить условный оператор (?:) Я изменился && а также || вести себя как объекты в javascript, используя этот код:

case '&&':
$stack->push($op1 && $op2 ? $op2 : ($op1 ? $op2 : $op1)); break;
case '||':
$stack->push($op1 ? $op1 : $op2); break;

так что я думал, что я просто заменю foo ? bar : baz от foo && bar || baz это возможно с помощью регулярных выражений? если операторы могут быть вложенными, каждый аргумент условного оператора может иметь один и тот же оператор.

0

Решение

foo && bar || baz а также foo ? bar : baz не эквивалентны.

Предположим, что оба foo это значение считается истинным и bar значение считается ложным. В таком случае, foo && bar ложно, поэтому значение первого выражения baz, Троичный оператор (?:), с другой стороны, alwys возвращает второй аргумент, когда первый аргумент равен true, поэтому он вернет bar,

Пытаться 1 && 0 || 2 а также 1 ? 0 : 2, Первый 2, а второй 0.

Самый простой способ оценить троичный оператор — это один оператор, принимающий три операнда


Кстати, op1 && op2 можно было бы написать гораздо проще, как op1 ? op2 : op1,

2

Другие решения

Других решений пока нет …