Подтвердить что ты не робот

Ресурсы обучения для парсеров, переводчиков и компиляторов

Я хотел бы поиграть с написанием своего собственного языка на некоторое время (якобы для обучения) и, как таковой, должен быть относительно обоснован в построении Parsers, Interpreters и Compilers. Итак:

  • Кто-нибудь знает какие-либо хорошие ресурсы для создания Parsers, интерпретаторов и компиляторов?

EDIT: я не ищу компиляторы-компиляторы/парсер-компиляторы, такие как Lex, Yacc и Bison...

4b9b3361

Ответ 1

Лучшая статья, которую я когда-либо читал о компиляторах, датируется 1964 "META II - синтаксически-ориентированный язык написания компилятора" Валь Шорре. (http://doi.acm.org/10.1145/800257.808896)

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

Здесь есть ссылка, чтобы играть с большим учебником по метакомпиляции, основанный на документе. http://www.bayfronttechnologies.com/mc_tutorial.html

Ответ 2

Aho "Книга драконов" является стандартной ссылкой, но другим хорошим выбором является Andrew Appel Современная реализация компилятора в Java (также доступна в ML и C ароматы). Он предлагает вам шаг за шагом через каждый из необходимых компонентов компилятора/интерпретатора и предоставляет много полезного исходного кода.

Ответ 3

Это очень интересное сообщение в блоге от Steve Yegge (Rich Programmer Food) не расскажет вам все, что вам нужно знать о том, как построить компилятор (хотя он включает в себя достаточное количество хорошего понимания), но он отлично справляется с объяснением, почему вы хотите понять, что у него есть.

Черт, этот пост почти заставил меня начать изучать компиляторы, и у меня есть работа на полный рабочий день, трехлетний ребенок дома и около -1,5 бесплатных часов в день в среднем.

Ответ 6

У сайта MIT OpenCourseWare (OCW) есть класс, чей проект состоит в создании более сложного... они относятся к книге Дракона и книге Аппеля, но кроме того, есть также заметки и лекции по классу. Класс 6.035 - Computer Language Engineering.

Я нашел заметки класса очень полезными для объяснения парсеров рекурсивного спуска.

Ответ 7

Я нашел "Let build the compiler" - учебник Джека Креншоу, очень простой для понимания и понимания. Джек строит компилятор для Pascal, с самого начала, с очень подробными объяснениями на каждом шагу.

Ответ 8

Я рекомендую Compiler Design в C, который, к сожалению, вам нужно будет найти на используемом книжном сайте. Единственная реальная проблема с книгой заключается в том, что она была записана обратно, когда скорость компиляции была важным фактором, поэтому компилятор написан на C. Это достаточно низкий уровень языка, который иногда теория реализации похожа на код реализации.

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

Ответ 9

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

Ответ 10

RE: lex, yacc, bison

Вы имеете в виду, что вам не нужны указатели на них или что вы не заинтересованы в их использовании? Я не рекомендую писать лексер или парсер вручную.

EDIT: у вас может быть преувеличенное ощущение того, что может сделать "компилятор-компилятор": действительно сложная часть компиляции начинается после того, как вы создали AST. Книги Ахо, Лоудена и Аппеля неплохие.

Ответ 11

На всякий случай вы:

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

... тогда я бы рекомендовал вам проверить время выполнения Microsoft Dynamic Language Runtime, которое предоставляется как исходный код внутри всего пакета Dynamic Silverlight SDK.

http://www.codeplex.com/sdlsdk

Некоторые приятные вещи об этом - это то, что он предоставляет множество готовых к использованию функций, таких как консоль, система общего типа, общее абстрактное синтаксическое дерево и т.д. И пакет включает три реализации: Python, Ruby и Javascript.

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

В любом случае, удачи с другого уродного языка!

Ответ 12

Это старая книга и довольно устаревшая, но я нашел Brinch Hansen на Pascal Compilers очень практичным введением в создание языка и создание элементов компилятора. Несмотря на название, это не относится к Паскалю. Это очень полезно, если вы можете найти копию.