5.10 Упражнения |
Предыдущая Содержание Следующая |
Для реализации всего, подобного циклам while или repeat, операторов if и так далее, необходимы новые ключевые слова. Распознавание выполняется в stmt(), но это по большей части только проблема построения компилятора, а не наследования. После определения типа операции, мы будем создавать типы узлов, подобные While, Repeat, или IfElse, а ключевым словам в таблице символов нет необходимости знать об их существовании. Немного более интересными являются функции с двумя аргументами, подобные atan2() математической библиотеки ANSI-C. С точки зрения таблицы символов, такие функции обрабатываются подобно простым функциям, но и для дерева выражений нам надо изобрести новый тип узла с тремя потомками. Пользовательские функции представляют собой очень интересную задачу. Это не так уж сложно, если мы представляем один параметр как $ и используем тип узла Parm чтобы указать обратно на функцию записи в таблице символов, где можно временно хранить значение аргумента до тех пор, пока мы не разрешим рекурсию. Функции с именованными параметрами и несколькими параметрами, конечно, более трудны. Тем не менее, это хорошее упражнение для исследования преимуществ наследования и динамической компоновки. Мы вернемся к этой проблеме в главе 11. |
Предыдущая Содержание Следующая |