5.9 Выводы

Предыдущая  Содержание  Следующая V*D*V

Мы реализовали таблицу символов на основе функции binary() для поиска и вставки в отсортированный массив, содержащий структуры со значениями "имя" и "маркер". Наследование позволило нам добавлять в таблицу другие структуры не изменяя функции для поиска и вставки. Элегантность такого подхода становится очевидной, если рассмотреть традиционное определение таблицы символов элементов для наших целей:

 

struct {

    const char * name;

    int token;

    union {                    /* на базе значения маркера */

        double value;

        double (* funct) (double);

    } u;

};

 

Для ключевых слов union не требуется. Функции, определяемые пользователем, потребовали бы гораздо более сложного описания, а получение ссылок на части union является громоздкой операцией.

Наследование позволяет применить функциональные возможности таблицы символов к новым записям совершенно без изменения существующего кода. Динамическая компоновка помогает сохранить простоту реализации множеством способов: таблицы символов элементов для констант, переменных и функций могут быть связаны в дерево выражения без опасения, что они будут удалены по неосторожности; функция исполнения имеет дело только со своей компоновкой узлов.

 

Предыдущая  Содержание  Следующая