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

Ваш ответ

Отображаемое имя (по желанию):
Конфиденциальность: Ваш электронный адрес будет использоваться только для отправки уведомлений.
Анти-спам проверка:
Чтобы избежать проверки в будущем, пожалуйста подтвердите адрес электронной почты.

31 Ответы

0 голосов
от
Предпочитаемые языки: С/C , Java и Ruby. Я ищу некоторые полезные книги/учебники о том, как написать свой собственный компилятор просто для образовательных целей. Я наиболее знаком с Си/Си , Java и Ruby, поэтому я предпочитаю ресурсы, которые содержат одну из этих трех, но любой хороший ресурс приемлемо.
0 голосов
от
Большой список ресурсов: В рамках Nanopass для образования компилятор ¶ Передовой дизайн компилятора и реализации $ Поэтапный подход к построению компилятора ¶ ANTLR 3.x видео самоучитель Основы проектирования компиляторов Построение компилятора попугай Основы Компилятора Строительство Компилятора $ Дизайн компилятора и строительство $ Разработке компилятора С C $ Крафтинг Переводчиков Дизайн компилятора в C ¶ Компиляторы: принципы, технологии и инструменты $ — "книга Дракона ака" считается "книги" для компилятора писать. Разработка компилятора $ Основы языков программирования Архив статьи Flipcode (ищите "реализация скриптовый движок Яна Niestadt") Мастерство Игры Сценарии $ Как создать виртуальную машину с нуля в C# ¶ Реализация Функциональных Языков Реализации языков программирования (с BNFC) Реализации языков программирования с использованием C# 4.0 Шаблон интерпретатор (описано в шаблоны проектирования $) определяет способ оценки предложений в языке Шаблоны реализации языка: создайте свой собственный домен-специфические и общие языки программирования Давайте создадим компилятор Джек Креншоу — PDF-версия ¶ (примеры на языке Pascal, но информация вообще доступна) Компоновщики и загрузчики $ (Google Книги) Сюсюкаться на мелкие кусочки (Лисп) $ Инфраструктура LLVM учебник Современные реализации компилятора в ML $ — есть Ява $ и C $ версия также считавшегося очень хорошая книга Объектно-Ориентированного Проектирования Компилятора $ Методы Анализа: Практическое Руководство Проект Оберон ¶ - загляните в Главу 13 Программирование персонального компьютера $ Языки программирования: применение и толкование Кролик: компилятор для Scheme¶ Размышления на доверии доверие — краткое руководство Свернуть свой собственный компилятор для .Чистая база — краткий учебник с MSDN Структура и интерпретация компьютерных программ Типы и языки программирования Хочу написать компилятор? - краткое руководство Написание компилятора в нижней рубинового до Легенда: ¶ Ссылка на PDF файл $ Ссылка на печатное издание
0 голосов
от
Это довольно расплывчатый вопрос, я думаю, просто из-за глубины этой теме участвует. Компилятор может быть разложена на две отдельные части, однако, сверху-половину и снизу один. Сверху-половинки, как правило, принимает исходный язык и преобразует его в промежуточное представление, и нижняя половина заботится о конкретной платформы код. Тем не менее, одна идея для простой способ подойти к этой теме (тот, который мы использовали в классе компиляторы, по крайней мере), чтобы построить компилятор на две части, описанной выше. В частности, вы получите хорошее представление о всем процессе, просто здание сверху-половинки. Просто делала верхняя половина позволяет вам получить опыт написания лексический анализатор и синтаксический анализатор и перейти к созданию некоего "кода" (то промежуточное представление, я уже упоминал). Поэтому он будет принимать вашу программу источника и конвертировать его в другое представление и сделать некоторые оптимизации (если требуется), которая является сердцем компилятор. Затем нижняя половина будет считать, что промежуточное представление и генерирует байты, необходимые для выполнения программы на конкретной архитектуре. Например, нижняя половина примет ваше промежуточное представление и генерирует исполняемый ЧП. Некоторые книги на эту тему, который я нахожу особенно полезным был компиляторы принципы и методы (или дракона книга, из-за симпатичного дракона на обложке). Он получил некоторые большие теории и, безусловно, охватывает контекстно-свободных Грамматик в очень доступной форме. Кроме того, для построения лексического анализатора и синтаксического анализатора, вы, вероятно, использовать *инструменты шухер Lex и yacc. И достаточно uninterestingly, книга под названием "Lex и yacc" взял, где книга Дракона остановились на этой части.
0 голосов
от
Я думаю, что современные реализации компилятора ML-это лучший вводный компилятор писать текст. Есть версии Java и C версии тоже, любой из которых может быть более доступной, учитывая ваши языки фоне. Книга содержит много полезной основного материала (сканирование и синтаксический анализ, семантический анализ, активация записи, инструкция выбор, RISC и x86 машинный код, поколения), а различные "продвинутые" темы (составление ОО или функциональных языков, полиморфизм, вывоз мусора, оптимизации и один статический форма) на сравнительно мало места (~500 страниц). Я предпочитаю современные реализации компилятор книга Дракона, потому что современная реализация компилятора обследований поля-вместо того, чтобы это действительно сплошной охват всех тем, вам придется написать серьезный, достойный компилятор. После работы с этой книгой вы будете готовы к решению научных работ непосредственно для более подробно, если вам это нужно. Я должен признаться, у меня есть серьезные мягкое место для строительства компиляторов Никлаус Вирт по. Он доступен в интернете в формате PDF. Я нахожу эстетическое программирования вирт это просто красиво, однако некоторые люди считают, что его стиль слишком минимальный (например Вирт выступает рекурсивный спуск парсер, но большинство курсов CS сосредоточиться на инструменты генератор синтаксических анализаторов; языковые конструкции Вирт довольно консервативен.) Строительство компилятор очень емкое перегонки из основных идей Вирта, так что нравится вам его стиль или нет или нет, я настоятельно рекомендую прочитать эту книгу.
0 голосов
от
Я согласен с справочник Дракона, ИМО, это полное руководство по строительству компилятора. Будьте готовы к некоторым хардкор теории, хотя. Если вы хотите книгу, которая легче по теории, мастерство игры Scripting может быть лучше книги. Если вы полный новичок в теории компилятора, это обеспечивает мягкий введение. Она не покрывает более практичные методы анализа (выбор номера-интеллектуальный рекурсивный спуск без обсуждения ll или LR с разбора), и насколько я помню, это даже не обсуждать какой-либо теории оптимизации. Плюс, вместо компиляции в машинный код, он компилируется в байт-код, который должен работать на виртуальной машине, что Вы тоже пишите. Это все-таки приличное почитать, особенно если вы можете его забрать за дешево на Амазонке. Если вы хотите только легкое введение в компиляторы, мастерство игры сценарии-это не плохой способ пойти. Если вы хотите пойти хардкор впереди, то вы должны соглашаться на меньшее, чем книга Дракона.
0 голосов
от
"Давайте создадим компилятор" - это круто, но она немного устарела. (Я не говорю, что это делает его даже немного меньше действительного.) Или проверить сленг. Это похоже на "Давайте создадим компилятор", но это намного лучше ресурсов, особенно для начинающих. Это приходит с учебник PDF, которая занимает 7-шагового подхода в обучении вам компилятор. Добавив очередную статью, ссылку как она есть ссылки на все различные порты сленга, в С , Java и JS, также интерпретаторы в Python и Java, изначально написан на C# и .Net платформы.
0 голосов
от
Если вы хотите использовать мощный, высокий уровень орудий, а не строить все самому, пройдя через проекты и чтения этого курса является довольно хорошим вариантом. Это конечно язык автора парсер Java и ANTLR двигателя. Вы можете получить книги для курса в формате PDF от прагматичных программистов. Трасса проходит через стандартный компилятор компилятор вещи, которые вы увидите в другом месте: разбор, типы и проверки типов, полиморфизм, таблицы символов, генерация кода. Практически единственная вещь, которая не покрыта оптимизации. Итоговой проект представляет собой программу, которая составляет подмножество С. Потому что вы используете такие инструменты, как ANTLR и LLVM, это возможно, чтобы написать весь компилятор в один день (у меня есть доказательства существования этого, хотя я имею в виду ~24 часа). Это тяжело на практических инженерных, используя современные инструменты, немного легче по теории. Инфраструктура LLVM, кстати, просто фантастический. Много ситуаций, где можно нормально компилировать на ассемблере, вы будете гораздо лучше компиляции промежуточное представление LLVM с вместо. Это более высокий уровень, кросс-платформенный, и LLVM неплохо на создание оптимизированной сборки из него.
0 голосов
от
Если у вас мало времени, рекомендую "строительство компиляторов Никлаус Вирт у" (Аддисон-Уэсли. 1996), маленький буклет, который вы можете прочитать за один день, но он объясняет основы (в том числе как реализовать лексеров, рекурсивный спуск парсер, и ваши собственные стековых виртуальных машин). После этого, если вы хотите углубиться, нет никакого способа вокруг книги дракон, как и другие комментаторы предлагают.
0 голосов
от
Вы можете захотеть взглянуть на Лекс/Yacc (или Flex/Зубр, что вы хотите назвать их). Flex-это лексический анализатор, который будет анализировать и выявлять семантические компоненты ("маркеры") языка, а Зубр будет использоваться, чтобы определить, что происходит, когда каждый маркер разбирается. Это может быть, безусловно, не ограничиваются, распечатка кода на языке C, компилятор, который будет компилировать в C или динамическое выполнение инструкций. Данная статья должна помочь вам, и этот учебник выглядит вполне полезным.
0 голосов
от
Вообще говоря, нет пяти минут учебник для компиляторов, потому что это сложная тема и писать компилятор может занять несколько месяцев. Вам придется сделать свой собственный поиск. Python и Ruby, как правило, интерпретируется. Возможно, вы хотите начать с переводчика. Это, как правило, легче. Первый шаг-написать формальное описание языка, грамматики языка программирования. Затем вы должны преобразовать исходный код, который вы хотите компилировать или интерпретировать по грамматике в абстрактное синтаксическое дерево, внутренняя форма исходного кода, что компьютер понимает и может оперировать. Этот шаг обычно называется парсинг и программное обеспечение, которое анализирует исходный код называется парсер. Зачастую парсера создается с помощью генератора парсеров, которые преобразуют формальной грамматики на источник Одер машинный код. По хорошему, не математическое объяснение разбора я рекомендую разбор методов - практическое руководство. В Википедии есть сравнение генераторов парсеров, из которых вы можете выбрать тот, что подходит для вас. В зависимости от генератор анализатора, который вы выбрали, вы сможете найти учебники в интернете и очень популярен генераторами синтаксических анализаторов (например, GNU Зубр) есть также книги. Пишу парсер для своего языка может быть очень трудно, но это зависит от вашей грамматики. Поэтому я предлагаю, чтобы сохранить ваш грамматике просто (в отличие от c ); хорошим примером этого является Лисп. На втором этапе дерево абстрактного синтаксиса превращается из структуры дерева в линейный промежуточное представление. В качестве хорошего примера для байт-кода это Луа часто цитируется. Но промежуточное представление действительно зависит от вашего языка. Если вы строите переводчик, вы просто должны интерпретировать промежуточное представление. Вы могли бы также просто-В-времени компиляции. Я рекомендую LLVM и libjit для раз-в-времени компиляции. Чтобы сделать язык, полезная вы также будете иметь, чтобы включить некоторые функции ввода и вывода и, возможно, небольшая стандартная библиотека. Если вы собираетесь компилировать язык, то оно будет более сложным. Вам придется писать модули для различных компьютерных архитектур и генерации машинного кода из промежуточного представления в эти бэкенды. Я рекомендую LLVM для этой задачи. Есть несколько книг на эту тему, но я могу рекомендовать ни один из них для общего пользования. Большинство из них слишком академического или слишком практичны. Нет "научите себя компилятор писать в 21 дней" и, таким образом, вам придется купить несколько книг, чтобы понять всю эту тему. Если вы поищете в интернете, вы столкнетесь с некоторыми немного онлайн книг и лекции. Может, есть университетская библиотека поблизости, где можно брать книги по компиляторам. Я также рекомендую хорошие фоновые знания в области теоретической информатики и теории графов, если вы собираетесь сделать серьезный проект. Степень в области компьютерных наук будет также полезно.
...