- Фантастика и фэнтези
- Ироническое фэнтези
- Стимпанк
- Детективная фантастика
- Киберпанк
- Попаданцы
- LitRPG
- Космоопера
- Технофэнтези
- Городская фантастика
- Русское фэнтези
- Юмористическая фантастика
- Космическая фантастика
- Боевое фэнтези
- Эпическая фантастика
- Зарубежная фантастика
- Книги магов
- Мистика
- Разная фантастика
- Разное фэнтези
- Любовное фэнтези
- Романтическая фантастика
- Городское фентези
- Историческая фантастика
- Историческое фэнтези
- Социально-философская фантастика
- Сказочная фантастика
- Иностранное фэнтези
- Романтическое фэнтези
- Ироническая фантастика
- Ужасы и Мистика
- Постапокалипсис
- Героическая фантастика
- Фэнтези
- Научная Фантастика
- Социально-психологическая
- Альтернативная история
- Боевая фантастика
- Разная литература
- Пословицы, поговорки
- Шахматы
- Визуальные искусства
- Фанфик
- Авто и ПДД
- Военное
- Отраслевые издания
- Гиды, путеводители
- Зарубежная образовательная литература
- Военная история
- Цитаты из афоризмов
- Современная литература
- Великолепные истории
- Начинающие авторы
- Современная зарубежная литература
- Боевые искусства
- Изобразительное искусство, фотография
- Кино
- Литература 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 (именно так у нас и получилось с этим разделом).