Хороший исходный код для компонентов компилятора - PullRequest
1 голос
/ 27 января 2011

Я сейчас прохожу курс по компиляторам. Мне не нравится идея слепого запоминания фактов без какого-либо места для их применения. Я хочу учиться на практике.

Итак, я хотел бы иметь полный код из 3-4 компиляторов, возможно, для языков с различными правилами синтаксиса (python, c, c ++, java) при работе с книгой Dragon.

Если полные компиляторы слишком сложны, примеры парсеров (хорошо написанных парсеров LL, LR, LALR) и генераторов промежуточного кода для этих языков также подойдут.

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

Ответы [ 6 ]

2 голосов
/ 27 января 2011

Существует множество простых и понятных компиляторов:

UPDATE:

Вероятно, самый впечатляющий: - http://community.schemewiki.org/?90min-scheme2c

2 голосов
/ 27 января 2011

Вы можете получить код для компилятора Lua с lua.org, они распространяют полный исходный код, а также вы можете получить исходный код GCC, который компилируется на C и C ++.

1 голос
/ 27 января 2011

Документация анализатора Python.Исходный код является частью вашего дистрибутива Python.Установите Python, и вы получите исходный код модуля.

http://docs.python.org/library/parser.html#module-parser

Старый пакет компилятора.

0 голосов
/ 27 января 2011

Я бы определенно посмотрел на Инфраструктура компилятора LLVM . Это не сам компилятор, а основные инструменты для написания компиляторов, интерпретаторов и виртуальных машин. Clang - это компилятор C / C ++, построенный на этой платформе.

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

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

0 голосов
/ 27 января 2011

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

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

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

0 голосов
/ 27 января 2011
  • C / C ++: GCC (старая и хрустящая кодовая база, но чрезвычайно популярная) или clang (более новая, модульная, приближающаяся к качеству производства, поддерживаемая Apple, в частности) , Также есть TCC - компилятор Tiny C, который, вероятно, будет полезен для обучения.
  • Python: PyPy , Python без стека или оригинальный cpython - хорошие реализации
  • Java: Если вы просто заботитесь о компиляторе байт-кода, посмотрите, например, Jikes . Если вам нужен JIT и еще много чего, openjdk для вас.

Тем не менее, реальные компиляторы могут быть довольно сложными; Построение игрушечного компилятора может быть проще для понимания. Тем не менее, TCC, вероятно, будет лучшей отправной точкой из этой группы, так как он достаточно мал, чтобы легко понять.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...