Я ищу простой компилятор, который компилирует простой язык, мне нужно, чтобы он написал статью об этом и узнал, как работают компиляторы, я не ищу сложную вещь, просто простой язык (простым я имею в виду небольшой код, потому что, например, gcc является toooooo большим). любая помощь приветствуется.есть простой компилятор для небольшого языка
ответ
Если вы хотите посмотреть код, я очень впечатлен составом Eijiro Sumii MinCaml.
Это всего лишь 2000 строк.
Он компилирует довольно интересный исходный язык.
Это создает реальные машинный код, ни один из этого сентиментальных С или LLVM вещи :-)
Скорости скомпилированного кода конкурентна с GCC и родными компиляторами OCaml.
Компилятор предназначен для обучения.
Я упоминал, что я был очень впечатлен?
Brainfucked - это компилятор для чрезвычайно простого мышления Brainfuck.
Эта реализация действительно полезна, если вы программист на сборку Windows. Я бы добровольно выполнил мою реализацию, но в настоящее время она переписывается для обеспечения удобства. И это не так много компилятора, он просто переводит на C (или сборку NASM). –
Вы можете посмотреть пример калькулятора в веселой книге Bjarne Stroustrup «Язык программирования C++».
Если вы хотите что-то более продвинутое, прочитайте исходный код boost :: spirit.
'boost :: spirit' не является компилятором, это генератор синтаксического анализатора (компилятор-компилятор AKA). – AraK
Зависит от вашего зрения. Вы можете посмотреть на один из доступных BrainFuck компиляторов. Это очень простой язык, и компиляторы очень малы. Но я не знаю, как много это скажет вам о том, как работает «настоящий» компилятор.
Как насчет просмотра небольшого компилятора C? C не очень компилируется, и я думаю, что это даст вам некоторое представление о конструкции компилятора.
Возможно, вам понадобится Tiny C Compiler. http://bellard.org/tcc/ –
А, да, спасибо. Это именно то, о чем я думал, но я не мог вспомнить имя. –
Будь! «Поддерживается скрипт C: просто добавьте« #!/Usr/local/bin/tcc -run »! Я думаю, что нашел свой новый «скриптовый» язык для Linux! –
Вы должны прочитать книгу о конструкции компилятора; он должен иметь теорию, которую вы хотите знать, а также некоторые из простых примеров.
Я рекомендую «книгу драконов»: Принципы проектирования компилятора, Ахо и Ульман. Прошло много лет с тех пор, как я прочитал его, поэтому не помню, какие примеры доступны, но это очень хороший текст.
+1 - вы узнаете больше и быстрее, читая книгу, чем пытаетесь понять компилятор, читая его исходный код. –
Книга дракона, как мне кажется, трудно читать. –
Любой, кто рекомендует книгу драконов новичку, очевидно, никогда не читал. – 2009-12-16 11:53:38
Есть много, что вы можете использовать, то, что вы найдете легче всего, будет зависеть от вашего опыта.
Во-первых, что касается языка:
- Самый простой игрушечный язык, например, составление арифметических выражений.
- Следующий ассемблер - снова действительно просто перевод, но показывает основы разбора и превращения в op-коды
- Следующий, вероятно, что-то вроде C, который очень близок к чистому ассемблеру или что-то вроде LISP, который очень близок к чистой теории.
Далее, выбрав свой компилятор.
Вы можете начать с ассемблера - превратить ассемблер в машинный код. Это был первый шаг в создании компиляторов - я бы предложил для чипа, такого как 6502 или 8080, которые оба очень просты. Что-то вроде assembler's development kit может работать хорошо для вас (в нем есть примеры)
Многие люди (включая меня) утверждают, что самые легкие языки для написания компиляторов являются функциональными - в настоящее время это, вероятно, означает Haskell, Scheme или Common Lisp. Пример того, насколько это просто, - this blog post. Он пишет компилятор, который просто компилирует арифметические выражения в нескольких строках. Это может быть достаточно для вас.
Почти каждое введение в составление письменных компиляторов на академическом уровне начинается с минимального языка в качестве примера, всегда рекомендуется использовать the Dragon Book http://en.wikipedia.org/wiki/Dragon_Book_%28computer_science%29, но есть и другие хорошие.
В университете я использовал C--, который похож на C, но еще проще написать компилятор. Много ресурсов в: http://www.cminusminus.org/qc--.html
Если вам нужен компилятор, и вы знаете язык, подобный Java, я бы предложил что-то вроде JavaCC, где язык указан с использованием грамматик. Есть lots of example grammars here - выберите что-то простое, как C, чтобы начать.
Я рекомендую TinyScheme или jonesforth.
Excecpt TinyScheme не является компилятором. Джонсонфорт был хорошим предложением, хотя и не знал об этом. –
LISPes (Схема и т. Д.) - самые простые фактические языки. Вы можете посмотреть, как построить примитивный интерпретатор схемы в perl с помощью this book (бумажная версия here on Lulu). Анализ, проверка типов аналогична интерпретаторам и компиляторам. Затем здесь находится more hardcore book on the compiler design subject (также доступен как dead tree on Lulu).
About 1000 lines of code. Compiles Scheme to LLVM assembler or to C. Я бы сказал, что это отлично подходит для бумаги на компиляторах. Если вы хотите пойти глубже, я рекомендую книгу "SICP".
Эта ссылка не работает. – YumYumYum
@YumYumYum фиксированный –
Стандартный переполнение стека ресурс для ресурсов на написания компилятор Learning to write a compiler
Посмотрите на простой компилятор для PL/0 (небольшой паскаль-подобного подмножества - без каких-либо параметров, только целые данные). Источник, написанный на Паскале, составляет всего около 500 строк кода и легко следовать. Это может быть все, что вам нужно посмотреть.
Однако, если вы хотите пойти немного дальше, как только вам станет удобно, посмотрите на источник на Pascal-S. Это компилятор для большего подмножества Pascal, но включает в себя некоторые дополнительные понятия, такие как передача параметров, дополнительные типы данных, массивы и записи (структуры). Тем не менее, это всего лишь около 2000 строк кода, и вам легко следовать, как только вы освоили PL/0.
Вы можете найти источники здесь:
В моей бывшей IT школе, мы должны были разработать компилятор в C++, но не на пустом месте: там были шаги, кривая обучения и т.д ..
The concept of the TIGER Compiler и projet assignments
Все документы доступны, но сам код не является, так что вам придется делать все это самостоятельно.
Существует много понятной и полезной информации, это может быть хорошим началом для обучения кодированию компилятора.
Google UCSD Pascal. Это был наземный выключатель в 70-х годах. Может быть, это больше, чем вы хотите, но тогда его легко переносили на множество микрочипов.
Джек Креншоу, доктор философии. который много писал о практических численных методах, боялся компиляторов в течение длительного времени. Он, наконец, устал от страха и написал многостраничный учебник по построению компилятора, основанный на том, что он узнал, когда он учился самому себе.
Для получения дополнительной информации см. "Let's Build a Compiler". Обратите внимание, что он не является полным; он закончил, прежде чем закончил, но там есть много легко усваиваемой информации.
Я начал видео учебник по написанию 3 компилятор ANTLR - проверить
http://javadude.com/articles/antlr3xtut
Я буду добавлять больше к нему в ближайшее время! - Scott
Большое вам спасибо за это видео, не отставайте от хорошей работы – Ayoub
Рад, что вам понравилось! Я буду продолжать добавлять, когда получаю время. Гораздо проще добавлять фрагменты видео, чем писать большой длинный фрагмент текста, как я сделал для учебника ANTLR 2.x! –
Это всего лишь 300 строк обычного кода и реализует простой универсальный язык link text, что-то в этом роде, что вы искали?
Вы также можете попробовать эту книгу: The Elements of Computing Systems.
Несмотря на то, что книга, предназначенная для непосредственного программирования микропроцессора на язык с его компилятором, может быть сосредоточена на соответствующих главах.
Глава 10: Анализ синтаксиса - это то, с чем вы можете работать, если вы намерены сосредоточиться только на передней части компилятора. Тем не менее, глава 9 должна быть предпосылкой, поскольку она описывает дизайн языка высокого уровня, для которого реализован компилятор. Этот язык высокого уровня на самом деле является простым OO-java-подобным языком, поэтому компилятор фактически компилирует виртуальную машину.
Самая лучшая часть всего этого в том, что вы действительно можете следовать инструкциям и внедрять переднюю часть на любом выбранном вами языке, если считаете, что это поможет вам понять. Он очень хорошо гели, если вы сочетаете его с теорией компилятора.
И вы можете найти мой обзор книги here.
smallest practical compiler I know is MetaII, который имеет 40-строчное самоописание и может скомпилировать себя, используя специальную систему времени выполнения, которая, по общему признанию, скрывает некоторые интересные вычисления (но тогда большинство компиляторов, перечисленных здесь, предполагают какую-то систему времени выполнения, чем для MetaII. Я строить реальные компилятор, начиная с этого в качестве основы, хотя мета-самообеспечение скорее укреплено эффектно.
там в been work to make that even smaller. я не думаю, что есть какие-либо практические компиляторы, основанные на этом направлении.
Здесь стоит написать статью.
Отъезд Antlr и Bison для части вашей работы, а именно лексирование и разбор. –
Вас больше интересует разбор (front-end) или генерация кода (back-end)? Многие компиляторы разделяют эти две части и реализуют их независимо. –
да, меня больше интересует передняя часть компилятора (этапы анализа) – Ayoub