26

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

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

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

+1

Возможный дубликат [Учимся писать компилятор] (http: // stackoverflow.com/вопросы/1669/learning-to-write-a-compiler) – nawfal

ответ

7

«Дракон книга» Ахо является стандартной справочной, но еще один хороший выбор Эндрю Аппель в Modern Compiler Implementation in Java (также доступно в ML и C ароматизаторов). Он проводит шаг за шагом через каждый из необходимых компонентов компилятора/интерпретатора и предоставляет много полезного исходного кода.

+0

+1, владейте ими, хорошие книги. –

1

RE: LEX, Yacc, зубр

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

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

+0

s/hard/hard и fun/g –

+0

[@Chris Conway] (http://stackoverflow.com/questions/41785/learning-resources-on-parsers-interpreters-and-compilers#41805) Поскольку одна из основных причин для Изучая эту тему, узнайте об этом, я больше ищу работу над созданием чего-то подобного с нуля. Я знаю довольно много _compiler-compilers_ и т. Д., И я, скорее всего, рассмотрю, как они реализованы, но кроме этого я хочу ресурсов, которые помогут мне лучше понять, как работают синтаксические анализаторы, интерпретаторы и компиляторы, и как реализовать их. – akdom

7

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

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

2

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

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

2

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

+0

Я думаю, что эта книга намного лучше, чем книга дракона для стартера. Настоятельно рекомендуется. –

1

Только в случае, если:

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

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

http://www.codeplex.com/sdlsdk

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

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

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

3

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

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

3

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

0

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

9

Лучшая бумага я когда-либо читал на составителей датирована «META II синтаксис-ориентированный компилятор языка написания» Вэл Schorre. (http://doi.acm.org/10.1145/800257.808896)

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^