compiler-construction compiler - Обучение написанию компилятора





list java (25)


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

Я бы добавил книгу Oberon которой содержится полный источник удивительно быстрого и простого Oberon-компилятора Project Oberon .

Предпочтительные языки : C / C ++, Java и Ruby.

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




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

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

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

Никлаус Вирт, Юрг Гуткнехт

(Лечение не столь обширно, как его книга о компиляторах)

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




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

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




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

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

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




Я думаю, что Modern Compiler Implementation в ML - лучший вводный текст для компилятора. Также есть версия Java и версия C , которая может быть более доступной с учетом фона вашего языка. В книге собраны много полезных базовых материалов (сканирование и разбор, семантический анализ, записи активации, выбор команд, генерация кода RISC и x86) и различные «расширенные» темы (компиляция OO и функциональных языков, полиморфизм, сбор мусора, оптимизация и одиночная статическая форма назначения) в относительно небольшое пространство (~ 500 страниц).

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

Должен признаться, у меня серьезное мягкое пятно для компилятора Никлауса Вирта . Он доступен онлайн в формате PDF. Я считаю, что эстетическое программирование Вирта просто красиво, однако некоторые люди считают его стиль слишком минимальным (например, Вирт выступает за рекурсивные партизаны спуска, но большинство курсов CS сосредоточены на инструментах генератора парсеров, дизайн языка Вирта довольно консервативен.) Compiler Construction - очень сжатая дистилляция основных идей Вирта, поэтому, нравится ли вам его стиль или нет или нет, я настоятельно рекомендую прочитать эту книгу.







Я рассматриваю ту же концепцию и нашел эту многообещающую статью Джоэла Побара,

Создание компилятора языка для .NET Framework

он обсуждает концепцию компилятора высокого уровня и приступает к разработке своего собственного langauge для .NET-структуры. Хотя он нацелен на .NET Framework, многие концепции должны быть воспроизведены. Статья охватывает:

  1. Определение Langauge
  2. сканер
  3. Parser (в основном это интересует)
  4. Ориентация на .Net Framework
  5. Генератор кода

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

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

НТН

скелет




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

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

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

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

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

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




Книга Дракона, безусловно, является «сборщиком компиляторов», но если ваш язык не так сложен, как текущее поколение языков, вы можете посмотреть шаблон интерпретатора из шаблонов проектирования .

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




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

Учебник: Метакомпиляторы Часть 1

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

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

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

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




Я согласен с ссылкой на книгу Дракона; ИМО, это окончательное руководство по построению компилятора. Однако приготовьтесь к какой-то хардкорной теории.

Если вам нужна книга, более легкая в теории, Game Scripting Mastery может стать для вас лучшей книгой. Если вы являетесь новичком в теории компиляторов, он предлагает более мягкое введение. Он не охватывает более практические методы парсинга (выбор для неиндексивного рекурсивного спуска без обсуждения разбора LL или LR), и, как я помню, он даже не обсуждает какую-либо теорию оптимизации. Кроме того, вместо компиляции в машинный код он компилируется в байт-код, который должен запускаться на виртуальной машине, которую вы также пишете.

Это по-прежнему достойное чтение, особенно если вы можете забрать его за дешево на Amazon. Если вы хотите простое введение в компиляторы, Game Scripting Mastery - неплохой путь. Если вы хотите пойти хардкор вперед, тогда вы должны довольствоваться ничем иным, как Книгой Дракона.




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

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

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

Некоторые книги по этой теме, которые я нашел особенно полезными, были Принципы и методы составителей (или Книга Дракона, из-за милого дракона на обложке). У этого есть отличная теория и определенно охватывает Контекстно-свободные Граммары в действительно доступной манере. Кроме того, для создания лексического анализатора и анализатора вы, вероятно, будете использовать инструменты * nix lex и yacc. И неинтересно, книга, названная « lex и yacc », поднялась там, где Книга Дракона остановилась для этой части.




Если вы заинтересованы в написании компилятора для функционального языка (а не процедурного), Саймон Пейтон-Джонс и Дэвид Лестер « Реализация функциональных языков: учебник » - отличный справочник.

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

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




Если у вас мало времени, я рекомендую ethoberon.ethz.ch/WirthPubl/CBEAll.pdf - крошечный буклет, который вы можете прочитать за день, но он объясняет основы (в том числе, как реализовать лексеры, рекурсивные партизаны спуска, и ваши собственные виртуальные машины на основе стека). После этого, если вы хотите погрузиться в глубокое погружение, в книге Драконов нет никакой возможности, как предлагают другие комментаторы.




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



Вы можете использовать BCEL у Apache Software Foundation. С помощью этого инструмента вы можете генерировать ассемблерный код, но это Java с API BCEL. Вы можете узнать, как вы можете генерировать код промежуточного языка (в данном случае байтовый код).

Простой пример

  1. Создайте класс Java с помощью этой функции:

    public String maxAsString(int a, int b) {
        if (a > b) {
            return Integer.valueOf(a).toString();
        } else if (a < b) {
            return Integer.valueOf(b).toString();
        } else {
            return "equals";
        }
    }
    

Теперь запустите BCELifier с этим классом

BCELifier bcelifier = new BCELifier("MyClass", System.out);
bcelifier.start();

Вы можете увидеть результат на консоли для всего класса (как построить байтовый код MyClass.java). Код для функции:

private void createMethod_1() {
  InstructionList il = new InstructionList();
  MethodGen method = new MethodGen(ACC_PUBLIC, Type.STRING, new Type[] { Type.INT, Type.INT }, new String[] { "arg0", "arg1" }, "maxAsString", "MyClass", il, _cp);

  il.append(InstructionFactory.createLoad(Type.INT, 1)); // Load first parameter to address 1
  il.append(InstructionFactory.createLoad(Type.INT, 2)); // Load second parameter to adress 2
    BranchInstruction if_icmple_2 = InstructionFactory.createBranchInstruction(Constants.IF_ICMPLE, null); // Do if condition (compare a > b)
  il.append(if_icmple_2);
  il.append(InstructionFactory.createLoad(Type.INT, 1)); // Load value from address 1 into the stack
  il.append(_factory.createInvoke("java.lang.Integer", "valueOf", new ObjectType("java.lang.Integer"), new Type[] { Type.INT }, Constants.INVOKESTATIC));
  il.append(_factory.createInvoke("java.lang.Integer", "toString", Type.STRING, Type.NO_ARGS, Constants.INVOKEVIRTUAL));
  il.append(InstructionFactory.createReturn(Type.OBJECT));
  InstructionHandle ih_13 = il.append(InstructionFactory.createLoad(Type.INT, 1));
  il.append(InstructionFactory.createLoad(Type.INT, 2));
    BranchInstruction if_icmpge_15 = InstructionFactory.createBranchInstruction(Constants.IF_ICMPGE, null); // Do if condition (compare a < b)
  il.append(if_icmpge_15);
  il.append(InstructionFactory.createLoad(Type.INT, 2));
  il.append(_factory.createInvoke("java.lang.Integer", "valueOf", new ObjectType("java.lang.Integer"), new Type[] { Type.INT }, Constants.INVOKESTATIC));
  il.append(_factory.createInvoke("java.lang.Integer", "toString", Type.STRING, Type.NO_ARGS, Constants.INVOKEVIRTUAL));
  il.append(InstructionFactory.createReturn(Type.OBJECT));
  InstructionHandle ih_26 = il.append(new PUSH(_cp, "equals")); // Return "equals" string
  il.append(InstructionFactory.createReturn(Type.OBJECT));
  if_icmple_2.setTarget(ih_13);
  if_icmpge_15.setTarget(ih_26);
  method.setMaxStack();
  method.setMaxLocals();
  _cg.addMethod(method.getMethod());
  il.dispose();
}



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

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

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

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

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

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

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

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

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




Компилятор LCC ( wikipedia ) ( главная страница проекта ) Фрейзера и Хансона описан в их книге «A Retargetable C Compiler: Design and Implementation». Это вполне читаемо и объясняет весь компилятор, вплоть до генерации кода.




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

Сгенерировать код C так же просто, как генерировать HTML (просто использовать печать или эквивалент), что, в свою очередь, намного проще, чем писать парсер S или парсер HTML.




«Давайте построим компилятор» - это потрясающе, но это немного устарело. (Я не говорю, что это делает его даже немного менее действенным.)

Или проверить SLANG . Это похоже на «Давайте создадим компилятор», но это гораздо лучший ресурс, особенно для начинающих. Это связано с учебным пособием в формате pdf, в котором вы получаете 7-ступенчатый подход к обучению вас компилятору. Добавляя ссылку quora, поскольку она имеет ссылки на все порты SLANG, на C ++, Java и JS, также интерпретаторы в python и java, изначально написанные с использованием C # и платформы .NET.




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




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

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

  • Компиляторы в C.
    Аллен И. Голуб

    Prentice-Hall. 1990.

  • Compiladores. Теория и конструкция.
    Санхис Ллорка, Ф. Дж., Галан Паскуаль, С. Редактор Паранфо. 1988.

  • Строительство компилятора.
    Никлаус Вирт

    Addison-Wesley. 1996.

  • Lenguajes, Gramáticas y Autómatas. Un enfoque práctico.
    Педро Исаси Виньуэла, Палома Мартинес Фернандес, Даниэль Боррахо Миллан. Addison-Wesley Iberoamericana (Испания). 1997.

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

    Prentice-Hall. 1992.

  • Объектно-ориентированное построение компилятора.
    Джим Холмс.
    Prentice Hall, Englewood Cliffs, NJ 1995

  • Compiladores. Концептуальные основы.
    B. Teufel, S. Schmidt, T. Teufel.

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

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

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

  • Введение в формальные языки.
    Дьёрдь Э. Ревеш.

    Mc Graw Hill. 1983.

  • Методы анализа. Практическое руководство.
    Дик Груне, Кериэль Джейкобс.
    Impreso por los autores. 1995
    http://www.cs.vu.nl/~dick/PTAPG.html

  • Yacc: Еще один компилятор-компилятор.
    Стивен К. Джонсон
    Технический отчет по вычислительным наукам Nº 32, 1975. Bell Laboratories. Мюррей Хилл, Нью
    Джерси.

  • Лекс: генератор лексического анализатора.
    М. Е. Леск, Э. Шмидт. Технический отчет по вычислительным наукам Nº 39, 1975. Bell Laboratories. Мюррей Хилл, Нью-Джерси.

  • lex & yacc.
    Джон Р. Левин, Тони Мейсон, Дуг Браун.
    O'Reilly & Associates. 1995.

  • Элементы теории вычислений.
    Гарри Р. Льюис, Христос Х. Пападимитриу. Сегунда Эдисьон. Prentice Hall. 1998.

  • Un Algoritmo Eficiente para la Construcción del Grafo de Dependencia de Control.
    Сальвадор В. Кавадини.
    Trabajo Final de Grado para obtener el Título de Ingeniero en Computación.
    Facultad de Matemática Aplicada. UCSE 2001.




Часто задаваемые вопросы о comp.compiler :

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

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

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

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

Еще одна световая теория о тяжелой прагматике здесь - как-к-коду - это книга. Автор представляет проект, реализацию и полный исходный код для интерпретатора компилятора и p-кода для Pascal- (Pascal «минус»), подмножество Pascal с булевыми и целочисленными типами (но без символов, реалов, подменю или перечислимых типов) , константы и переменные определения, типы массивов и записей (но не упакованные, варианты, набор, указатель, безымянный, переименованный или типы файлов), выражения, операторы присваивания, определения вложенных процедур со значениями и переменными параметрами, если утверждения, и начальные блоки (но не определения функций, процедурные параметры, операторы goto и метки, заявления о случаях, заявления повторения, для операторов и с операторами).

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

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




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




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

Я бы также рекомендовал « Парадигмы программирования искусственного интеллекта», «Case Studies in Common Lisp » Питера Норвига. Он содержит описание компилятора Схемы, написанного в Common Lisp. Как правило, это замечательная книга.

Также см. Эту Библиографию о методах внедрения Схемы .

Для Common Lisp доступны статьи, а некоторые компиляторы Common Lisp поставляются с небольшим количеством документации по реализации и внутренним компонентам компилятора. Обычно компилятор нельзя рассматривать изолированно, но его следует рассматривать в сочетании с исполняемой средой, с которой он компилируется (GC, наборы инструкций, управление памятью в целом, потоки, интерфейсы FFI, ...). См., Например, Design of CMU Common Lisp .





compiler-construction language-agnostic