9737
@ Подписаться
Сотни бизнес-методик. Тысячи кейсов. Обновления.

сегодня 10806 Подписчиков

Политика конфиденциальности Этот сайт использует cookies, чтобы повысить удобство его использования Вами Понятно

Обсуждения-аналоги

Скрыть / Показать Сортировать по дате
2010-01-22 15:08:35
Сычев С.В., Лебедев К.А. » Всем

13. И ЧТО ЖЕ МЫ ВИДИМ?


Вот весь алгоритм:

int
WhereToPut(const TToken & rToken)
{
    assert(rToken.GetType() < eTokenTypeCount);
    return g_TokenPlaces[rToken.GetType];
}


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];
}


В "чистом виде" (без кода обработки ошибок):

//Возьми тип токена из таблицы
return g_TokenPlaces[rToken.GetType()];

    и

//Получи из таблицы приоритетов так или так
return g_iPriorities[rToken1.GetType()][х] > g_iPriorities[rToken2.GetType()][x + 1];



Как видно, алгоритм прост, как два рельса ("возьми из таблицы" и "возьми из таблицы"). И, при всей этой простоте, теперь будет несложно развивать "калькулятор" сколько угодно.


Любую новую сущность, которую надо будет поддержать, мы, вовсе не трогая алгоритма (сейчас и никогда), просто

  • регистрируем во внешнем "справочнике" TTokenType ("тип токена"), а также
  • заносим "место", куда следует поместить токен, во внешний справочник g_TokenPlaces[] ("места токенов") и
  • задаём приоритеты токена во внешней таблице правил для функции Pop_N_Break  

А идеальная функция, похоже, выглядит так: "Получи что приказано, откуда укажут".


Далее...

Уважаемые Коллеги!

Если Вам нравится наш Форум, Вы можете поддержать его, отправив любую сумму (тогда выберите опцию "Спасибо за Форум").

Вы также можете поддержать конкретное обсуждение и получить гарантированный ответ от наших специалистов (тогда выберите опцию "Прошу эксперта ответить в этой теме").
Задайте Ваш вопрос здесь.

Большое Спасибо!


Яндекс.Метрика