Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Непейвода Н.Н. -> "Основания программирования " -> 269

Основания программирования - Непейвода Н.Н.

Непейвода Н.Н., Скопин И.Н. Основания программирования — Институт компьютерных исследований , 2002. — 919 c.
Скачать (прямая ссылка): osnovanprogramm2002.pdf
Предыдущая << 1 .. 263 264 265 266 267 268 < 269 > 270 271 272 273 274 275 .. 316 >> Следующая

Заметим, что в некотором смысле любой токен является переменной, поскольку определение его в любой момент может быть заменено. Но для то-кенов имеется и явная операция присваивания: \let\this=\that
При этой операции токен \this получает то же определение, которое имеет токен \that в момент исполнения присваивания.
Иерархичность доведена в языке TgX до логического конца. Локальны и определения, и присваивания. После конца группы, вообще говоря, отменяются все сделанные в ней определения и присваивания. Так что внутри групп мо но изменять значения переменных, не беспокоясь о том, как это скажется на глобальном контексте.
Проблемы конфликта определений в TgX вообще нет. Если дано новое определение того е токена, то оно просто заменяет старое, и действует последнее из определений, которое встретилось в данной группе или в ее объемлющих. Более того, отсутствие определения для токена является семанти-
772
13.
ческой, а не синтаксической оибкой. но проверяется лиь в момент, когда токен оказывается в позиции имени макроса. Оно может быть проверено с помощью оператора \ifundefined \this ... \fi
Конечно е, предоставлены все возмо ности для (применяя собственное выра ение . Кнута) ' грязнх трков'. В частности, лбое определение либо присваивание мо ет быть сделано глобальным (оно будет воздействовать на экземпляр токена в самой внешней группе и отменит все более локальные определения и присваивания), просто путем постановки перед ним \global.
Как и полагается по функциональной семантике, в момент обработки определения текст подстановки не раскрвается. о имеется возмо ность динамически раскрыть определение в тот момент, когда оно встретилось, и произвести все возможные вызовы макросов внутри подставляемого текста заранее. Для этого достаточно воспользоваться оператором \edef вместо \def. Соответственно, есть и возмо ность при таком действии заитить некоторые токены от преждевременного раскрытия. Для этого служит команда \noexpand, которая при раскрытии исчезает, но запреает раскрывать следуий за ней токен.
Еще одна спецификация такова, что к грязным трюкам ее не отнесешь, скорее стоит по алеть об отсутствии такой возмо ности в ' развитых' яз -ках. Специфицировав определение как \outer, мы требуем тем самм трактовать как оибку взов данной команд в операнде другой команд или в альтернативе условного оператора. Именно такой статус имеют команды рубрикации.
, наконец, для л дей с хакерскими наклонностями есть целый набор тонких возмо ностей изменять порядок раскрытия определений.
• \expandafter сначала оставляет данный токен нераскрытым, раскрывает следуий за ним, ставит перед получивимся выра ением запомненный токен и возвраается к его раскрти .
• \futurelet раскрывает следуий за присваиванием токен и у е после этого производит присваивание.
• \afterassignment запоминает данный токен и возвращает его в текст после того, как будет вполнено какое-нибудь присваивание. Если это присваивание боксовой переменной, то токен будет помеен в начало запомненного бокса.
• \aftergroup запоминает данный токен и возвраает его в текст после того, как завершится текущая группа.
13.3. ЯЗЫКИ РАЗМЕТКИ
773
Теперь несколько слов о наиболее популярном формате E)TeX. Эта надстройка приблизила структуру ТтчХовского текста к структуре языков высокого уровня. ETeX формально запретил ряд низкоуровневых команд системы TeX, ввел новые конструкции высокого уровня (в частности, команды №ьєі{ИМЯ} и \гє^ИМЯ} для автоматизации перекрестных ссылок). Он, хотя и не запретил формально команду \def, но ограничил ее применение внутренними потребностями самой системы T)TeX и создаваемых пакетов.
Вместо нее предоставлена система определений более высокого уровня, в которх обраение к новм командам стандартизовано, и производится в момент их определения проверка конфликта описаний. Эти команд следующие.
• \newcommand дает ошибку, если такая команда уже есть в системе.
• \renewcommand наоборот, дает ошибку, если такой команды не было. Эта команда используется в основном для локального переопределения параметров.
• \providecommand ошибки не дает. Она проверяет, есть ли такая команда. Если она у е есть, Вае определение игнорируется, если ее нет, оно принимается.
акрогенерация, вообе говоря, вкл чает возмо ность переопределения базовых символов, но это мало где реализовано. TeX является приятным исключением. Роли особых символов, указанные в самом начале, также могут быть в любой момент переопределены, и эти переопределения также локальны. Этим, в частности, воспользовалась система ETeX для создания имен команд, недоступных внутри текста, обрабатываемого системой. Символ @ рассматривался в исходном ТЕХе как буква. В ядре формата E)TeX определены, в частности, следующие две команды. \makeatletter исполняется внутри тел подстановки команд и разрешает использование имен команд, содержащих @, \makeatother исполняется перед началом основного форматируемого текста и закрвает от пользователя такие команд .
В целом TeX сделал большой шаг по пути избавления языка от проклятия конкретного синтаксиса: за счет систем макрогенерации, собравей практически все известные хорошие черты продвинутых макропроцессоров, можно кардинально менять облик конкретного формата языка.
Предыдущая << 1 .. 263 264 265 266 267 268 < 269 > 270 271 272 273 274 275 .. 316 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100