- Любовные романы
- Фантастика и фэнтези
- Ненаучная фантастика
- Ироническое фэнтези
- Научная Фантастика
- Фэнтези
- Ужасы и Мистика
- Боевая фантастика
- Альтернативная история
- Космическая фантастика
- Попаданцы
- Юмористическая фантастика
- Героическая фантастика
- Детективная фантастика
- Социально-психологическая
- Боевое фэнтези
- Русское фэнтези
- Киберпанк
- Романтическая фантастика
- Городская фантастика
- Технофэнтези
- Мистика
- Разная фантастика
- Иностранное фэнтези
- Историческое фэнтези
- LitRPG
- Эпическая фантастика
- Зарубежная фантастика
- Городское фентези
- Космоопера
- Разное фэнтези
- Книги магов
- Любовное фэнтези
- Постапокалипсис
- Бизнес
- Историческая фантастика
- Социально-философская фантастика
- Сказочная фантастика
- Стимпанк
- Романтическое фэнтези
- Ироническая фантастика
- Детективы и Триллеры
- Проза
- Юмор
- Феерия
- Новелла
- Русская классическая проза
- Современная проза
- Повести
- Контркультура
- Русская современная проза
- Историческая проза
- Проза
- Классическая проза
- Советская классическая проза
- О войне
- Зарубежная современная проза
- Рассказы
- Зарубежная классика
- Очерки
- Антисоветская литература
- Магический реализм
- Разное
- Сентиментальная проза
- Афоризмы
- Эссе
- Эпистолярная проза
- Семейный роман/Семейная сага
- Поэзия, Драматургия
- Приключения
- Детская литература
- Загадки
- Книга-игра
- Детская проза
- Детские приключения
- Сказка
- Прочая детская литература
- Детская фантастика
- Детские стихи
- Детская образовательная литература
- Детские остросюжетные
- Учебная литература
- Зарубежные детские книги
- Детский фольклор
- Буквари
- Книги для подростков
- Школьные учебники
- Внеклассное чтение
- Книги для дошкольников
- Детская познавательная и развивающая литература
- Детские детективы
- Домоводство, Дом и семья
- Юмор
- Документальные книги
- Бизнес
- Работа с клиентами
- Тайм-менеджмент
- Кадровый менеджмент
- Экономика
- Менеджмент и кадры
- Управление, подбор персонала
- О бизнесе популярно
- Интернет-бизнес
- Личные финансы
- Делопроизводство, офис
- Маркетинг, PR, реклама
- Поиск работы
- Бизнес
- Банковское дело
- Малый бизнес
- Ценные бумаги и инвестиции
- Краткое содержание
- Бухучет и аудит
- Ораторское искусство / риторика
- Корпоративная культура, бизнес
- Финансы
- Государственное и муниципальное управление
- Менеджмент
- Зарубежная деловая литература
- Продажи
- Переговоры
- Личная эффективность
- Торговля
- Научные и научно-популярные книги
- Биофизика
- География
- Экология
- Биохимия
- Рефераты
- Культурология
- Техническая литература
- История
- Психология
- Медицина
- Прочая научная литература
- Юриспруденция
- Биология
- Политика
- Литературоведение
- Религиоведение
- Научпоп
- Психология, личное
- Математика
- Психотерапия
- Социология
- Воспитание детей, педагогика
- Языкознание
- Беременность, ожидание детей
- Транспорт, военная техника
- Детская психология
- Науки: разное
- Педагогика
- Зарубежная психология
- Иностранные языки
- Филология
- Радиотехника
- Деловая литература
- Физика
- Альтернативная медицина
- Химия
- Государство и право
- Обществознание
- Образовательная литература
- Учебники
- Зоология
- Архитектура
- Науки о космосе
- Ботаника
- Астрология
- Ветеринария
- История Европы
- География
- Зарубежная публицистика
- О животных
- Шпаргалки
- Разная литература
- Зарубежная литература о культуре и искусстве
- Пословицы, поговорки
- Боевые искусства
- Прочее
- Периодические издания
- Фанфик
- Военное
- Цитаты из афоризмов
- Гиды, путеводители
- Литература 19 века
- Зарубежная образовательная литература
- Военная история
- Кино
- Современная литература
- Военная техника, оружие
- Культура и искусство
- Музыка, музыканты
- Газеты и журналы
- Современная зарубежная литература
- Визуальные искусства
- Отраслевые издания
- Шахматы
- Недвижимость
- Великолепные истории
- Музыка, танцы
- Авто и ПДД
- Изобразительное искусство, фотография
- Истории из жизни
- Готические новеллы
- Начинающие авторы
- Спецслужбы
- Подростковая литература
- Зарубежная прикладная литература
- Религия и духовность
- Старинная литература
- Справочная литература
- Компьютеры и Интернет
- Блог
UNIX — универсальная среда программирования - Брайан Керниган
Шрифт:
Интервал:
Закладка:
Вначале появилась eqn. Это было первое применение yacc не для целей программирования[18]. Программа tbl, разработанная позднее, аналогична eqn, хотя и имеет независимый синтаксис; tbl не использует yacc, так как ее грамматика достаточно проста.
Средства программных каналов UNIX предполагают строгое разделение на отдельные программы. Кроме разбиения на части (что так или иначе необходимо, поскольку troff уже достигла максимального размера для PDP-11), программные каналы сужают круг взаимодействия между частями программы и между разрабатывающими их программистами. Последнее особенно важно: чтобы сделать препроцессор, не нужно "залезать" в исходную программу. Далее программные каналы позволяют не создавать большие промежуточные файлы при условии, что компоненты намеренно запускаются отдельно с целью отладки.
Однако организация взаимодействия программ через конвейеры связана с некоторыми проблемами. Отчасти снижается быстродействие, поскольку увеличивается объем ввода и вывода: обычно и eqn, и tbl дают расширение выходного потока по отношению к входному в отношении 8:1. Еще более существенно, что информация идет только в одном направлении. Например, нет способа определения текущего размера шрифта, что создаст неудобства в пользовании языком. И, наконец, трудно обеспечить сообщения об ошибках, так как иногда трудно связать диагностику из troff с eqn и tbl. Тем не менее преимущества разделения значительно перекрывают недостатки, поэтому было написано несколько препроцессоров, основанных на этой модели.
ТаблицыОбсудим кратко работу tbl и прежде всего таблицу операций по документации к hoc. tbl читает свои входные файлы или стандартный входной поток и преобразует текст между командами .TS (начало таблицы) и .ТЕ (конец таблицы) в команды troff, печатающие таблицу, выравнивающие столбцы и обеспечивающие все типографские атрибуты. Строки .TS и .ТЕ тоже копируются, поэтому пакет макроопределений выдает для них подходящие определения с тем, например, чтобы можно было помещать таблицу на одной странице и отделять ее от окружающего текста.
При формировании сложных таблиц вам, конечно, придется обращаться к справочному руководству по tbl. Хотя для уяснения основных принципов работы вполне достаточно приведенного ниже примера (из документации по hoc).
.TS
center, box;
с s
lfCW 1
fВТаблица 1:fP Операции по порядку уменьшения приоритета
.sp.5
^ возведение в степень (s-1FORTRANs0 **) правоассоциативна
!- одноместные логическое и арифметическое отрицания
* / умножение, деление
+- сложение, вычитание
> >= операции отношения: больше, больше или равно < <= меньше, меньше или равно
&== != равно, не равно (все отношения одинакового приоритета)
&& логическое И (оба операнда всегда вычисляются)
|| логическое ИЛИ (оба операнда всегда вычисляются)
&= присваивание, правоассоциативна
.ТЕ
В результате мы получаем следующую таблицу:
Таблица 1: Операции по порядку уменьшения приоритета ^ возведение в степень (FORTRAN **) правоассоциативна ! - одноместные логическое и арифметическое отрицания * / умножение, деление + - сложение, вычитание > >= операции отношения: больше, больше или равно < <= меньше, меньше или равно == != равно, не равно (все отношения одинакового приоритета) && логическое И (оба операнда всегда вычисляются) !! логическое ИЛИ (оба операнда всегда вычисляются) = присваивание, правоассоциативнаСлова перед точкой с запятой описывают глобальные свойства таблицы: центрировать по горизонтали на странице и заключить в рамку. Другие средства включают doublebox (сделать двойную рамку), allbox (включить каждый элемент в рамку) и expand (расширить таблицу на формат страницы).
Следующие строки до точки описывают формат различных секций таблицы. Первая спецификация служит для первой строки таблицы, вторая для второй, последняя для всех остальных строк. В табл. 1 вы видите только две строки спецификаций, поэтому вторая спецификация применяется к каждой строке таблицы посте первой. Символы формата для элементов центрированных в столбце, с, r и l для правого и левого выравнивания и n — для выравнивания чисел по десятичной точке. Символ S определяет столбец с промежутком; в нашем случае 'c s' означает центровку названия над всей таблицей путем задания размера второго столбца так же, как и первого. Для столбца можно определить шрифт. Спецификация tbl lfCW позволяет печатать выравненный по левому краю столбец шрифтом CW.
Текст таблицы следует за информацией для форматирования. Символы табуляции разделяют столбцы и некоторые команды troff, например .sp, которые уместны внутри таблиц. (Отметим пару вхождений &: незащищенный передний символ - и знак = в столбцах указывают tbl на необходимость располагать строки таблицы в этой точке.)
Программа tbl строит более широкий набор таблиц, чем показано в примере: текст может помещаться в рамки, могут вертикально выравниваться заголовки столбцов и т.д. Самый легкий способ использовать tbl для создания сложных таблиц обратиться к справочному руководству по UNIX (том 2A) и применить перечисленные в нем команды.
Математические выраженияВторой препроцессор eqn превращает язык, описывающий математические выражения, в команды troff, чтобы эти выражения печатать. Препроцессор автоматически обрабатывает смены шрифта и формата и, кроме того, предоставляет имена для стандартных математических символов. Входной текст для eqn обычно находится между строками .EQ и .EN, аналогично командам tbl .TS и .ТЕ. Например,
.EQ
x sub i
.EN
выдаёт xi. Если используется пакет ms, уравнение печатается как "отображение", а возможный аргумент .EQ определяет номер уравнения. Например, формула интеграла Коши
записывается как
.EQ (9.1)
f( zeta ) ~=~ 1 over {2 pi i} int from С
f(z) over {z - zeta} dz
.EN
В основу языка eqn и положен способ чтения вслух математических формул. Единственное различие между "разговорной" математикой и входным текстом eqn состоит в том, что скобки { } отменяют заданные по умолчанию правила предшествования языка, однако обычные скобки специального смысла не имеют. Пробелы тем не менее важны. Заметим, что первое вхождение zeta в примере, приведенном выше, окружено пробелами: ключевые слова, такие, как zeta и over, распознаются только тогда, когда они окружены пробелами или скобками, но ни те, ни другие в выходной текст не попадают. Чтобы обеспечить пробелы в выходном потоке, используйте символ ~, как показано в примере (~=~). Для получения скобок используйте "{" и "}".
Существует несколько классов ключевых слов eqn. Греческие буквы записываются прописными и строчными: lambda и LAMBDA (λ и Λ). Другие математические символы имеют имена, такие как sum, int, infty, grad: Σ, ∫, ∞, ∇. Есть знаки позиции, например sub, sup, from, to, and, over:
Эта формула выводится так:
sum from i=0 to infinity x sub i sup 2~→~1 over {2pi}
Существуют знаки операций типа sqrt, расширяющие скобки, фигурные скобки и т.д. Программа eqn, кроме того, позволяет создавать из объектов столбцы и матрицы. Предусмотрены команды для управления шрифтами и позициями, если те, которые установлены по умолчанию, не подходят.
Часто приходится помещать небольшие математические выражения, такие, как log10(x), в тело текста, а не в отображение. Ключевое слово eqn delim определяет пару символов для выделения подобных выстроенных выражений. Символы, задаваемые в качестве левого и правого ограничителей, обычно одинаковы: часто применяется знак доллара $. Но поскольку hoc использует $ для аргументов, в нашем примере мы употребили @. Символ % тоже удобен как ограничитель, но других символов избегайте: многие из них имеют специальные назначения в различных программах, поэтому вы можете спровоцировать непредсказуемое поведение eqn (именно так у нас и получилось с этим разделом).

