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

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

37
задан vitaut 20 December 2010 в 10:47
поделиться

15 ответов

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

  • Это всего 2000 строк.

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

  • Он генерирует настоящий машинный код, ни один из этих глупых C или LLVM: -)

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

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

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

47
ответ дан 27 November 2019 в 04:21
поделиться

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

0
ответ дан 27 November 2019 в 04:21
поделиться

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

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

1
ответ дан 27 November 2019 в 04:21
поделиться

Вы можете посмотреть пример калькулятора в Bjarne Веселая книга Страуструпа «Язык программирования C ++».

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

1
ответ дан 27 November 2019 в 04:21
поделиться

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

3
ответ дан 27 November 2019 в 04:21
поделиться

LISP (схемы и т. Д.) - это самые простые реальные языки. Вы можете посмотреть, как построить примитивный интерпретатор схемы на perl, с помощью этой книги (бумажная версия здесь, на Lulu ). Парсинг, проверка типов аналогичны в интерпретаторах и компиляторах. Затем, вот более хардкорная книга по теме проектирования компилятора (также доступна как мертвое дерево на Lulu ).

3
ответ дан 27 November 2019 в 04:21
поделиться

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

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

3
ответ дан 27 November 2019 в 04:21
поделиться

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

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

  1. Самый простой - это игрушечный язык, например компиляция арифметических выражений.
  2. Далее идет ассемблер - опять же, на самом деле просто перевод, но демонстрирующий основы синтаксического анализа и преобразования в операционные коды
  3. Далее, вероятно, что-то вроде 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.

4
ответ дан 27 November 2019 в 04:21
поделиться

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

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

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

http://standardpascal.org/source.html

4
ответ дан 27 November 2019 в 04:21
поделиться

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".

5
ответ дан 27 November 2019 в 04:21
поделиться

Я рекомендую TinyScheme или Джонсфорт .

8
ответ дан 27 November 2019 в 04:21
поделиться

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

Концепция компилятора TIGER и назначения проекта

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

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

3
ответ дан 27 November 2019 в 04:21
поделиться

Стандартный ресурс Stack Overflow для ресурсов при написании компилятора - Обучение написанию компилятора

0
ответ дан 27 November 2019 в 04:21
поделиться

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

См. «Давайте создадим компилятор» для Дополнительная информация. Обратите внимание, что он не полный; он выдохся еще до того, как закончил, но там много легко усваиваемой информации.

6
ответ дан 27 November 2019 в 04:21
поделиться

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

http://javadude.com/articles/antlr3xtut

Скоро я добавлю еще! -- Скотт

1
ответ дан 27 November 2019 в 04:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: