Предпочтительные языки : C / C ++, Java и Ruby.
Я ищу некоторые полезные книги / учебные пособия о том, как написать свой собственный компилятор просто для образовательных целей. Я наиболее знаком с C / C ++, Java и Ruby, поэтому я предпочитаю ресурсы, которые включают один из этих трех, но любой хороший ресурс приемлем.
Легенда:
Компилятор LCC ( Википедия ) ( домашняя страница проекта ) Fraser и Hanson описан в их книге "компилятор C Retargetable: Разработка и реализация". Это довольно читаемо и объясняет целый компилятор, вниз к генерации кода.
Простой способ создать компилятор состоит в том, чтобы использовать бизона и гибкий провод (или подобный), создать дерево (AST) и генерировать код в C. С генерацией C код, являющийся самым важным шагом. Путем генерации C кода, язык будет автоматически работать над всеми платформами, которые имеют компилятор C.
Генерация C код так же легка как генерация HTML (просто используют печать, или эквивалентный), который в свою очередь намного легче, чем запись синтаксического анализатора C или синтаксического анализатора HTML.
Существует много хороших ответов здесь, таким образом, я думал, что просто добавлю еще один к списку:
я получил книгу под названием Проект Oberon больше чем десятилетие назад, который имеет некоторых очень хорошо записанный текст на компиляторе. Книга действительно выделяется в том смысле, что источник и объяснения являются очень руками и читаемый. Полный текст (выпуск 2005 года) был сделан доступным в PDF, таким образом, можно загрузить прямо сейчас. Компилятор обсужден в главе 12:
http://www-old.oberon.ethz.ch/WirthPubl/ProjectOberon.pdf
Niklaus Wirth, JГјrg Gutknecht
(Обработка не так обширна как его книга по компиляторам)
я прочитал несколько книг по компиляторам, и я могу второй книга дракона, время, проведенное на этой книге, очень стоит.
Если Вам интересно в письменной форме компилятор для функционального языка (а не процедурный) Simon Peyton-Jones и David Lester" Реализующие функциональные языки: учебное руководство " является превосходным руководством.
концептуальные основы того, как функциональная оценка работает, ведутся примерами на простом, но мощном функциональном языке под названием "Ядро". Кроме того, каждая часть компилятора Базового языка объяснена с примерами кода в Miranda (чистый функциональный язык, очень похожий на Haskell).
Несколько различных типов компиляторов описаны, но даже если Вы только следуете так называемому шаблонному компилятору для Ядра, у Вас будет превосходное понимание того, что заставляет функциональное программирование отсчитать.
code
форматирование вместо полужирный курсив . I' d редактируют его самостоятельно, но I' d как Вы для изучения =)
– ADTC
03.12.2013, 11:23
Мне понравилось учебное руководство Креншо также, потому что оно делает его абсолютно ясным, что компилятор является просто другой программой, которая читает некоторый вход и выписывает некоторым помещенным.
Read это.
Работа это, если Вы хотите, но тогда смотрите на другую ссылку о том, как больше и больше полных компиляторов действительно записаны.
И читают При Доверии Доверию , для получения подсказки о неочевидных вещах, которые могут быть сделаны в этом домене.
Книга Дракона является слишком сложной. Поэтому проигнорируйте его как начальную точку. Это хорошо и заставляет Вас думать много, как только у Вас уже есть начальная точка, но для начинающих, возможно, необходимо просто попытаться записать средство анализа математики/логического выражения с помощью RD, LL или методов LR-анализа со всем (lexing/parsing), записанный вручную в, возможно, C/Java. Это интересно сам по себе и дает Вам общее представление о проблемах, вовлеченных в компилятор. Тогда можно вскочить к собственному DSL, использующему некоторый язык сценариев (так как обработка текста обычно легче в них), и как кто-то сказал, генерируйте код или в самом языке сценариев или в C. Необходимо, вероятно, использовать flex/bison/antlr и т.д., чтобы сделать lexing/parsing, если Вы собираетесь сделать это в c/java.
Я записал учебное руководство онлайн на дизайне компилятора, названном, "Давайте создадим Компилятор Механизма сценариев, а также компилятор собственного кода под названием Bxbasm. Документ Онлайн в: http://geocities.com/blunt_axe_basic/tutor/Bxb-Tutor.doc
документы, файлы поддержки и компилятор, в форме zip, в: http://geocities.com/blunt_axe_basic
Также: http://tech.groups.yahoo.com/group/QDepartment
Steve A.
Как начальная точка, будет хорошо создать синтаксический анализатор с рекурсивным спуском (RDP) (скажем, Вы хотите создать свой собственный аромат ОСНОВНЫХ и создать ОСНОВНОЙ интерпретатор) понять, как записать компилятор. Я нашел лучшую информацию в Продвинутых пользователях Herbert Schild C, главе 7. Эта глава обращается к другой книге H. Schildt "C полная Ссылка", где он объясняет, как создать калькулятор (синтаксический анализатор простого выражения). Я нашел обе книги о eBay очень дешевыми. Можно проверить код на книгу, если Вы переходите к www.osborne.com или регистрируетесь www.HerbSchildt.com , я нашел тот же код, но для C# в его последней книге
Если Вы похожи на меня, кто не имеет никакого формального образования информатики и интересуется, создавать/хотеть, чтобы знать, как работает компилятор:
я, рекомендуют "Процессоры языка программирования в Java: Компиляторы и Интерпретаторы", удивительная книга для программиста-самоучки.
С моей точки зрения, понимая их теория языка Бэйсик, автоматизируют машину, и теория множеств не является большой проблемой. Проблема состоит в том, как превратить те вещи в код. Вышеупомянутая книга говорит Вам, как записать синтаксический анализатор, аналитический контекст, и сгенерировать код. Если Вы не можете понять эту книгу, то я должен сказать, бросить создавать компилятор. Книга лучше всего программирует книгу, которую я когда-либо читал.
существует другая книга, также хорошая, Дизайн Компилятора в C. Существует много кода, и он говорит Вам все о том, как создать инструменты компилятора и лексического анализатора.
Здание компилятор является забавной практикой программирования и может преподавать Вам "кучу" программирования навыков.
не покупают книга Дракона. Это было пустой тратой денег и время и не для практика.
"Позволяют нам Сборка, Компилятор" является потрясающим, но это немного устарело. (Я не говорю, что это делает его даже немного менее допустимым.)
Или выезд СЛЕНГ . Это подобно для "Разрешения нам Сборка Компилятор", но является намного лучшим ресурсом специально для новичков. Это идет с учебным руководством PDF, которое проявляет 7 подходов шага при обучении Вам компилятор. Добавление quora ссылки, поскольку это имеет ссылки на все различные порты СЛЕНГА, в C++, Java и JS, также интерпретаторах в Python и Java, первоначально записанное использование C# и платформа.NET.
Необходимо проверить Darius Bacon" ichbins", который является компилятором для маленького диалекта Lisp, предназначаясь C, на чуть более чем 6 страницах кода. Преимущество, которое это имеет по большинству игрушечных компиляторов, состоит в том, что язык достаточно завершен, что компилятор записан в нем. (tarball также включает интерпретатор для начальной загрузки вещи.)
существует больше материала о том, что я нашел полезным в обучении записать компилятор на моем веб-страница Схемы Ура .
Я думаю , современная Реализация Компилятора в ML является лучшим вводным компилятором, пишущий текст. Существует версия Java и версия C также, любой из которых мог бы быть более доступным, учитывая Ваше образование языков. Книга упаковывает много полезного основного материала (сканирование и парсинг, семантический анализ, записи активации, выбор инструкции, RISC и x86 поколение собственного кода) и различные "усовершенствованные" темы (компилирующий OO и функциональные языки, полиморфизм, сборку "мусора", оптимизацию и единственную статическую форму присвоения) в относительно небольшое пространство (~500 страниц).
я предпочитаю современную Реализацию Компилятора книге Дракона, потому что современная реализация Компилятора рассматривает меньше поля - вместо этого это имеет действительно твердое покрытие всех тем, которые необходимо было бы записать серьезному, достойному компилятору. После работы через эту книгу, Вы будете готовы заняться научно-исследовательскими работами непосредственно для большей глубины при необходимости в нем.
я должен признаться, что имею серьезную слабость к Niklaus Wirth Конструкция Компилятора. Это доступно онлайн как PDF. Я нахожу программирование Wirth эстетичным просто красивый, однако некоторые люди находят его стиль слишком минимальным (например, Wirth одобряет синтаксические анализаторы с рекурсивным спуском, но большую часть внимания курсов CS на инструменты парсера-генератора; проекты языка Wirth довольно консервативны.) Конструкция компилятора является очень сжатой дистилляцией основных идей Wirth, поэтому нравится ли Вам его стиль или не или нет, я настоятельно рекомендую чтение этой книги.
Я соглашаюсь с Книжной ссылкой Дракона; IMO, это - полное руководство к конструкции компилятора. Подготовьтесь к некоторой жесткой теории, все же.
, Если Вы хотите книгу, которая легче на теории, , Игровое Мастерство Сценариев могло бы быть лучшей книгой для Вас. Если Вы - общий новичок в теории компилятора, она обеспечивает более нежное введение. Это не покрывает более практические методы парсинга (выбирающий непрогнозирующий рекурсивный спуск, не обсуждая LL или LR-анализ), и как я вспоминаю, это даже не обсуждает вида теории оптимизации. Плюс, вместо того, чтобы компилировать в машинный код, это компилирует в байт-код, который, как предполагается, работает на VM, который Вы также пишете.
Это - все еще достойное чтение, особенно если можно взять его для дешевого на Amazon. Если Вы только хотите легкое введение в компиляторы, Игровое Мастерство Сценариев не является плохим способом пойти. Если Вы хотите пойти хардкор впереди, то необходимо согласиться на не что иное как Книгу Дракона.
Если Вы надеетесь использовать мощные, высокоуровневые инструменты вместо того, чтобы создать все сами, проходя проекты и чтения для , этот курс является довольно хорошим вариантом. Это - курс языков автором механизма синтаксического анализатора Java ANTLR. Можно получить книгу для курса как PDF от Прагматически настроенные Программисты .
курс пробегается через стандартный материал компилятора компилятора, который Вы видели бы в другом месте: парсинг, типы и проверка типа, полиморфизм, таблицы символов и генерация кода. В значительной степени единственной вещью, которая не покрыта, является оптимизация. Заключительный проект является программой что компиляции подмножество C. Поскольку Вы используете инструменты как ANTLR и LLVM, выполнимо записать весь компилятор в единственный день (у меня есть доказательство существования этого, хотя я действительно имею в виду ~24 часа). Это тяжело на практической разработке с помощью современных инструментов, немного легче на теории.
LLVM, между прочим, является просто фантастическим. Много ситуаций, где Вы могли бы обычно компилировать вниз в блок, Вы будете очень более обеспеченной компиляцией в Промежуточное Представление LLVM вместо этого. Это является высокоуровневым, кросс-платформенным, и LLVM довольно хорош в генерации оптимизированного блока от него.
Книга Дракона является определенно "книгой" компиляторов здания, но если Ваш язык не является вполне столь же сложным как текущее поколение языков, Вы можете хотеть посмотреть на шаблон Интерпретатора от Шаблоны разработки .
пример в дизайне книги подобный регулярному выражению язык и хорошо продуманы, но как они говорят в книге, это хорошо для продумывания процесса, но эффективно действительно только на маленьких языках. Однако это намного быстрее для записи Интерпретатора для маленького языка с этим шаблоном, чем необходимость узнать обо всех различных типах синтаксических анализаторов, yacc и закона, и так далее...
enter
снова?
– yckart
28.02.2020, 19:25
Если Вы готовы использовать LLVM, проверьте это: http://llvm.org/docs/tutorial/ . Это учит Вас, как записать компилятор с нуля с помощью платформы LLVM и не предполагает, что у Вас есть любое знание о предмете.
учебное руководство предлагает, чтобы Вы записали свой собственный синтаксический анализатор и лексический анализатор и т.д., но я советую Вам изучать бизона и гибкий провод, как только Вы получаете идею. Они делают жизнь настолько легче.
"... Позвольте нам Сборка Компилятор... "
я был бы второй http://compilers.iecc.com/crenshaw/ @sasb. Забудьте покупать больше книг в настоящий момент.
, Почему? Инструменты & язык.
требуемым языком является Паскаль и если я помню, правильно основан на Turbo Pascal. Это именно так происходит, если Вы переходите в http://www.freepascal.org/ и загружаете компилятор Паскаля, все примеры работают прямо от страницы ~ http://www.freepascal.org/download.var , отличная вещь о Бесплатном Паскале - Вы, может использовать его почти безотносительно процессора или ОС, о которой можно заботиться.
, Как только Вы освоили уроки тогда, пробуют более усовершенствованное " Книга Дракона" ~ http://en.wikipedia.org/wiki/Dragon_book
Я изучаю то же понятие и нашел, что эта многообещающая статья Joel Pobar,
Создают Языковой компилятор для Платформы.NET - не уверенный, куда это пошло
, Создают Языковой компилятор для Платформы.NET - копия PDF исходного документа
, он обсуждает понятие высокого уровня компилятора и продолжает изобретать свой собственный язык для.Net платформы. Хотя ее нацеленный на.Net Платформу, многие понятия должны быть в состоянии быть воспроизведенными. Покрытия Статьи:
существует другие темы, но Вы получаете справедливое.
Его нацеленный людям, начинающим, записанный в C# (не совсем Java)
кости HTH
Одна книга, еще не предложенная но очень важная, "Компоновщики и Загрузчики" John Levine. Если Вы не будете использовать внешний ассемблер, Вам будет нужен способ произвести объектный файл, который может быть связан в Вашу заключительную программу. Даже при использовании внешнего ассемблера необходимо будет, вероятно, понять перемещения и как целый процесс загрузки программы работает для создания рабочего инструмента. Эта книга собирает много случайных сведений вокруг этого процесса для различных систем, включая Win32 и Linux.
Let's Build a Compiler
[ compilers.iecc.com/crenshaw/] ряд, это - действительно хорошая рецензия и является хорошей начальной точкой. – TheVillageIdiot 14.05.2020, 11:44