Я ищу простой компилятор, который компилирует простой язык, мне нужен он, чтобы написать работу об этом и изучить, как компиляторы работают, я не ищу сложную вещь просто простой язык (простым, я имею в виду маленький код, потому что, например, gcc toooooo большой). любая справка ценится.
Если вы хотите посмотреть код, я очень впечатлен компилятором Eijiro Sumii MinCaml .
Это всего 2000 строк.
Он компилирует довольно интересный исходный язык.
Он генерирует настоящий машинный код, ни один из этих глупых C или LLVM: -)
Скорость скомпилированного кода конкурирует с gcc и собственными компиляторами OCaml.
Компилятор предназначен для обучения.
Я упоминал, что был очень впечатлен?
Brainfucked - это компилятор чрезвычайно простодушного языка Brainfuck .
Зависит от вашего представления о простом. Вы можете посмотреть один из множества доступных компиляторов BrainFuck. Это чрезвычайно простой язык, а компиляторы очень маленькие. Но я не знаю, насколько это расскажет вам о том, как работает «настоящий» компилятор.
А как насчет небольшого компилятора C? C не очень компилируется, и я думаю, это даст вам некоторое представление о конструкции компилятора.
Вы можете посмотреть пример калькулятора в Bjarne Веселая книга Страуструпа «Язык программирования C ++».
Если вам нужно что-то более продвинутое, прочтите исходный код boost :: spirit.
Google UCSD Pascal . Это был прорыв в 70-е годы. Может быть, это больше, чем вы хотите, но тогда это было легко портировать на множество "микрочипов".
LISP (схемы и т. Д.) - это самые простые реальные языки. Вы можете посмотреть, как построить примитивный интерпретатор схемы на perl, с помощью этой книги (бумажная версия здесь, на Lulu ). Парсинг, проверка типов аналогичны в интерпретаторах и компиляторах. Затем, вот более хардкорная книга по теме проектирования компилятора (также доступна как мертвое дерево на Lulu ).
Вам следует прочитать книгу по проектированию компиляторов; в нем должна быть теория, которую вы хотите знать, а также несколько достаточно простых примеров.
Я рекомендую "книгу дракона": Принципы проектирования компилятора , Ахо и Ульман. С тех пор, как я его читал, прошло много лет, поэтому я не помню, какие именно примеры доступны, но это очень хороший текст.
Вы можете многое использовать, и то, что вам будет проще, будет зависеть от вашего опыта.
Во-первых, что касается языка:
Затем, выбор вашего компилятора.
Вы можете начать с ассемблера - превратить ассемблер в машинный код. Это был первый шаг в создании компиляторов - я бы предложил микросхемы вроде 6502 или 8080, которые оба очень просты. Что-то вроде ассемблера ' Комплект разработчика может хорошо работать для вас (он поставляется с примерами)
Многие люди (включая меня) будут утверждать, что самые простые языки для написания компиляторов являются функциональными - в настоящее время это, вероятно, означает Haskell, Scheme или Common Lisp. Пример того, насколько это просто - это сообщение в блоге . Он пишет компилятор, который просто компилирует арифметические выражения в несколько строк. Этого может быть достаточно для вас.
Почти каждое введение в написание компиляторов на академическом уровне начинается с минимального языка в качестве примера, Книги Дракона http://en.wikipedia.org/wiki/Dragon_Book_% 28computer_science% 29 всегда рекомендуется, но есть и другие хорошие.
В университете я использовал C--, который похож на C, но для него еще проще написать компилятор. Много ресурсов на: http://www.cminusminus.org/qc--. html
Если вам нужен компилятор и вы знаете такой язык, как Java, я бы предложил что-то вроде JavaCC , где язык определяется с помощью грамматик. Здесь есть множество примеров грамматик - для начала выберите что-нибудь простое, например C.
Посмотрите на простой компилятор для PL / 0 (небольшое паскальподобное подмножество - без параметров, только целые данные). Исходный код, написанный на Паскале, составляет всего около 500 строк кода, и ему легко следовать. Это может быть все, на что вам нужно взглянуть.
Однако, если вы хотите пойти немного дальше, как только вы освоитесь с этим, посмотрите исходный код Pascal-S. Это компилятор для более крупного подмножества Паскаля, но он включает некоторые дополнительные концепции, такие как передача параметров, дополнительные типы данных, а также массивы и записи (структуры). Тем не менее, это всего около 2000 строк кода, и вам будет легко следовать, как только вы освоите PL / 0.
Вы можете найти источники здесь:
About 1000 lines of code. Compiles Scheme to LLVM assembler or to C. I would say this is an excellent fit for a paper on compilers. If you want to go deeper, I recommend the book "SICP".
В моей бывшей ИТ-школе нам нужно было разработать компилятор на C ++, но не с нуля: были шаги, кривая обучения и т. Д.
Концепция компилятора TIGER и назначения проекта
Все документы доступны, но сам код - нет, так что вам придется делать все самостоятельно.
Там много понятной и полезной информации, это может быть хорошее начало для обучения программированию компилятора.
Стандартный ресурс Stack Overflow для ресурсов при написании компилятора - Обучение написанию компилятора
Джек Креншоу, доктор философии. кто много писал о практических численных методах, долгое время боялся компиляторов. В конце концов он устал от страха и написал состоящий из нескольких частей учебник по построению компилятора, основанный на том, что он узнал, когда изучал этот предмет.
См. «Давайте создадим компилятор» для Дополнительная информация. Обратите внимание, что он не полный; он выдохся еще до того, как закончил, но там много легко усваиваемой информации.
Я начал видео-учебник по написанию компилятора ANTLR 3.x - смотрите
http://javadude.com/articles/antlr3xtut
Скоро я добавлю еще! -- Скотт