README перед запуском проекта компилятора

По сути, сначала это мечта... Возможно, когда-нибудь у меня будет собственный язык программирования!, но вскоре он превратится в кошмар, сразу после того, как вы начнете искать Как собрать компилятор? .

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

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

Когда-нибудь я перестану читать эти материалы. Я сказал, что достаточно узнать о каждой детали, я хочу сделать что-то настоящее. Итак, я начинаю задавать такие вопросы: Какова цель компилятора? Что ж, мой ответ был Создание понятного двоичного кода для процессора Итак, я сказал >Как же тогда быть? Ну вот так statement1; statement2; на 0xAABBCCDD и все.

Потом начинаю все с нуля. Начну с простейшего синтаксиса и машинных кодов. К концу дня у меня был работающий компилятор, способный генерировать чистый двоичный код для Intel. Он понимает всего несколько инструкций, но это был реально работающий компилятор, хотя и очень простой.

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

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

В качестве примера см. мой ответ здесь!

P.S. Кстати, прежде чем вы проголосуете против вопроса, позвольте мне еще раз пояснить, что я не говорю, что эти материалы плохие. Я просто говорю, что тема невероятно расплывчата. Неправильный подход — браться за все сразу. Более разумное решение — начать с примера Hello World! вместо проекта с теми же функциями, что и GCC и т. д.


person Community    schedule 14.01.2013    source источник
comment
К тому времени, когда ваш компилятор сможет скомпилировать «Hello World», у вас уже будет почти весь встроенный сканер, хорошая часть синтаксического анализатора и совсем немного генератора кода. Наверняка в конструкции компилятора нет ничего неясного, это просто очень большая и очень хорошо изученная часть ИТ, возможно, наиболее изученная после аппаратного обеспечения. Ваша методология на самом деле не имеет смысла, и это не настоящий вопрос.   -  person user207421    schedule 14.01.2013
comment
@EJP, как мы изучаем новый язык программирования? программой Hello World, верно? Сначала мы не учимся делать огромные программы. Мы должны сделать то же самое для проектов компилятора, это то, что я имел в виду, не создавая приложение hello world нашим компилятором...   -  person    schedule 14.01.2013
comment
Я не так научился. Я изучал скрининг, сканирование, синтаксический анализ, таблицы символов, таблицы имен, семантический анализ, генерацию кода, размещение регистров и связывание, и, возможно, я упустил несколько вещей. Нам дали существующий парсер и попросили немного изменить его. Сами по себе компиляторы не такие уж большие, но есть чему поучиться. Определенно не существует такой вещи, как «Hello World!». компилятор. Ближе всего к этому может быть синтаксический анализатор выражений рекурсивного спуска.   -  person user207421    schedule 15.01.2013
comment
Запрашивать список идей и концепций неконструктивно и не соответствует стилю вопросов и ответов на этом сайте.   -  person Austin Henley    schedule 16.01.2013
comment
@AustinHenley спасибо, я согласен с вами, однако я не знаю, как это перефразировать. Если кто-то из вас, ребята, может изменить его на лучший формат, не стесняйтесь редактировать его. Кстати, я думаю, что вопрос сам по себе может быть полезен для других, даже если им никто не воспользуется, однако я согласен, что это недостаточно конструктивно, как должно быть...   -  person    schedule 17.01.2013


Ответы (2)


Самое главное — понять, как работает Processor. Сначала вам нужно выбрать конкретную цель, но вы, очевидно, можете расширить ее позже. Документация производителя также очень поможет вам.

Разминочные видео

  1. Введение в процессоры на YouTube
  2. Демонстрация Как работает ЦП @ Youtube через MSX88
  3. Регистрация ЦП @ Youtube
  4. Регистрация процессора на YouTube
  5. 8086 Регистрация Set @ Youtube
  6. набор регистраций x64 @ Youtube
  7. Как компьютеры добавляют числа на YouTube
  8. ФЛАГИ Регистрация @ Youtube
  9. Организация системы: CPU-RAM-I/O @ Youtube
  10. Не на английском, но стоит взглянуть: CPU Builder @ Youtube

Статьи

  1. Что делает процессор @ eHow
  2. Как работает ЦП @ Аппаратные секреты

Руководства по оборудованию

  1. Разработчик программного обеспечения для архитектуры Intel 64 и IA-32 Руководства
  2. Руководства и руководства AMD для разработчиков
person Community    schedule 14.01.2013
comment
Я бы не сказал, что это самое главное. Вам нужно понять много вещей, и все они одинаково важны. - person user207421; 14.01.2013
comment
@EJP Я бы все равно сказал, что это самое главное, так как это самое главное и в компьютере. Есть и другие важные вещи, которые вам нужно знать, я согласен с этим, но они не столь важны, ИМХО. - person ; 14.01.2013
comment
@Fooyd Бессмысленно выделять одну вещь как более важную, когда все они необходимы. - person user207421; 15.01.2013

flex и bison содержат несколько очень простых примеров написания базового интерпретатора:

Я могу получить доступ к обоим на моей локальной машине с помощью команд «info flex» и «info bison» соответственно.

EDIT: только что увидел и подумал, что поделюсь этим ответом на аналогичный вопрос: https://stackoverflow.com/a/15743032/1003855< /а>

person Josh    schedule 01.04.2013