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

Есть простой компилятор для небольшого языка

Я ищу простой компилятор, который компилирует простой язык, мне нужно, чтобы он написал статью об этом и узнал, как работают компиляторы, я не ищу сложную вещь просто для простого языка (простым я имею в виду маленький код, потому что, например, gcc является toooooo большим). любая помощь приветствуется.

4b9b3361

Ответ 1

Если вы хотите посмотреть код, меня очень впечатляет компилятор Eijiro Sumii MinCaml.

  • Это всего лишь 2000 строк.

  • Он компилирует довольно интересный исходный язык.

  • Он генерирует реальный машинный код, ни один из этих namby-pamby C или LLVM: -)

  • Скорость скомпилированного кода конкурирует с gcc и родными компиляторами OCaml.

  • Компилятор предназначен для обучения.

Я упоминал, что меня очень впечатлило?

Ответ 4

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

Для получения дополнительной информации см. "Let Build a Compiler" . Обратите внимание, что он не является полным; он закончил, прежде чем закончил, но там есть много легко усваиваемой информации.

Ответ 5

Посмотрите на простой компилятор для PL/0 (небольшое подмножество с паскалем - без параметров, только целочисленные данные). Источник, написанный на Паскале, составляет всего около 500 строк кода и легко следовать. Это может быть все, что вам нужно посмотреть.

Однако, если вы хотите пойти немного дальше, как только вам станет удобно, посмотрите на источник на Pascal-S. Это компилятор для большего подмножества Pascal, но включает в себя некоторые дополнительные понятия, такие как передача параметров, дополнительные типы данных, массивы и записи (структуры). Тем не менее, это всего лишь около 2000 строк кода, и вам легко следовать, как только вы освоили PL/0.

Здесь вы можете найти источники:

http://standardpascal.org/source.html

Ответ 6

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

Я рекомендую "книгу драконов": "Принципы проектирования компиляторов", Ахо и Ульман. Прошло много лет с тех пор, как я его прочитал, поэтому не помню, какие примеры доступны, но это очень хороший текст.

Ответ 7

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

Во-первых, что касается языка:

  • Самый простой - это игрушечный язык, например, составление арифметических выражений.
  • Далее - ассемблер - снова действительно просто перевод, но показывает основы разбора и превращения в op-коды.
  • Далее, возможно, что-то вроде C, которое очень близко к чистому ассемблеру или что-то вроде LISP, которое очень близко к чистой теории.

Затем выберите ваш компилятор.

Вы можете начать с ассемблера - превратить ассемблер в машинный код. Это был первый шаг в создании компиляторов - я бы предложил для чипа, такого как 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, чтобы начать.

Ответ 8

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

Ответ 9

В моей бывшей ИТ-школе нам пришлось разработать компилятор на С++, но не с нуля: были шаги, кривая обучения и т.д.

Концепция компилятора TIGER и присвоения projet

Доступны все документы, но сам код отсутствует, поэтому вам придется делать все сами.

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

Ответ 10

Google UCSD Pascal. Это был наземный выключатель в 70-х годах. Может быть, это больше, чем вы хотите, но тогда было легко портировано множество микрочипов.

Ответ 11

Это всего лишь 300 строк обычного кода и реализует простой универсальный язык текст ссылки, что-то вроде того, что вы искали?

Ответ 12

Вы можете посмотреть пример калькулятора в Bjarne Stroustrup, веселую книгу "Язык программирования С++".

Если вы хотите что-то более продвинутое, прочитайте исходный код boost:: spirit.

Ответ 13

Зависит от вашего простого представления. Вы можете посмотреть на один из доступных BrainFuck компиляторов. То, что чрезвычайно простой язык и компиляторы очень малы. Но я не знаю, как много это скажет вам о том, как работает "настоящий" компилятор.

Как насчет просмотра небольшого компилятора C? C не очень компилируется, и я думаю, что это даст вам некоторое представление о конструкции компилятора.

Ответ 14

Я начал видеоурок по написанию компилятора ANTLR 3.x - проверьте

http://javadude.com/articles/antlr3xtut

Я скоро добавлю к нему больше! - Скотт

Ответ 15

Вы также можете попробовать эту книгу: Элементы вычислительных систем.

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

Глава 10: Анализ синтаксиса - это то, с чем вы можете работать, если вы намерены сосредоточиться только на передней части компилятора. Тем не менее, глава 9 должна быть предпосылкой, поскольку она описывает дизайн языка высокого уровня, для которого реализован компилятор. Этот язык высокого уровня на самом деле является простым языком программирования OO, поэтому компилятор фактически компилирует виртуальную машину.

Лучшая часть всего этого - то, что вы действительно можете следовать инструкциям и внедрять переднюю часть на любом выбранном вами языке, если считаете, что это будет способствовать вашему пониманию. Он очень хорошо гели, если вы сочетаете его с теорией компилятора.

И вы можете найти мой обзор книги здесь.

Ответ 16

Brainfucked является компилятором для чрезвычайно простого мышления Brainfuck.

Ответ 18

самый маленький практический компилятор, который я знаю, это MetaII, который имеет 40-строчное самоописание и может скомпилировать себя, используя специальную систему времени выполнения который, по общему признанию, скрывает некоторые интересные вычисления (но тогда большинство компиляторов, перечисленных здесь, предполагают какую-то систему времени выполнения, которая, конечно же, больше, чем та, что для MetaII. Я создаю настоящие компиляторы, начиная с этого в качестве основы, хотя мета-самосовершенствование довольно эффектно.

Там работал, чтобы сделать это еще меньше. Я не думаю, что в этом направлении есть какие-то практические компиляторы.

Об этом стоит написать статью.