6 книг по компиляторам


Оглавление (нажмите, чтобы открыть):

Ахо, Ульман, «Компиляторы. Принципы, технологии, инструментарий»

Со времен выхода первого издания этой книги в 1986 году в мире компиляторов произошло немало изменений.

Во втором издании книги Вы найдете не только базовый курс по разработке компиляторов, но и много ценной информации, касающейся оптимизации кода.

В книге изложены такие основополагающие темы, как:

  • Основные принципы языков программирования
  • Лексический и синтаксический анализ
  • Генерация промежуточного кода
  • Управление стеком и сборка мусора
  • Методы оптимизации кода
  • Межпроцедурный анализ
  • И многое другое

Материал книги прежде всего предназначен студентам и преподавателям, а также всем тем, кого не на шутку интересуют методы разработки компиляторов.

Год издания: 2008

Скачано: 21370 раз

Комментарии

Егор, 15.10.2010 11:43

Очень инетересная книга. Написана суховатым академическим языком, из-за этого местами приходится «продираться» сквозь материал. Рекомендую познакомиться с книгой всем, кто интересуется компиляторами, языками или системным программированием.

Имярек, 24.10.2011 06:55

mustread книжка, как и кнут, как и sicp. Сухая и тяжёлая, но даёт развёрнутое представление о предмете.

Max, 29.05.2012 17:18

Грамотная книжка для написания своего компилятора.

Виктор, 09.08.2013 20:22

«Книга Дракона-2» (Dragon Book-2): «Компиляторы: принципы, технологии и инструменты», 2-е издание, Альфред В. Ахо, Моника С. Лам, Рави Сети, Джеффри Д. Ульман, бумага офсетная-белая, твердый переплет, 1184 стр., ISBN 978-5-8459-1349-4, «ВИЛЬЯМС», 2011 — ЧИТАЙТЕ ЗДЕСЬ: http://shtonda.blogspot.com/2007/11/2-2008.html

Кирилл, 05.11.2020 05:00

Куплю эту книгу в бумажном варианте, английскую версию без перевода. id61847140

vvvzn78, 29.11.2020 02:34

Эта книжка для чтения: читаешь и мечтаешь; скан хороший с OCR. Читается легко, есть простые, внятные иллюстрации.

Компиляторы: принципы, технологии и инструментарий

Скачать книгу

О книге «Компиляторы: принципы, технологии и инструментарий»

Это новое издание классической «книги Дракона» полностью переработано и включает последние разработки в области компиляции. Книга предлагает читателю подробное введение в разработку компиляторов, после чего сосредоточивает внимание на применении методов компиляции для решения широкого круга задач проектирования и разработки программного обеспечения. Первая половина книги написана таким образом, чтобы ее можно было использовать в качестве учебника для начинающих, посвященного компиляторам, а вторая может использоваться как пособие по оптимизации кода для студентов старших курсов.

Произведение было опубликовано в 2007 году издательством Диалектика-Вильямс. На нашем сайте можно скачать книгу «Компиляторы: принципы, технологии и инструментарий» в формате fb2, rtf, epub, pdf, txt или читать онлайн. Здесь так же можно перед прочтением обратиться к отзывам читателей, уже знакомых с книгой, и узнать их мнение. В интернет-магазине нашего партнера вы можете купить и прочитать книгу в бумажном варианте.

Компиляторы. Принципы, технологии, инструменты

Автор Ахо А.
Издательство Вильямс, 2-е издание
Год 2008
Формат DJVU

Эта книга начинается с изложения основных принципов разработки компиляторов, включая детальное рассмотрение лексического и синтаксического анализа и генерации кода. Особенностью данного издания является широкое освещение вопросов оптимизации кода, в том числе для работы в многопроцессорных системах.

Строгость изложения материала смягчается большим количеством практических примеров. Написание компиляторов охватывает такие области знаний, как языки программирования, архитектура вычислительных систем, теория языков, алгоритмы и технология создания программного обеспечения. Помочь в освоении этих технологий и соответствующего инструментария и призвана данная книга.

Предназначена для студентов и преподавателей соответствующих специальностей — книга будет полезна всем, кто работает над созданием компиляторов или просто интересуется данной темой.

20 самых рекомендуемых книг для программистов на русском языке

Авторы проекта Dev-Books проанализировали миллионы вопросов и ответов в крупнейшем сообществе программистов Stack Overflow. Всё для того, чтобы найти книги, на которые чаще всего ссылаются разработчики.

В общий список вошло 5 720 книг. Ниже вы найдёте 20 самых упоминаемых из них, которые когда-либо выходили на русском.

По просьбе Лайфхакера своими мнениями насчёт некоторых изданий поделились отечественные эксперты.

1. «Эффективная работа с унаследованным кодом», Майкл К. Физерс

Автор объясняет, как быстро разбираться в унаследованном коде, как тестировать его, как правильно вносить изменения. Книга содержит множество эффективных приёмов, предназначенных специально для этих задач.

2. «Приёмы объектно-ориентированного проектирования. Паттерны проектирования», Эрих Гамма и другие

Классика для программиста. Первая книга, посвящённая именно шаблонам.

Леонид Выговский, системный архитектор IT-компании LiveTex

— Издание уже 20 лет переиздаётся в изначальном виде. В этом, конечно, главный недостаток книги: некоторые шаблоны уже неактуальны. Думаю, её полезно читать уже после других, более современных, книг по паттернам проектирования. Тем более что она написана сухим академическим языком. Для понимания паттернов эта книга не must read, но её прочтение добавляет крутости в глазах коллег-программистов. 🙂 Начинать я советую с «Паттернов проектирования» (Head First Design Patterns).

3. «Чистый код. Создание, анализ и рефакторинг», Роберт К. Мартин

Интересная, но во многом спорная книга о том, как писать понятный и поддерживаемый код.

Леонид Выговский, системный архитектор IT-компании LiveTex

— Почему спорная? Книг про написание кода уже огромное количество, и часть приёмов являются общепризнанными. Но каждый автор добавляет что-то своё. Лично для меня мнение Боба Мартина кажется иногда странным и противоречащим другим источникам. Не must read, но прочитать всё же стоит. Качество кода после прочтения становится лучше.

4. «Предметно-ориентированное проектирование», Эрик Эванс

Очень сильная книга, которая мотивирует к саморазвитию. После прочтения кажется, что без ПОП качественный код не написать.

Леонид Выговский, системный архитектор IT-компании LiveTex


— Из этой книги выросли концепции СQRS, BDD, onion-architecture и много других интересных идей. Единственный недостаток: книга насквозь теоретическая. Практическую пользу она приобрела только с выходом книги Вона Вернона «Реализация методов предметно-ориентированного проектирования» (Implementing Domain Driven Design). Поэтому читать их надо последовательно, сразу друг за другом.

5. «JavaScript: сильные стороны», Дуглас Крокфорд

Обязательная книга для веб-разработчиков. В ней Дуглас Крокфорд рассказывает о преимуществах языка JavaScript и учит грамотно их применять для создания эффективного кода.

6. «Шаблоны корпоративных приложений», Мартин Фаулер и другие

Книга описывает базовые принципы проектирования ПО для корпоративных платформ.

7. «Совершенный код. Мастер-класс», Стив Макконнелл

Классическая книга о том, как писать код лучше.

Михаил Осотов, директор по производству «Центра высоких технологий»

— Принципы, о которых рассказывается в книге, актуальны в любые времена, несмотря на то, что первое издание было выпущено аж в 1993 году. Волшебство этой книги заключается в том, что можно перечитывать её каждый год и каждый раз узнавать что-то новое.

8. «Рефакторинг. Улучшение существующего кода», Мартин Фаулер и другие

Из серии книг по написанию понятного и качественного кода, «Рефакторинг» — лучшая.

Леонид Выговский, системный архитектор IT-компании LiveTex

Выговский: «Она не только показывает хороший код, но и на примере плохого объясняет, чем именно он плох. Эта книга — must read для всех. Причём чем раньше вы её прочтёте, тем лучше. Качество кода после прочтения сильно вырастет».

Если книгу Фаулера вы уже прочли, обратите внимание на «Рефакторинг с использованием шаблонов» (Refactoring to Patterns) Джошуа Кериевски, которую рекомендует Михаил Осотов.

«Рефакторинг с использованием шаблонов» Кериевски — отличная книга для тех, кто каждый день сталкивается с проблемой легаси-кода и технического долга в своих проектах.

Михаил Осотов, директор по производству «Центра высоких технологий»

— Эта книга поможет сохранить свои нервы, подружиться с рефакторингом и сделать код лучше.

9. «Паттерны проектирования», Эрик Фримен, Элизабет Фримен и другие

Серия Head First, на мой взгляд, идеально подходит для новичков в области разработки ПО.

Михаил Осотов, директор по производству «Центра высоких технологий»

— Все книги написаны разными авторами, но в каждой виден общий подход, который выражается в простой подаче материала, интересных и простых примерах.

10. «Язык программирования C», Брайан У. Керниган, Деннис М. Ритчи

Классическое учебное пособие по языку C, написанное его же создателями. Однако начинающим эта книга может показаться сложной, поскольку требует от читателя знания основ программирования.

11. «Эффективное использование С++. 55 верных способов улучшить структуру и код ваших программ», Скотт Майерс

Книга содержит советы по проектированию программ, работе с шаблонами и управлению ресурсами, а также другие рекомендации по созданию качественного ПО на языке С++.

12. «Экстремальное программирование: разработка через тестирование», Кент Бек

Автор на примерах описывает методику разработки ПО, которая предполагает тестирование программ ещё до написания их кода.

13. «Алгоритмы. Построение и анализ», Томас Х. Кормен и другие

Эту книгу называют библией алгоритмов. Она зарекомендовала себя как отличное научное пособие для студентов технических вузов и всех, кто интересуется информатикой. Книга доступным языком знакомит с алгоритмами разных типов и описывает их особенности.

14. «Регулярные выражения», Джеффри Фридл

Издание об эффективной работе с текстом в Perl, PHP, Java, Python, Ruby и других языках программирования.

15. «CLR via C#. Программирование на платформе Microsoft.NET Framework 4.5 на языке C#», Джеффри Рихтер

Классический учебник по разработке приложений для платформы Microsoft, в том числе с помощью Silverlight, Windows Presentation Foundation, ASP.NET и прочих технологий компании.

16. «Современное проектирование на C++», Андрей Александреску

Книга для опытных программистов на C++. Автор предлагает новый подход к разработке, сочетающий метапрограммирование шаблонов, обобщённое программирование и объектно-ориентированное программирование на этом языке.

17. «Microsoft ASP.NET 2.0. Базовый курс», Дино Эспозито

Детальное руководство для опытных специалистов по ASP.NET 2.0. Книга учит создавать мощные, надёжные и масштабируемые сайты на этой платформе.

18. «Шаблоны тестирования xUnit. Рефакторинг кода тестов», Джерард Месарош

Автор книги показывает, как применять шаблоны проектирования, исключение повторений, инкапсуляцию и другие принципы разработки ПО к написанию кода тестов.

Мастер Йода рекомендует:  Долгожители в сфере IT самая старая из действующих программ и другие ветераны вычислительного труда

19. «Компиляторы. Принципы, технологии и инструментарий», Альфред В. Ахо и другие

Книга описывает базовые принципы разработки компиляторов и делает особый акцент на оптимизации кода. В помощь читателю — большое количество примеров из практики.

20. «Инфраструктура программных проектов. Соглашения, идиомы и шаблоны для многократно используемых библиотек .NET», Кржиштоф Цвалина, Брэд Абрамс

Издание содержит лучшие приёмы разработки библиотек для платформы Microsoft .NET Framework. Книга должна упростить работу любого .NET-специалиста, который пишет код для других разработчиков.

Полный рейтинг англоязычных книг доступен на сайте Dev-Books. Там же можно просмотреть списки самых популярных книг на определённые темы, будь то Java, Database Design или CSS.

Ахо, Ульман, Лам: Компиляторы. Принципы, технологии и инструментарий

Compilers: Principles, Techniques, and Tools

Мы пришлем письмо о полученном бонусе, как только кто-то воспользуется вашей подборкой. Проверить баланс всегда можно в «Личном пространстве»

Мы пришлем письмо о полученном бонусе, как только кто-то воспользуется вашей ссылкой. Проверить баланс всегда можно в «Личном пространстве»

Аннотация к книге «Компиляторы. Принципы, технологии и инструментарий»


Каждый, кто интересовался разработкой компиляторов, не мог не слышать о знаменитой «Книге Дракона», классическом труде Ахо и Ульмана «Принципы разработки компиляторов». Развитие технологий компиляции привело к рождению очередного «дракона» — книги «Компиляторы. Принципы, технологии, инструментарий», — у которой теперь уже четыре автора, и каждый из них является высококлассным специалистом в данной области.
Книга, как и предыдущее издание, начинается с изложения основных принципов разработки компиляторов, включая детальное рассмотрение лексического и синтаксического анализа и генерации кода. Особенностью данного издания является широкое освещение вопросов оптимизации кода, в том числе для работы в многопроцессорных системах.
Строгость изложения материала смягчается большим количеством практических примеров. Написание компиляторов охватывает такие области знаний, как
языки программирования,
архитектура вычислительных систем,
теория языков,
алгоритмы и технология.

Каждый, кто интересовался разработкой компиляторов, не мог не слышать о знаменитой «Книге Дракона», классическом труде Ахо и Ульмана «Принципы разработки компиляторов». Развитие технологий компиляции привело к рождению очередного «дракона» — книги «Компиляторы. Принципы, технологии, инструментарий», — у которой теперь уже четыре автора, и каждый из них является высококлассным специалистом в данной области.
Книга, как и предыдущее издание, начинается с изложения основных принципов разработки компиляторов, включая детальное рассмотрение лексического и синтаксического анализа и генерации кода. Особенностью данного издания является широкое освещение вопросов оптимизации кода, в том числе для работы в многопроцессорных системах.
Строгость изложения материала смягчается большим количеством практических примеров. Написание компиляторов охватывает такие области знаний, как
языки программирования,
архитектура вычислительных систем,
теория языков,
алгоритмы и технология создания программного обеспечения.
Помочь в освоении этих технологий и соответствующего инструментария и призвана данная книга. Несмотря на ее учебную ориентацию — в первую очередь, она предназначена для студентов и преподавателей соответствующих специальностей — книга будет полезна всем, кто просто работает над созданием компиляторов.
2-е издание.

Компиляторы: принципы, технологии и инструменты

Альфред В. Ахо, Рави Сети, Джеффри Д. Ульман

Каждый, кто интересовался разработкой компиляторов, несомненно, слышал о знаменитой «Книге Дракона» — «Dragon Book», классическим трудом Ахо и Ульмана «Принципы разработки компиляторов». Бурное развитие технологий компиляции привело к рождению нового дракона — книги «Компиляторы: принципы, технологии, инструментарий» Альфреда Ахо, Рави Сети и Джеффри Ульмана.Новая книга начинается с изложения принципов создания компиляторов, проиллюстрированного разработкой прос тейшего однопроходного компилятора. Оставшаяся часть книги посвящена развитию базовых идей и более прогрессивным и современным технологиям, включая такие вопросы, как синтаксический анализ, проверку типов, генерацию и оптимизацию кода.Строгость изложения материала смягчается большим количеством практических примеров. Принципы и технологии написания компиляторов столь распространены, что идеи, которые вы найдете в этой книге, часто используются в области информационных технологий. Написание компиляторов ох ватывает языки программирования, архитектуру вычислительных систем, теорию языков, алгоритмы и технологию создания программного обеспечения. Помочь в освоении этих технологий и инструментария и призвана данная книга. Однако, несмотря на свою учебную ориентацию, книга будет полезна всем, кому приходится работать над созданием компиляторов или кто просто интересуется данной темой, — от начинающих программистов до профессионалов.

От редактора

Перед вами перевод известной книги знаменитых авторов, перу которых принадлежит ряд бестселлеров в области компьютерных наук, причем диапазон их плодотворной работы чрезвычайно широк — от фундаментальных научных статей до великолепных учебников для студентов. Именно таким учебником и является данная книга, которая доступна широкому кругу программистов и представляет собой завершенное изложение технологий построения компиляторов.

Многие работы этих авторов переведены на русский язык и неизменно пользуются повышенным спросом у серьезного читателя. Достаточно вспомнить такие книги, как Построение и анализ вычислительных алгоритмов [7], Структуры данных и алгоритмы [8] или Теория синтаксического анализа, перевода и компиляции [18V19].

Предлагаемая книга выгодно отличается от большинства своих предшественниц тем, что здесь охвачен весь процесс создания компилятора — от лексического анализа до генерации и оптимизации целевого кода. Использование абстрактных математических понятий доводится в ней до конкретных алгоритмов, пригодных для непосредственной реализации. Технологии, изложенные в этой книге, уже нашли свое применение не только в компиляции, но и в системах подготовки текстов, управления базами данных, генерации схем электронны х устройств и других областях.

Оригинал этой книги опубликован в 1988 году. С тех пор были созданы новые парадигмы программирования, десятки новых языков и компиляторов для них. Однако осмелимся утверждать, что в их реализации не было ничего принципиально нового по сравнению с тем, что изложено в этой книге. Данное издание может служить практическим руководством по технологиям создания компиляторов. Описанные в ней технологии были созданы в основном еще в 60-еV80-е годы и существенно уже не изменятся. Книга по праву может считаться классической, потому что она не устарела и не устареет, пока люди будут создавать языки и системы программирования.

Предисловие

Данное издание является развитием книги Альфреда Ахо и Джеффри Ульмана Principles of Computer Design. Подобно своей предшественнице, она задумана как начальный учебный курс по проектированию компиляторов. Основное внимание уделяется решению общих проблем, возникающих при создании трансляторов языков программирования, независимо от исходного языка или целевой машины.

Вероятно, лишь немногие из вас будут заниматься построением или поддержкой компиляторов для основных языков программирования, однако идеи и технологии, описанные в ней, можно с успехом применять при разработке другого программного обеспечения. Например, технологии поиска соответствия строк шаблонам, используемые при построении лексических анализаторов, применяются и в текстовых редакторах, и в системах выборки информации, и в распознавании образов. Контекстно-свободные грамматики и синтаксически управл яемые определения используются для создания многих небольших языков, например типографских систем для подготовки макетов книг. Технологии оптимизации кода применяются для проверки корректности программ и создания «структурированных» программ из неструктурированных.

Использование данной книги

В книге глубоко раскрыты основные аспекты создания компиляторов. Глава 1 описывает базовую структуру компилятора и представляет собой фундамент для остального материала книги.

В главе 2 рассматривается транслятор, переводящий инфиксные выражения в постфиксные. Он построен с использованием базовых технологий, описываемых в этой книге. В следующих главах развивается изложенный здесь материал.

Глава 3 посвящена лексическому анализу, регулярным выражениям, конечным автоматам и инструментарию для создания сканеров входного потока. Материал этой главы может быть широко использован при разработке текстовых редакторов.

Глава 4 пополняет наши знания о технологиях синтаксического анализа. Здесь рассматриваются как методы рекурсивного спуска, применяемые при ручной реализации трансляторов, так и более сложные и универсальные LR-технологии, используемые в генераторах синтаксических анализаторов.

Глава 5 знакомит нас с принципиальными идеями синтаксически управляемой трансляции. Материал этой главы используется в оставшейся части книги как для описания, так и реализации трансляторов.

В главе 6 выдвигаются основные идеи выполнения статической семантической проверки и детально рассматриваются вопросы проверки типов.

В главе 7 обсуждаются вопросы организации памяти для поддержки сред времени исполнения программ.

Глава 8 начинается с обсуждения языков промежуточного представления программ, а затем показывает нам, каким образом основные конструкции языка программирования могут транслироваться в промежуточный код.

Глава 9 посвящена генерации целевого кода, включая вопросы генерации кода «на лету» и оптимальные методы генерации кода для выражений. Здесь также рассмотрены локальная оптимизация и генераторы генераторов кода.

Глава 10 представляет исчерпывающую информацию об оптимизации кода. В ней детально изложены методы анализа потока данных, а также основные методы глобальной оптимизации.

В главе 11 обсуждается ряд практических вопросов, возникающих при реализации компиляторов, в частности важность вопросов разработки программного обеспечения и тестирования.

В главе 12 проведено исследование компиляторов, построенных с использованием представленных в книге технологий.

Приложение А описывает простой язык — «подмножество» Pascal, который может использоваться в качестве основы для реальных проектов.

На основе этой книги авторы преподавали как вводный, так и основной курсы для студентов и аспирантов AT&T Bell Laboratories, Колумбийского, Принстонского и Станфордского университетов.

Вводный курс, посвященный компиляторам, может основываться на материале следующих разделов книги.

Введение

Глава1 и разделы 2.1V2.5

Лексический анализ

2.6, 3.1V3.4

Таблицы символов

2.7, 7.6

Синтаксический анализ

2.4, 4.1V4.4

Синтаксически управляемая трансляция

2.5, 5.1V5.5

Проверка типов

6.1, 6.2

Организация времени исполнения

7.1V7.3

Генерация промежуточного кода

8.1V8.3

Генерация кода

9.1V9.4

Оптимизация кода

10.1, 10.2


Информация, необходимая для программного проекта, подобного приведенному в приложении А, имеется в главе 2.

Курс, посвященный инструментарию построения компиляторов, может включать обсуждение генераторов лексических анализаторов из раздела 3.5, генераторов синтаксических анализаторов из разделов 4.8 и 4.9, генераторов генераторов кода из раздела 9.12, а также материал о технологиях построения компиляторов из главы 11.

Основной курс может делать упор на алгоритмы, используемые в генераторах лексических и синтаксических анализаторов (главы 3 и 4); материал об эквивалентности типов, перегрузке, полиморфизме и унификации (глава 6), организации памяти времени исполнения (глава 7); методы генерации кода на основе шаблонов из главы 9; и материал об оптимизации кода из главы 10.

Упражнения

Как и ранее, сложность упражнений указана звездочками. Упражнения без звездочек проверяют понимание определений, упражнения с одной звездочкой относятся к более сложному курсу, а «двухзвездные» служат «пищей» для серьезных размышлений.

Благодарности

На различных этапах написания этой книги мы получили множество неоценимых комментариев и советов от большого числа специалистов. В связи с этим мы выражаем свою признательность Биллу Эппельбу (Bill Appelbe), Нельсону Бибу (Nelson Beebe), Джону Бентли (Jon Bentley), Луи Богесу (Lois Bogess), Родни Фэрроу (Rodney Farrow), Стью Фельдман (Stu Feldman), Чарльзу Фишеру (Charles Fischer), Крису Фрэзеру (Chris Fraser), Арту Життельману (Art Gittelman), Эрику Гроссе (Eric Grosse), Дэйву Хансону (Dave Hanson), Ф рицу Хенглайну (Fritz Henglein), Роберту Генри (Robert Henry), Жерару Хольцману (Gerard Holzmann), Стиву Джонсону (Steve Johnson), Брайену Кернигану (Brian Kernighan), Кену Кубота (Ken Kubota), Дэниэлу Леману (Daniel Lehmann), Дэйву Мак-Квину (Dave MacQueen), Дианне Маки (Dianne Maki), Алану Мартину (Alan Martin), Дугу Мак-Илрою (Doug McIlroy), Чарльзу Мак-Лафлину (Charles McLaughlin), Джону Митчеллу (John Mitchell), Эллиоту Органику (Elliot Organick), Роберту Пейджу (Robert Paige), Филу Пфайфферу (Phil P feiffer), Робу Пайку (Rob Pike), Кари-Йоко Ряйхя (Kari-Jouko Rдihд), Дэнису Ритчи (Dennis Ritchie), Срираму Санкару (Sriram Sankar), Полу Стокеру (Paul Stoecker), Бьерну Страуструпу (Bjarne Stroustrup), Тому Шимански (Tom Szymanski), Киму Трейси (Kim Tracy), Петеру Вайнбергеру (Peter Weinberger), Дженнифер Видом (Jennifer W >Оригинал этой книги создан с использованием великолепного программного обеспечения, доступного в UNIX. Команда типографского набора выглядела следующим образом.

Pic — это язык Брайена Кернигана (Brian Kernighan) для набора рисунков; мы особо признательны Брайену за успешное удовлетворение наших обширных потребностей в иллюстрациях. tbl — это язык Майка Леска (Mike Lesk), предназначенный для макетирования таблиц; eqn — язык Брайена Кернигана (Brian Kernighan) и Лоринды Черри (Lorinda Cherry) для печати математических формул; troff — программа Джо Оссана (Joe Ossana) для форматирования текста при фотонаборе (в нашем случае — д ля Mergenthaler Linotron 202/N). Пакет макросов ms разработан Майком Леском (Mike Lesk). И наконец, с текстом мы работали с помощью make Стью Фельдман (Stu Feldman); перекрестные ссылки в тексте обрабатывались посредством awk, созданного Альфредом Ахо (Alfred Aho), Брайеном Керниганом (Brian Kernighan) и Петером Вайнбергером (Peter Weinberger), и sed Ли Мак-Мэхона (Lee McMahon).

Мастер Йода рекомендует:  Защитой Firefoх занимается уволенная из Microsoft cотрудница в Интернет

Авторы должны отдельно поблагодарить Патрицию Соломон (Patricia Solomon) за помощь в подготовке книги для фотокомпозиции. Во время работы над книгой поддержку Джеффри Ульману (Jeffrey Ullman) оказало Эйнштейновское общество Академии искусств и науки Израиля. И наконец, авторы признательны AT&T Bell Laboratories за поддержку во время подготовки рукописи.

Компиляторы: принципы, технологии и инструменты

Альфред В. Ахо, Рави Сети, Джеффри Д. Ульман

Compilers: Principles, Techniques and Tools First Edition
Alfred Aho

Каждый, кто интересовался разработкой компиляторов, несомненно, слышал о знаменитой «Книге Дракона» — «Dragon Book», классическим трудом Ахо и Ульмана «Принципы разработки компиляторов». Бурное развитие технологий компиляции привело к рождению нового дракона — книги «Компиляторы: принципы, технологии, инструментарий» Альфреда Ахо, Рави Сети и Джеффри Ульмана.Новая книга начинается с изложения принципов создания компиляторов, проиллюстрированного разработкой простейшего однопроходного компилятора. Оставшаяся часть книги посвящена развитию базовых идей и более прогрессивным и современным технологиям, включая такие вопросы, как синтаксический анализ, проверку типов, генерацию и оптимизацию кода.Строгость изложения материала смягчается большим количеством практических примеров. Принципы и технологии написания компиляторов столь распространены, что идеи, которые вы найдете в этой книге, часто используются в области информационных технологий. Написание компиляторов охватывает языки программирования, архитектуру вычислительных систем, теорию языков, алгоритмы и технологию создания программного обеспечения. Помочь в освоении этих технологий и инструментария и призвана данная книга. Однако, несмотря на свою учебную ориентацию, книга будет полезна всем, кому приходится работать над созданием компиляторов или кто просто интересуется данной темой, — от начинающих программистов до профессионалов.

формат 70×100/16; 2001, 3 кв.; Вильямс.

Понравилась книга? Порекомендуйте её друзьям и коллегам:

ГЛАВА 1. Введение в компиляцию
ГЛАВА 2. Простой однопроходный компилятор
ГЛАВА 3. Лексический анализ
ГЛАВА 4. Синтаксический анализ
ГЛАВА 5. Синтаксически управляемая трансляция
ГЛАВА 6. Проверка типов
ГЛАВА 7. Среды времени исполнения
ГЛАВА 8. Генерация промежуточного кода
ГЛАВА 9. Генерация кода
ГЛАВА 10. Оптимизация кода
ГЛАВА 11. Создание компилятора
ГЛАВА 12. Некоторые компиляторы
ПРИЛОЖЕНИЕ A. Программный проект
ПРИЛОЖЕНИЕ Б. Спецификации языков программирования
БИБЛИОГРАФИЯ

Рекомендуемые книги Алгоритмы: построение и анализ, 3-е издание

Книга для всех
Цифровая фотография. Том 1

Блог Виктора Штонда Отвечает на вопросы
генеральный директор издательства

От редактора

Перед вами перевод известной книги знаменитых авторов, перу которых принадлежит ряд бестселлеров в области компьютерных наук, причем диапазон их плодотворной работы чрезвычайно широк — от фундаментальных научных статей до великолепных учебников для студентов. Именно таким учебником и является данная книга, которая доступна широкому кругу программистов и представляет собой завершенное изложение технологий построения компиляторов.

Многие работы этих авторов переведены на русский язык и неизменно пользуются повышенным спросом у серьезного читателя. Достаточно вспомнить такие книги, как Построение и анализ вычислительных алгоритмов [7], Структуры данных и алгоритмы [8] или Теория синтаксического анализа, перевода и компиляции [18–19].

Предлагаемая книга выгодно отличается от большинства своих предшественниц тем, что здесь охвачен весь процесс создания компилятора — от лексического анализа до генерации и оптимизации целевого кода. Использование абстрактных математических понятий доводится в ней до конкретных алгоритмов, пригодных для непосредственной реализации. Технологии, изложенные в этой книге, уже нашли свое применение не только в компиляции, но и в системах подготовки текстов, управления базами данных, генерации схем электронных устройств и других областях.

Оригинал этой книги опубликован в 1988 году. С тех пор были созданы новые парадигмы программирования, десятки новых языков и компиляторов для них. Однако осмелимся утверждать, что в их реализации не было ничего принципиально нового по сравнению с тем, что изложено в этой книге. Данное издание может служить практическим руководством по технологиям создания компиляторов. Описанные в ней технологии были созданы в основном еще в 60-е–80-е годы и существенно уже не изменятся. Книга по праву может считаться классической, потому что она не устарела и не устареет, пока люди будут создавать языки и системы программирования.

Предисловие

Данное издание является развитием книги Альфреда Ахо и Джеффри Ульмана Principles of Computer Design. Подобно своей предшественнице, она задумана как начальный учебный курс по проектированию компиляторов. Основное внимание уделяется решению общих проблем, возникающих при создании трансляторов языков программирования, независимо от исходного языка или целевой машины.

Вероятно, лишь немногие из вас будут заниматься построением или поддержкой компиляторов для основных языков программирования, однако идеи и технологии, описанные в ней, можно с успехом применять при разработке другого программного обеспечения. Например, технологии поиска соответствия строк шаблонам, используемые при построении лексических анализаторов, применяются и в текстовых редакторах, и в системах выборки информации, и в распознавании образов. Контекстно-свободные грамматики и синтаксически управляемые определения используются для создания многих небольших языков, например типографских систем для подготовки макетов книг. Технологии оптимизации кода применяются для проверки корректности программ и создания «структурированных» программ из неструктурированных.

Использование данной книги

В книге глубоко раскрыты основные аспекты создания компиляторов. Глава 1 описывает базовую структуру компилятора и представляет собой фундамент для остального материала книги.

В главе 2 рассматривается транслятор, переводящий инфиксные выражения в постфиксные. Он построен с использованием базовых технологий, описываемых в этой книге. В следующих главах развивается изложенный здесь материал.

Глава 3 посвящена лексическому анализу, регулярным выражениям, конечным автоматам и инструментарию для создания сканеров входного потока. Материал этой главы может быть широко использован при разработке текстовых редакторов.

Глава 4 пополняет наши знания о технологиях синтаксического анализа. Здесь рассматриваются как методы рекурсивного спуска, применяемые при ручной реализации трансляторов, так и более сложные и универсальные LR-технологии, используемые в генераторах синтаксических анализаторов.

Глава 5 знакомит нас с принципиальными идеями синтаксически управляемой трансляции. Материал этой главы используется в оставшейся части книги как для описания, так и реализации трансляторов.

В главе 6 выдвигаются основные идеи выполнения статической семантической проверки и детально рассматриваются вопросы проверки типов.

В главе 7 обсуждаются вопросы организации памяти для поддержки сред времени исполнения программ.

Глава 8 начинается с обсуждения языков промежуточного представления программ, а затем показывает нам, каким образом основные конструкции языка программирования могут транслироваться в промежуточный код.

Глава 9 посвящена генерации целевого кода, включая вопросы генерации кода «на лету» и оптимальные методы генерации кода для выражений. Здесь также рассмотрены локальная оптимизация и генераторы генераторов кода.

Глава 10 представляет исчерпывающую информацию об оптимизации кода. В ней детально изложены методы анализа потока данных, а также основные методы глобальной оптимизации.

В главе 11 обсуждается ряд практических вопросов, возникающих при реализации компиляторов, в частности важность вопросов разработки программного обеспечения и тестирования.

В главе 12 проведено исследование компиляторов, построенных с использованием представленных в книге технологий.

Приложение А описывает простой язык — «подмножество» Pascal, который может использоваться в качестве основы для реальных проектов.

На основе этой книги авторы преподавали как вводный, так и основной курсы для студентов и аспирантов AT&T Bell Laboratories, Колумбийского, Принстонского и Станфордского университетов.

Вводный курс, посвященный компиляторам, может основываться на материале следующих разделов книги.

Введение

Глава1 и разделы 2.1–2.5

Лексический анализ

2.6, 3.1–3.4

Таблицы символов


2.7, 7.6

Синтаксический анализ

2.4, 4.1–4.4

Синтаксически управляемая трансляция

2.5, 5.1–5.5

Проверка типов

6.1, 6.2

Организация времени исполнения

Генерация промежуточного кода

Генерация кода

Оптимизация кода

10.1, 10.2

Информация, необходимая для программного проекта, подобного приведенному в приложении А, имеется в главе 2.

Курс, посвященный инструментарию построения компиляторов, может включать обсуждение генераторов лексических анализаторов из раздела 3.5, генераторов синтаксических анализаторов из разделов 4.8 и 4.9, генераторов генераторов кода из раздела 9.12, а также материал о технологиях построения компиляторов из главы 11.

Основной курс может делать упор на алгоритмы, используемые в генераторах лексических и синтаксических анализаторов (главы 3 и 4); материал об эквивалентности типов, перегрузке, полиморфизме и унификации (глава 6), организации памяти времени исполнения (глава 7); методы генерации кода на основе шаблонов из главы 9; и материал об оптимизации кода из главы 10.

Упражнения

Как и ранее, сложность упражнений указана звездочками. Упражнения без звездочек проверяют понимание определений, упражнения с одной звездочкой относятся к более сложному курсу, а «двухзвездные» служат «пищей» для серьезных размышлений.

Благодарности

На различных этапах написания этой книги мы получили множество неоценимых комментариев и советов от большого числа специалистов. В связи с этим мы выражаем свою признательность Биллу Эппельбу (Bill Appelbe), Нельсону Бибу (Nelson Beebe), Джону Бентли (Jon Bentley), Луи Богесу (Lois Bogess), Родни Фэрроу (Rodney Farrow), Стью Фельдман (Stu Feldman), Чарльзу Фишеру (Charles Fischer), Крису Фрэзеру (Chris Fraser), Арту Життельману (Art Gittelman), Эрику Гроссе (Eric Grosse), Дэйву Хансону (Dave Hanson), Фрицу Хенглайну (Fritz Henglein), Роберту Генри (Robert Henry), Жерару Хольцману (Gerard Holzmann), Стиву Джонсону (Steve Johnson), Брайену Кернигану (Brian Kernighan), Кену Кубота (Ken Kubota), Дэниэлу Леману (Daniel Lehmann), Дэйву Мак-Квину (Dave MacQueen), Дианне Маки (Dianne Maki), Алану Мартину (Alan Martin), Дугу Мак-Илрою (Doug McIlroy), Чарльзу Мак-Лафлину (Charles McLaughlin), Джону Митчеллу (John Mitchell), Эллиоту Органику (Elliot Organick), Роберту Пейджу (Robert Paige), Филу Пфайфферу (Phil Pfeiffer), Робу Пайку (Rob Pike), Кари-Йоко Ряйхя (Kari-Jouko Rдihд), Дэнису Ритчи (Dennis Ritchie), Срираму Санкару (Sriram Sankar), Полу Стокеру (Paul Stoecker), Бьерну Страуструпу (Bjarne Stroustrup), Тому Шимански (Tom Szymanski), Киму Трейси (Kim Tracy), Петеру Вайнбергеру (Peter Weinberger), Дженнифер Видом (Jennifer Widom) и Рейнгарду Вильгельму (Reinhard Wilhelm).

Оригинал этой книги создан с использованием великолепного программного обеспечения, доступного в UNIX. Команда типографского набора выглядела следующим образом.

Pic — это язык Брайена Кернигана (Brian Kernighan) для набора рисунков; мы особо признательны Брайену за успешное удовлетворение наших обширных потребностей в иллюстрациях. tbl — это язык Майка Леска (Mike Lesk), предназначенный для макетирования таблиц; eqn — язык Брайена Кернигана (Brian Kernighan) и Лоринды Черри (Lorinda Cherry) для печати математических формул; troff — программа Джо Оссана (Joe Ossana) для форматирования текста при фотонаборе (в нашем случае — для Mergenthaler Linotron 202/N). Пакет макросов ms разработан Майком Леском (Mike Lesk). И наконец, с текстом мы работали с помощью make Стью Фельдман (Stu Feldman); перекрестные ссылки в тексте обрабатывались посредством awk, созданного Альфредом Ахо (Alfred Aho), Брайеном Керниганом (Brian Kernighan) и Петером Вайнбергером (Peter Weinberger), и sed Ли Мак-Мэхона (Lee McMahon).

Авторы должны отдельно поблагодарить Патрицию Соломон (Patricia Solomon) за помощь в подготовке книги для фотокомпозиции. Во время работы над книгой поддержку Джеффри Ульману (Jeffrey Ullman) оказало Эйнштейновское общество Академии искусств и науки Израиля. И наконец, авторы признательны AT&T Bell Laboratories за поддержку во время подготовки рукописи.

A.V.A., R.S., J.D.U.

Copyright © 1992-2020 Издательская группа «Диалектика-Вильямс»

6 книг по компиляторам

Книга “Структура и интерпретация компьютерных программ” стала итогом многих лет преподавания функционального программирования на 1-м курсе MIT в качестве вводного курса программирования. В университет часто приходили молодые студенты, которые уже имели за плечами опыт программирования, но этот курс с нуля и с самых основ объяснял

  • почему и как в языки введены переменные, ключевые слова и другие инструкции
  • как и почему работают области видимости, вычисление выражений и вычисление программы
  • и так далее
Мастер Йода рекомендует:  Кроссбраузерный DHTML

Эта книга содержит чёткие требования к минимальному языку, на котором можно программировать. В последних главах рассматривается, как интерпретировать этот язык и как скомпилировать его для регистровой машины.

Книга Дракона

Книга “Компиляторы: принципы, технологии, инструментарий” появилась после сбора материалов из курса конструирования компиляторов в MIT, тысячи студентов применили её для своих проектов. Однако, несмотря на переиздание, часть книги успела устареть, а часть дана в не очень практичной форме: например, для разбора грамматик по LR-алгоритму вместо data-driven подхода, использующего простой движок и таблицу переходов, предлагается вручную кодировать правила грамматики.

Книга Engineering a Compiler

Эта книга может поэтапно показать минимальный набор теории и практики, достаточный для каждого компонента компилятора. Рассматриваются современные подходы, в том числе языки промежуточного представления, система типов языка, реализация возможностей современных процедурных и объектно-ориентированных языков. Каждая глава включает постановку проблемы, теоретические пути решения и несколько практических путей реализации.

Пошаговое руководство LLVM Kaleidoscope

Kaleidoscope — это вечно живой пример от проекта LLVM. Он демонстрирует, как использовать LLVM в виде библиотеки. API LLVM постепенно меняется, например, в LLVM 3.9 он на 3-5% отличается от LLVM 3.8. Пример входит в состав исходного кода LLVM и всегда показывает работу с актуальной версией API

Пример доступен в открытом доступе на странице llvm.org/docs/tutorial/. Лучше всего загрузить исходный код LLVM определённой версии, собрать LLVM с помощью CMake и начать изучать параллельно текст на сайте и исходники примера. На Windows можно сгенерировать проект командой cmake -G «Visual Studio 14» «..\path-to-llvm-src»

Сборник Mapping High Level Constructs To LLVM

Этот сборник рецептов, оформленный в один документ, содержит концентрат практических советов по реализации возможностей процедурных, объектно-ориентированных и функциональных языков на LLVM-IR.

Книги по написанию компиляторов [закрыт]

Посоветуйте Русские книги по созданию компиляторов на языке Си, искал, именно на языке Си не могу найти.

Закрыт по причине того, что необходимо переформулировать вопрос так, чтобы можно было дать объективно верный ответ участниками 0xdb, mkkik, Eugene Krivenja, strawdog, Alex Chermenin 2 сен в 13:45 .

Вопрос порождает бесконечные прения и дискуссии, основанные не на знаниях, а на мнениях. Для получения ответа перефразируйте ваш вопрос так, чтобы на него можно было дать однозначно правильный ответ, либо удалите вопрос вовсе. Если вопрос можно переформулировать согласно правилам, изложенным в справке, отредактируйте его.

Компиляторы: принципы, технологии и инструменты

Альфред В. Ахо, Рави Сети, Джеффри Д. Ульман

Каждый, кто интересовался разработкой компиляторов, несомненно, слышал о знаменитой «Книге Дракона» — «Dragon Book», классическим трудом Ахо и Ульмана «Принципы разработки компиляторов». Бурное развитие технологий компиляции привело к рождению нового дракона — книги «Компиляторы: принципы, технологии, инструментарий» Альфреда Ахо, Рави Сети и Джеффри Ульмана.Новая книга начинается с изложения принципов создания компиляторов, проиллюстрированного разработкой прос тейшего однопроходного компилятора. Оставшаяся часть книги посвящена развитию базовых идей и более прогрессивным и современным технологиям, включая такие вопросы, как синтаксический анализ, проверку типов, генерацию и оптимизацию кода.Строгость изложения материала смягчается большим количеством практических примеров. Принципы и технологии написания компиляторов столь распространены, что идеи, которые вы найдете в этой книге, часто используются в области информационных технологий. Написание компиляторов ох ватывает языки программирования, архитектуру вычислительных систем, теорию языков, алгоритмы и технологию создания программного обеспечения. Помочь в освоении этих технологий и инструментария и призвана данная книга. Однако, несмотря на свою учебную ориентацию, книга будет полезна всем, кому приходится работать над созданием компиляторов или кто просто интересуется данной темой, — от начинающих программистов до профессионалов.

От редактора

Перед вами перевод известной книги знаменитых авторов, перу которых принадлежит ряд бестселлеров в области компьютерных наук, причем диапазон их плодотворной работы чрезвычайно широк — от фундаментальных научных статей до великолепных учебников для студентов. Именно таким учебником и является данная книга, которая доступна широкому кругу программистов и представляет собой завершенное изложение технологий построения компиляторов.

Многие работы этих авторов переведены на русский язык и неизменно пользуются повышенным спросом у серьезного читателя. Достаточно вспомнить такие книги, как Построение и анализ вычислительных алгоритмов [7], Структуры данных и алгоритмы [8] или Теория синтаксического анализа, перевода и компиляции [18V19].

Предлагаемая книга выгодно отличается от большинства своих предшественниц тем, что здесь охвачен весь процесс создания компилятора — от лексического анализа до генерации и оптимизации целевого кода. Использование абстрактных математических понятий доводится в ней до конкретных алгоритмов, пригодных для непосредственной реализации. Технологии, изложенные в этой книге, уже нашли свое применение не только в компиляции, но и в системах подготовки текстов, управления базами данных, генерации схем электронны х устройств и других областях.


Оригинал этой книги опубликован в 1988 году. С тех пор были созданы новые парадигмы программирования, десятки новых языков и компиляторов для них. Однако осмелимся утверждать, что в их реализации не было ничего принципиально нового по сравнению с тем, что изложено в этой книге. Данное издание может служить практическим руководством по технологиям создания компиляторов. Описанные в ней технологии были созданы в основном еще в 60-еV80-е годы и существенно уже не изменятся. Книга по праву может считаться классической, потому что она не устарела и не устареет, пока люди будут создавать языки и системы программирования.

Предисловие

Данное издание является развитием книги Альфреда Ахо и Джеффри Ульмана Principles of Computer Design. Подобно своей предшественнице, она задумана как начальный учебный курс по проектированию компиляторов. Основное внимание уделяется решению общих проблем, возникающих при создании трансляторов языков программирования, независимо от исходного языка или целевой машины.

Вероятно, лишь немногие из вас будут заниматься построением или поддержкой компиляторов для основных языков программирования, однако идеи и технологии, описанные в ней, можно с успехом применять при разработке другого программного обеспечения. Например, технологии поиска соответствия строк шаблонам, используемые при построении лексических анализаторов, применяются и в текстовых редакторах, и в системах выборки информации, и в распознавании образов. Контекстно-свободные грамматики и синтаксически управл яемые определения используются для создания многих небольших языков, например типографских систем для подготовки макетов книг. Технологии оптимизации кода применяются для проверки корректности программ и создания «структурированных» программ из неструктурированных.

Использование данной книги

В книге глубоко раскрыты основные аспекты создания компиляторов. Глава 1 описывает базовую структуру компилятора и представляет собой фундамент для остального материала книги.

В главе 2 рассматривается транслятор, переводящий инфиксные выражения в постфиксные. Он построен с использованием базовых технологий, описываемых в этой книге. В следующих главах развивается изложенный здесь материал.

Глава 3 посвящена лексическому анализу, регулярным выражениям, конечным автоматам и инструментарию для создания сканеров входного потока. Материал этой главы может быть широко использован при разработке текстовых редакторов.

Глава 4 пополняет наши знания о технологиях синтаксического анализа. Здесь рассматриваются как методы рекурсивного спуска, применяемые при ручной реализации трансляторов, так и более сложные и универсальные LR-технологии, используемые в генераторах синтаксических анализаторов.

Глава 5 знакомит нас с принципиальными идеями синтаксически управляемой трансляции. Материал этой главы используется в оставшейся части книги как для описания, так и реализации трансляторов.

В главе 6 выдвигаются основные идеи выполнения статической семантической проверки и детально рассматриваются вопросы проверки типов.

В главе 7 обсуждаются вопросы организации памяти для поддержки сред времени исполнения программ.

Глава 8 начинается с обсуждения языков промежуточного представления программ, а затем показывает нам, каким образом основные конструкции языка программирования могут транслироваться в промежуточный код.

Глава 9 посвящена генерации целевого кода, включая вопросы генерации кода «на лету» и оптимальные методы генерации кода для выражений. Здесь также рассмотрены локальная оптимизация и генераторы генераторов кода.

Глава 10 представляет исчерпывающую информацию об оптимизации кода. В ней детально изложены методы анализа потока данных, а также основные методы глобальной оптимизации.

В главе 11 обсуждается ряд практических вопросов, возникающих при реализации компиляторов, в частности важность вопросов разработки программного обеспечения и тестирования.

В главе 12 проведено исследование компиляторов, построенных с использованием представленных в книге технологий.

Приложение А описывает простой язык — «подмножество» Pascal, который может использоваться в качестве основы для реальных проектов.

На основе этой книги авторы преподавали как вводный, так и основной курсы для студентов и аспирантов AT&T Bell Laboratories, Колумбийского, Принстонского и Станфордского университетов.

Вводный курс, посвященный компиляторам, может основываться на материале следующих разделов книги.

Введение

Глава1 и разделы 2.1V2.5

Лексический анализ

2.6, 3.1V3.4

Таблицы символов

2.7, 7.6

Синтаксический анализ

2.4, 4.1V4.4

Синтаксически управляемая трансляция

2.5, 5.1V5.5

Проверка типов

6.1, 6.2

Организация времени исполнения

7.1V7.3

Генерация промежуточного кода

8.1V8.3

Генерация кода

9.1V9.4

Оптимизация кода

10.1, 10.2

Информация, необходимая для программного проекта, подобного приведенному в приложении А, имеется в главе 2.

Курс, посвященный инструментарию построения компиляторов, может включать обсуждение генераторов лексических анализаторов из раздела 3.5, генераторов синтаксических анализаторов из разделов 4.8 и 4.9, генераторов генераторов кода из раздела 9.12, а также материал о технологиях построения компиляторов из главы 11.

Основной курс может делать упор на алгоритмы, используемые в генераторах лексических и синтаксических анализаторов (главы 3 и 4); материал об эквивалентности типов, перегрузке, полиморфизме и унификации (глава 6), организации памяти времени исполнения (глава 7); методы генерации кода на основе шаблонов из главы 9; и материал об оптимизации кода из главы 10.

Упражнения

Как и ранее, сложность упражнений указана звездочками. Упражнения без звездочек проверяют понимание определений, упражнения с одной звездочкой относятся к более сложному курсу, а «двухзвездные» служат «пищей» для серьезных размышлений.

Благодарности

На различных этапах написания этой книги мы получили множество неоценимых комментариев и советов от большого числа специалистов. В связи с этим мы выражаем свою признательность Биллу Эппельбу (Bill Appelbe), Нельсону Бибу (Nelson Beebe), Джону Бентли (Jon Bentley), Луи Богесу (Lois Bogess), Родни Фэрроу (Rodney Farrow), Стью Фельдман (Stu Feldman), Чарльзу Фишеру (Charles Fischer), Крису Фрэзеру (Chris Fraser), Арту Життельману (Art Gittelman), Эрику Гроссе (Eric Grosse), Дэйву Хансону (Dave Hanson), Ф рицу Хенглайну (Fritz Henglein), Роберту Генри (Robert Henry), Жерару Хольцману (Gerard Holzmann), Стиву Джонсону (Steve Johnson), Брайену Кернигану (Brian Kernighan), Кену Кубота (Ken Kubota), Дэниэлу Леману (Daniel Lehmann), Дэйву Мак-Квину (Dave MacQueen), Дианне Маки (Dianne Maki), Алану Мартину (Alan Martin), Дугу Мак-Илрою (Doug McIlroy), Чарльзу Мак-Лафлину (Charles McLaughlin), Джону Митчеллу (John Mitchell), Эллиоту Органику (Elliot Organick), Роберту Пейджу (Robert Paige), Филу Пфайфферу (Phil P feiffer), Робу Пайку (Rob Pike), Кари-Йоко Ряйхя (Kari-Jouko Rдihд), Дэнису Ритчи (Dennis Ritchie), Срираму Санкару (Sriram Sankar), Полу Стокеру (Paul Stoecker), Бьерну Страуструпу (Bjarne Stroustrup), Тому Шимански (Tom Szymanski), Киму Трейси (Kim Tracy), Петеру Вайнбергеру (Peter Weinberger), Дженнифер Видом (Jennifer W >Оригинал этой книги создан с использованием великолепного программного обеспечения, доступного в UNIX. Команда типографского набора выглядела следующим образом.

Pic — это язык Брайена Кернигана (Brian Kernighan) для набора рисунков; мы особо признательны Брайену за успешное удовлетворение наших обширных потребностей в иллюстрациях. tbl — это язык Майка Леска (Mike Lesk), предназначенный для макетирования таблиц; eqn — язык Брайена Кернигана (Brian Kernighan) и Лоринды Черри (Lorinda Cherry) для печати математических формул; troff — программа Джо Оссана (Joe Ossana) для форматирования текста при фотонаборе (в нашем случае — д ля Mergenthaler Linotron 202/N). Пакет макросов ms разработан Майком Леском (Mike Lesk). И наконец, с текстом мы работали с помощью make Стью Фельдман (Stu Feldman); перекрестные ссылки в тексте обрабатывались посредством awk, созданного Альфредом Ахо (Alfred Aho), Брайеном Керниганом (Brian Kernighan) и Петером Вайнбергером (Peter Weinberger), и sed Ли Мак-Мэхона (Lee McMahon).

Авторы должны отдельно поблагодарить Патрицию Соломон (Patricia Solomon) за помощь в подготовке книги для фотокомпозиции. Во время работы над книгой поддержку Джеффри Ульману (Jeffrey Ullman) оказало Эйнштейновское общество Академии искусств и науки Израиля. И наконец, авторы признательны AT&T Bell Laboratories за поддержку во время подготовки рукописи.

Добавить комментарий