5.9 Выводы |
Предыдущая Содержание Следующая |
Мы реализовали таблицу символов на основе функции binary() для поиска и вставки в отсортированный массив, содержащий структуры со значениями "имя" и "маркер". Наследование позволило нам добавлять в таблицу другие структуры не изменяя функции для поиска и вставки. Элегантность такого подхода становится очевидной, если рассмотреть традиционное определение таблицы символов элементов для наших целей:
struct { const char * name; int token; union { /* на базе значения маркера */ double value; double (* funct) (double); } u; };
Для ключевых слов union не требуется. Функции, определяемые пользователем, потребовали бы гораздо более сложного описания, а получение ссылок на части union является громоздкой операцией. Наследование позволяет применить функциональные возможности таблицы символов к новым записям совершенно без изменения существующего кода. Динамическая компоновка помогает сохранить простоту реализации множеством способов: таблицы символов элементов для констант, переменных и функций могут быть связаны в дерево выражения без опасения, что они будут удалены по неосторожности; функция исполнения имеет дело только со своей компоновкой узлов.
|
Предыдущая Содержание Следующая |