Учимся писать компилятор [закрыто]

Вот мое решение в Javascript - очень похоже на JPot, но короче (и, возможно, немного быстрее):

value = new Date(parseInt(value.substr(6)));

"value.substr (6)" вынимает "/ Date ( ", а функция parseInt игнорирует символы не числа, которые встречаются в конце.

EDIT: Я намеренно исключил основание (второй аргумент parseInt), см. мой комментарий ниже . Также обратите внимание, что даты ISO-8601 предпочтительнее этого старого формата, поэтому этот формат обычно не должен использоваться для новой разработки. См. отличную библиотеку Json.NET для отличная альтернатива, которая сериализует даты с использованием формата ISO-8601.

Для ISO-8601 отформатированных дат JSON просто передайте строку в конструктор Date:

var date = new Date(jsonDate); //no ugly parsing needed; full timezone support

699
задан 20 revs, 10 users 47% 28 February 2014 в 23:45
поделиться

36 ответов

Большой Список Ресурсов:

Легенда:

  • В ¶ Ссылка на Ссылку $ файла
  • PDF на печатную книгу
1055
ответ дан 37 revs, 26 users 26% 28 February 2014 в 23:45
поделиться

Существует много хороших ответов здесь, таким образом, я думал, что просто добавлю еще один к списку:

я получил книгу под названием Проект Oberon больше чем десятилетие назад, который имеет некоторых очень хорошо записанный текст на компиляторе. Книга действительно выделяется в том смысле, что источник и объяснения являются очень руками и читаемый. Полный текст (выпуск 2005 года) был сделан доступным в PDF, таким образом, можно загрузить прямо сейчас. Компилятор обсужден в главе 12:

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

Niklaus Wirth, JГјrg Gutknecht

(Обработка не так обширна как его книга по компиляторам)

я прочитал несколько книг по компиляторам, и я могу второй книга дракона, время, проведенное на этой книге, очень стоит.

5
ответ дан 2 revs 28 February 2014 в 23:45
поделиться

Если Вам интересно в письменной форме компилятор для функционального языка (а не процедурный) Simon Peyton-Jones и David Lester" Реализующие функциональные языки: учебное руководство " является превосходным руководством.

концептуальные основы того, как функциональная оценка работает, ведутся примерами на простом, но мощном функциональном языке под названием "Ядро". Кроме того, каждая часть компилятора Базового языка объяснена с примерами кода в Miranda (чистый функциональный язык, очень похожий на Haskell).

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

5
ответ дан Mark Reid 28 February 2014 в 23:45
поделиться

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

Read это.

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

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

4
ответ дан 2 revs 28 February 2014 в 23:45
поделиться

Книга Дракона является слишком сложной. Поэтому проигнорируйте его как начальную точку. Это хорошо и заставляет Вас думать много, как только у Вас уже есть начальная точка, но для начинающих, возможно, необходимо просто попытаться записать средство анализа математики/логического выражения с помощью RD, LL или методов LR-анализа со всем (lexing/parsing), записанный вручную в, возможно, C/Java. Это интересно сам по себе и дает Вам общее представление о проблемах, вовлеченных в компилятор. Тогда можно вскочить к собственному DSL, использующему некоторый язык сценариев (так как обработка текста обычно легче в них), и как кто-то сказал, генерируйте код или в самом языке сценариев или в C. Необходимо, вероятно, использовать flex/bison/antlr и т.д., чтобы сделать lexing/parsing, если Вы собираетесь сделать это в c/java.

3
ответ дан user9529 28 February 2014 в 23:45
поделиться

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

7
ответ дан yeruham 28 February 2014 в 23:45
поделиться

Как начальная точка, будет хорошо создать синтаксический анализатор с рекурсивным спуском (RDP) (скажем, Вы хотите создать свой собственный аромат ОСНОВНЫХ и создать ОСНОВНОЙ интерпретатор) понять, как записать компилятор. Я нашел лучшую информацию в Продвинутых пользователях Herbert Schild C, главе 7. Эта глава обращается к другой книге H. Schildt "C полная Ссылка", где он объясняет, как создать калькулятор (синтаксический анализатор простого выражения). Я нашел обе книги о eBay очень дешевыми. Можно проверить код на книгу, если Вы переходите к www.osborne.com или регистрируетесь www.HerbSchildt.com , я нашел тот же код, но для C# в его последней книге

2
ответ дан Romjin 28 February 2014 в 23:45
поделиться

Я думаю , современная Реализация Компилятора в ML является лучшим вводным компилятором, пишущий текст. Существует версия Java и версия C также, любой из которых мог бы быть более доступным, учитывая Ваше образование языков. Книга упаковывает много полезного основного материала (сканирование и парсинг, семантический анализ, записи активации, выбор инструкции, RISC и x86 поколение собственного кода) и различные "усовершенствованные" темы (компилирующий OO и функциональные языки, полиморфизм, сборку "мусора", оптимизацию и единственную статическую форму присвоения) в относительно небольшое пространство (~500 страниц).

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

я должен признаться, что имею серьезную слабость к Niklaus Wirth Конструкция Компилятора. Это доступно онлайн как PDF. Я нахожу программирование Wirth эстетичным просто красивый, однако некоторые люди находят его стиль слишком минимальным (например, Wirth одобряет синтаксические анализаторы с рекурсивным спуском, но большую часть внимания курсов CS на инструменты парсера-генератора; проекты языка Wirth довольно консервативны.) Конструкция компилятора является очень сжатой дистилляцией основных идей Wirth, поэтому нравится ли Вам его стиль или не или нет, я настоятельно рекомендую чтение этой книги.

55
ответ дан Dominic Cooney 28 February 2014 в 23:45
поделиться

Я соглашаюсь с Книжной ссылкой Дракона; IMO, это - полное руководство к конструкции компилятора. Подготовьтесь к некоторой жесткой теории, все же.

, Если Вы хотите книгу, которая легче на теории, , Игровое Мастерство Сценариев могло бы быть лучшей книгой для Вас. Если Вы - общий новичок в теории компилятора, она обеспечивает более нежное введение. Это не покрывает более практические методы парсинга (выбирающий непрогнозирующий рекурсивный спуск, не обсуждая LL или LR-анализ), и как я вспоминаю, это даже не обсуждает вида теории оптимизации. Плюс, вместо того, чтобы компилировать в машинный код, это компилирует в байт-код, который, как предполагается, работает на VM, который Вы также пишете.

Это - все еще достойное чтение, особенно если можно взять его для дешевого на Amazon. Если Вы только хотите легкое введение в компиляторы, Игровое Мастерство Сценариев не является плохим способом пойти. Если Вы хотите пойти хардкор впереди, то необходимо согласиться на не что иное как Книгу Дракона.

45
ответ дан user316 28 February 2014 в 23:45
поделиться

"Позволяют нам Сборка, Компилятор" является потрясающим, но это немного устарело. (Я не говорю, что это делает его даже немного менее допустимым.)

Или выезд СЛЕНГ . Это подобно для "Разрешения нам Сборка Компилятор", но является намного лучшим ресурсом специально для новичков. Это идет с учебным руководством PDF, которое проявляет 7 подходов шага при обучении Вам компилятор. Добавление quora ссылки, поскольку это имеет ссылки на все различные порты СЛЕНГА, в C++, Java и JS, также интерпретаторах в Python и Java, первоначально записанное использование C# и платформа.NET.

27
ответ дан 4 revs, 4 users 40% 28 February 2014 в 23:45
поделиться

Если Вы надеетесь использовать мощные, высокоуровневые инструменты вместо того, чтобы создать все сами, проходя проекты и чтения для , этот курс является довольно хорошим вариантом. Это - курс языков автором механизма синтаксического анализатора Java ANTLR. Можно получить книгу для курса как PDF от Прагматически настроенные Программисты .

курс пробегается через стандартный материал компилятора компилятора, который Вы видели бы в другом месте: парсинг, типы и проверка типа, полиморфизм, таблицы символов и генерация кода. В значительной степени единственной вещью, которая не покрыта, является оптимизация. Заключительный проект является программой что компиляции подмножество C. Поскольку Вы используете инструменты как ANTLR и LLVM, выполнимо записать весь компилятор в единственный день (у меня есть доказательство существования этого, хотя я действительно имею в виду ~24 часа). Это тяжело на практической разработке с помощью современных инструментов, немного легче на теории.

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

23
ответ дан 2 revs 28 February 2014 в 23:45
поделиться

Книга Дракона является определенно "книгой" компиляторов здания, но если Ваш язык не является вполне столь же сложным как текущее поколение языков, Вы можете хотеть посмотреть на шаблон Интерпретатора от Шаблоны разработки .

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

10
ответ дан Chris Bunch 28 February 2014 в 23:45
поделиться

"... Позвольте нам Сборка Компилятор... "

я был бы второй 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

9
ответ дан 3 revs 28 February 2014 в 23:45
поделиться

Простой способ создать компилятор состоит в том, чтобы использовать бизона и гибкий провод (или подобный), создать дерево (AST) и генерировать код в C. С генерацией C код, являющийся самым важным шагом. Путем генерации C кода, язык будет автоматически работать над всеми платформами, которые имеют компилятор C.

Генерация C код так же легка как генерация HTML (просто используют печать, или эквивалентный), который в свою очередь намного легче, чем запись синтаксического анализатора C или синтаксического анализатора HTML.

8
ответ дан Peter Stuifzand 28 February 2014 в 23:45
поделиться

Одна книга, еще не предложенная но очень важная, "Компоновщики и Загрузчики" John Levine. Если Вы не будете использовать внешний ассемблер, Вам будет нужен способ произвести объектный файл, который может быть связан в Вашу заключительную программу. Даже при использовании внешнего ассемблера необходимо будет, вероятно, понять перемещения и как целый процесс загрузки программы работает для создания рабочего инструмента. Эта книга собирает много случайных сведений вокруг этого процесса для различных систем, включая Win32 и Linux.

11
ответ дан Ben Combee 28 February 2014 в 23:45
поделиться

Если Вы готовы использовать LLVM, проверьте это: http://llvm.org/docs/tutorial/ . Это учит Вас, как записать компилятор с нуля с помощью платформы LLVM и не предполагает, что у Вас есть любое знание о предмете.

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

10
ответ дан wvdschel 28 February 2014 в 23:45
поделиться

Я изучаю то же понятие и нашел, что эта многообещающая статья Joel Pobar,

Создают Языковой компилятор для Платформы.NET - не уверенный, куда это пошло

, Создают Языковой компилятор для Платформы.NET - копия PDF исходного документа

, он обсуждает понятие высокого уровня компилятора и продолжает изобретать свой собственный язык для.Net платформы. Хотя ее нацеленный на.Net Платформу, многие понятия должны быть в состоянии быть воспроизведенными. Покрытия Статьи:

  1. Сканер определения
  2. Langauge
  3. Синтаксический анализатор (бит я главным образом интересуюсь)
  4. Предназначение для.Net Платформы
  5. Генератор кода

существует другие темы, но Вы получаете справедливое.

Его нацеленный людям, начинающим, записанный в C# (не совсем Java)

кости HTH

9
ответ дан 2 revs 28 February 2014 в 23:45
поделиться

Я записал учебное руководство онлайн на дизайне компилятора, названном, "Давайте создадим Компилятор Механизма сценариев, а также компилятор собственного кода под названием 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.

3
ответ дан Steve A 28 February 2014 в 23:45
поделиться

Компилятор LCC ( Википедия ) ( домашняя страница проекта ) Fraser и Hanson описан в их книге "компилятор C Retargetable: Разработка и реализация". Это довольно читаемо и объясняет целый компилятор, вниз к генерации кода.

7
ответ дан mfx 28 February 2014 в 23:45
поделиться

Необходимо проверить Darius Bacon" ichbins", который является компилятором для маленького диалекта Lisp, предназначаясь C, на чуть более чем 6 страницах кода. Преимущество, которое это имеет по большинству игрушечных компиляторов, состоит в том, что язык достаточно завершен, что компилятор записан в нем. (tarball также включает интерпретатор для начальной загрузки вещи.)

существует больше материала о том, что я нашел полезным в обучении записать компилятор на моем веб-страница Схемы Ура .

8
ответ дан 2 revs, 2 users 89%Kragen Javier Sitaker 28 February 2014 в 23:45
поделиться

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

я, рекомендуют "Процессоры языка программирования в Java: Компиляторы и Интерпретаторы", удивительная книга для программиста-самоучки.

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

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

Здание компилятор является забавной практикой программирования и может преподавать Вам "кучу" программирования навыков.

не покупают книга Дракона. Это было пустой тратой денег и время и не для практика.

1
ответ дан 2 revs, 2 users 71%Anru 1 March 2014 в 10:45
поделиться

Извините, это на испанском языке, но это библиография курса под названием "Compiladores" e Intérpretes "(составители и переводчики) в Аргентине.

Курс был от теории формального языка к построению компилятора, и вот темы, которые вам нужны для построения, по крайней мере, простого компилятора:

  • Проект компиляторов на C.
    Аллен И. Холуб

    Prentice -Hall. 1990.

  • Compiladores. Теория и строительство.
    Санчи Llorca, FJ, Galán Pascual, C. Редакция Paraninfo. 1988.

  • Конструктор компиляторов.
    Никлаус Вирт

    Эддисон-Уэсли. 1996.

  • Lenguajes, Gramáticas y Autómatas. Un enfoque práctico.
    Педро Исаси Виньуэла, Палома Мартинес Фернандес, Даниэль Боррахо Миллан. Аддисон-Уэсли Ибероамерикана (España). 1997.

  • Искусство дизайна компилятора. Теория и практика.
    Томас Питтман, Джеймс Питерс.

    Prentice-Hall. 1992.

  • Построение объектно-ориентированного компилятора.
    Джим Холмс.
    Прентис Холл, Энглвуд Cliffs, NJ 1995

  • Compiladores. Основные понятия.
    Б. Тойфель, С. Шмидт, Т. Теуфель.

    Аддисон-Уэсли Ибероамерикана. 1995.

  • Введение в теорию автоматов, языков и вычислений.

    Джон Э. Хопкрофт. Джеффре Д. Ульман.
    Эддисон-Уэсли. 1979.

  • Введение в формальные языки.
    György E. Révész. 1263 Мак Гроу Хилл. 1983.

  • Техника синтаксического анализа. Практическое руководство.
    Дик Грун, Цериэль Jacobs.
    Impreso por los autores. 1995
    http://www.cs.vu.nl/~dick/PTAPG.html

  • Yacc: еще один компилятор-компилятор.
    Стивен К. Джонсон
    Компьютерная наука Технический отчет № 32, 1975 г. Белл Лаборатории. Мюррей Хилл, Новый
    Джерси.

  • Лекс: Генератор лексического анализатора.
    ME Lesk, E. Schmidt. Компьютерные науки Технические Отчет № 39, 1975. Bell Laboratories. Мюррей Хилл, Нью-Джерси.

  • lex & yacc.
    Джон Р. Левин, Тони Мейсон, Даг Браун.
    О'Рейли и Партнеры. 1995.

  • Элементы теории вычислений.
    Гарри Р. Льюис, Христос Х. Пападимитриу. Segunda Edición. Прентис Холл. 1998.

  • Унифицированный исполнительный комитет по строительству и контролю над властью.
    Сальвадор В. Кавадини.
    Финал "Трабахо" в финале "Титуло де Инженерио эн компьюцияон".
    Facultad de Matemática Aplicada. UCSE 2001.

7
ответ дан 22 November 2019 в 21:37
поделиться
  1. Это обширная тема. Не стоит недооценивать этот момент. И не стоит недооценивать мою точку зрения, чтобы не недооценивать ее.
  2. Я слышал, что Книга Дракона - это (?) Место для начала, наряду с поиском. :) Старайтесь лучше искать, в конечном итоге это станет вашей жизнью.
  3. Создание собственного языка программирования - отличное упражнение! Но знайте, что в конечном итоге он никогда не будет использоваться для каких-либо практических целей. Исключений здесь немного, и очень далеко друг от друга.
7
ответ дан 22 November 2019 в 21:37
поделиться

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

Тем не менее, одна идея для простого подхода к этой теме (та, которую мы использовали в моем классе компиляторов, по крайней мере) состоит в том, чтобы собрать компилятор из двух частей, описанных выше. В частности, вы получите хорошее представление обо всем процессе, просто построив верхнюю половину.

Простая верхняя половина позволит вам получить опыт написания лексического анализатора и парсера и перейти к генерации некоторого «кода» (это промежуточное представление, которое я упомянул). Таким образом, он возьмет вашу исходную программу и преобразует ее в другое представление и произведет некоторую оптимизацию (если хотите), которая является сердцем компилятора. Затем нижняя половина примет это промежуточное представление и сгенерирует байты, необходимые для запуска программы в конкретной архитектуре. Например, нижняя половина примет ваше промежуточное представление и сгенерирует исполняемый файл PE.

Некоторые книги по этой теме, которые я нашел особенно полезными, - это Compilers Principles and Techniques (или «Книга драконов» из-за милого дракона на обложке). В нем есть отличная теория, и он определенно охватывает контекстно-свободные грамматики в действительно доступной форме. Кроме того, для построения лексического анализатора и парсера вы, вероятно, будете использовать инструменты lex и yacc * nix. И как ни странно, книга называлась "

70
ответ дан 22 November 2019 в 21:37
поделиться

Вы можете изучить Lex / Yacc (или Flex / Bison, как хотите их называть). Flex - это лексический анализатор, который будет анализировать и идентифицировать семантические компоненты («токены») вашего языка, а Bison будет использоваться для определения того, что происходит при анализе каждого токена. Это может быть, но определенно не ограничивается распечаткой кода C для компилятора, который будет компилироваться в C, или динамическим выполнением инструкций.

Этот FAQ должен вам помочь, а этот учебник выглядит весьма полезным.

17
ответ дан 22 November 2019 в 21:37
поделиться

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

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

Первый шаг - написать формальное описание языка, грамматику вашего языка программирования. Затем вам нужно преобразовать исходный код, который вы хотите скомпилировать или интерпретировать в соответствии с грамматикой, в абстрактное синтаксическое дерево, внутреннюю форму исходного кода, которую компьютер понимает и с которой может работать. Этот шаг обычно называется синтаксическим анализом, а программное обеспечение, которое анализирует исходный код, называется синтаксическим анализатором. Часто синтаксический анализатор генерируется генератором синтаксического анализатора, который преобразует формальную грамматику в исходный машинный код. Для хорошего, Нематематическое объяснение синтаксического анализа Я рекомендую "Методы синтаксического анализа - практическое руководство". В Википедии есть сравнение генераторов парсеров, из которых вы можете выбрать тот, который вам подходит. В зависимости от выбранного вами генератора синтаксического анализатора вы найдете учебные пособия в Интернете, а для действительно популярных генераторов синтаксического анализатора (например, GNU bison) есть также книги.

Написание синтаксического анализатора для вашего языка может быть очень сложным, но это зависит от вашего грамматика. Поэтому я предлагаю сделать вашу грамматику простой (в отличие от C ++); Хорошим примером этого является LISP.

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

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

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

Есть несколько книг по этой теме, но я не могу рекомендовать ни одну из них для общего использования. Большинство из них слишком академичны или слишком практичны. Не существует «Научитесь писать компилятор за 21 день», и поэтому вам придется купить несколько книг, чтобы хорошо разобраться в этой теме. Если вы поищете в Интернете, вы найдете несколько онлайн-книг и конспектов лекций. Может быть, поблизости от вас есть университетская библиотека, где вы можете брать книги по компиляторам.

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

17
ответ дан 22 November 2019 в 21:37
поделиться

Я помню, как задавал этот вопрос около семи лет назад, когда я был довольно новичком в программировании.

Я был очень осторожен, когда спрашивал, и, что удивительно, меня не так много критиковали, как вы. добраться сюда. Однако они указали мне направление « Dragon Book », которая, на мой взгляд, действительно отличная книга, которая объясняет все, что вам нужно знать, чтобы написать компилятор (вам, конечно, придется освоить язык или два. Чем больше языков ты знаешь, тем веселее.).

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

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

  • Потому что это весело.
  • Это ' В образовательных целях, когда вы научитесь писать компиляторы, вы узнаете много нового о информатике и других методах, которые могут быть полезны при написании других приложений.
  • Если бы никто не писал компиляторы, существующие языки не стали бы лучше.

Я не сделал этого. Не сразу напишу свой собственный компилятор, но, спросив, я понял, с чего начать. А теперь, когда вы выучили много разных языков и прочитали Книгу Дракона, письмо стало не такой уж большой проблемой. (Я также изучаю компьютерную инженерию, но большую часть того, что я знаю о программировании, я получил самостоятельно.)

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

10
ответ дан 22 November 2019 в 21:37
поделиться

Не книга, а технический документ и чрезвычайно интересный опыт обучения, если вы хотите узнать больше о компиляторах (и метакомпиляторах) ... Этот веб-сайт проведет вас через создание полностью автономного система компилятора, которая может компилировать себя и другие языки:

Tutorial: Metacompilers Part 1

Все это основано на удивительном маленьком 10-страничном техническом документе:

Val Schorre META II: синтаксически ориентированный Язык написания компиляторов

от честного до бога 1964 года. Я научился создавать компиляторы из этого еще в 1970 году. Наступает умопомрачительный момент, когда вы, наконец, понимаете, как компилятор может регенерировать себя ....

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

6
ответ дан 22 November 2019 в 21:37
поделиться

Из comp.compilers FAQ :

«Программирование персонального компьютера» Пера Бринча Хансена Прентис-Холл 1982 ISBN 0-13-730283-5

Книга с печальным названием объясняет дизайн и создание однопользовательской среды программирования для микросхем, используя язык, подобный Паскалю, под названием Edison. Автор представляет весь исходный код и пояснения к пошаговой реализации Компилятор Edison и простая поддерживающая операционная система, все написано на Сам Эдисон (за исключением небольшого поддерживающего ядра, написанного на символическом ассемблер для PDP 11/23; полный исходный код также можно заказать для IBM ПК).

Самое интересное в этой книге: 1) ее способность продемонстрировать, как создать полную, автономную, самоподдерживающуюся, полезный компилятор и операционная система, и 2) интересное обсуждение языковой дизайн и проблемы спецификации и компромиссы в главе 2.

"Бринч Хансен на компиляторах Паскаля" Пер Бринч Хансен Прентис-Холл 1985 ISBN 0-13-083098-4

Еще один свет теории прагматика, вот книга с инструкциями по программированию. Автор представляет дизайн, реализация и полный исходный код для компилятора и p-кода интерпретатор для Паскаля- (Паскаль «минус»), подмножество Паскаля с логическими и целочисленные типы (но без символов, вещественных чисел, поддиапазонов или перечислимых типов), определения констант и переменных, а также типы массивов и записей (но не упакованные, вариант, набор, указатель, безымянный, переименованный или типы файлов), выражения, операторы присваивания, определения вложенных процедур со значением и переменной параметры, операторы if, операторы while и блоки begin-end (но не определения функций, процедурные параметры, операторы перехода и метки, операторы case, операторы повтора, операторы for и операторы with).

Компилятор и интерпретатор написаны на Паскале * («звезда» Паскаля), Подмножество Паскаля расширено некоторыми функциями в стиле Эдисона для создания системы разработки программного обеспечения. Компилятор Pascal * для IBM PC продается автора, но компилятор Паскаля легко портировать на любой удобная платформа Pascal.

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

8
ответ дан 22 November 2019 в 21:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: