2008-09-30 4 views
4

Резюме для нетерпеливого: Я ищу хорошие ссылки на генерацию кода для общих языковых конструкций, но не разбора.Каковы хорошие ресурсы для компиляции?

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

Так что вопрос в том, Какие ресурсы вы предлагаете о программировании языковых реализаций, которые затрагивают эту тему более насущно и практично?

Например, «Реализация Lua 5.0» бумага очень поучительная.

Обратите внимание, что я не ищу статьи о разборе или токенизации.

ответ

9

Вот куча хороших учебников:

Современные Compiler Внедрение в Java (Tiger книга) A.W. Аппель Cambridge University Press, 1998 ISBN 0-52158-388-8 Учебник учебник по реализации компилятора, включая методы для многих особенностей языка

Составители: Принципы, методы и инструменты (Dragon книга) Ахо, Lam, Sethi and Ullman Addison-Wesley, 2006 ISBN 0321486811 Классический учебник по компиляторам, хотя его передний план отражает его возраст.

Advanced Compiler Разработка и реализация (Whale книга) Стивен Мучник Morgan Кауфман Publishers, 1997 ISBN 1-55860-320-4 По существу книга рецептов оптимизаций; очень полные и подходящие для промышленных практиков и исследователей.

Engineering компилятор (Ark книга) Keith D. Купер, Линда Torczon Морган Кауфман Publishers, 2003 ISBN 1-55860-698-X Современный класс учебник, с особым упором на заднем конце и реализации методы.

оптимизирующие компиляторы для современных архитектур Рэнди Аллен и Кен Кеннеди Morgan Кауфман Publishers, 2001 ISBN 1-55860-286-0 Современный учебник, который фокусируется на оптимизации, включая распараллеливания и иерархии памяти оптимизаций.

Программирование Языки прагматика Michael L. Scott Morgan Kaufmann Publishers, 2005 ISBN 0126339511

+0

http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-035Fall-2005/Readings/ – artificialidiot 2008-09-30 15:16:31

-1

пурпурной Дракона Книга является лучшим когда-либо.

0

The Design and Evolution of C++ автор: Bjarne Stroustrup, который имеет довольно мало кода, но в основном обсуждает компромиссы и другие проблемы при разработке языка.

0

Постарайтесь посмотреть проект LLVM и их публикации и руководства.

2

Предлагаю играть с ANTLR. Я использовал его некоторое время назад и нашел его очень простым в использовании.

+1

У меня есть учебник по ANTLR 2.x по адресу: //javadude.com/articles/antlrtut/index.html. Я работаю над его обновлением до ANTLR 3.x – 2009-05-11 20:42:42

1

Мое избранное - «Создание оптимизационного компилятора» Роберта Моргана. Очень практично, покрывает статическое одиночное назначение.

1

Еще один намек: не начинайте копаться в GCC; это слишком сложно. Вы хотите что-то более научное и простое начать, я бы предложил изучить нечто вроде Java-компилятора, написанного на Java, или компиляторов Erlang, написанных в Erlang.

2

Книги «Дракон» и «Тигр» (см. Выше) оба превосходны, хотя я нахожу книгу «Тигр» (Аппель) немного плотной. Мне также очень нравится Современный дизайн компилятора автор David Galles. Что касается инструментов и утилит, которые помогут вам понять, я рекомендую взглянуть на один или более из следующих способов:

  • JavaaCC для ЛЕКС и синтаксического анализа поколения
  • Grammatica для ЛЕКС и синтаксического анализа поколения
  • Jasmin и Jasper для генерации кода
0

Мне нравится создание компилятора Николя Вирта, но, возможно, это связано с тем, что обучение (Turbo) Паскаль заставило меня принять решение перейти в Информатику.

http://www-old.oberon.ethz.ch/WirthPubl/CBEAll.pdf

3

Возможно (я прочитал через него, но не сделали этого), An Incremental Approach to Compiler Construction отлично. В нем описывается, как автор преподает курс своих компиляторов.

Из реферата:

Составители воспринимаются как магические артефакты, тщательно разработанные с помощью мастеров, и непостижимое по простых смертных. Книги о компиляторах лучше описываются как «волшебные разговоры»: написаны и для клики всезнающих практиков. Реальные компиляторы слишком сложны, чтобы служить учебным инструментом. И разрыв между реальными компиляторами и составителями обучающих игрушек слишком широк. Писатель-компилятор новичка озадачен, сталкиваясь с непроницаемым барьером, «лучше напишите переводчика».

Цель этой статьи - преодолеть этот барьер. Мы показываем, что создание компилятора может быть таким же простым, как построение интерпретатора. Созданный нами компилятор принимает большое подмножество языка программирования Схемы и создает код сборки для архитектуры Intel-x86, доминирующей архитектуры персональных компьютеров. Разработка компилятора разбита на несколько небольших этапов. Каждый шаг дает полностью рабочий компилятор для постепенно расширяющегося подмножества Схемы. Каждый шаг компилятора создает реальный код сборки, который может быть собран, а затем выполнен непосредственно аппаратным обеспечением. Мы предполагаем, что читатель знаком с базовой компьютерной архитектурой: ее компонентами и моделью исполнения. Подробные знания архитектуры Intel-x86 не требуются.

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

Смежные вопросы