12. "ПОП И БРЕЙК"
А теперь соединим функции NeedPop и BreakNow:
Как видно код функций NeedPop и BreakNow идентичен. И мы хотели, чтобы он был один. Отличие состоит лишь в том, что, в зависимости от описанных выше обстоятельств, мы берем разные элементы из таблицы приоритетов и используем разные операторы сравнения (больше ">" и меньше или равно "<=").
В идеале, когда на входе один параметр, код сам выполняет функцию BreakNow, а когда другой, то - функцию NeedPop. Для этого вместо конкретного параметра в строке возврата напишем формулу.
bool
Pop_N_Break(const int x const TToken & rToken1, const TToken & rToken2)
{
assert(rToken1.GetType() < eTokenTypeCount);
assert(rToken2.GetType() < eTokenTypeCount);
return g_iPriorities[rToken1.GetType()][x] >
g_iPriorities[rToken2.GetType()][x + 1];
}
Далее...