По сути, сначала это мечта... Возможно, когда-нибудь у меня будет собственный язык программирования!, но вскоре он превратится в кошмар, сразу после того, как вы начнете искать Как собрать компилятор? эм>.
Я трачу слишком много времени, как и большинство из вас, ребята, на чтение книг о драконах, а также множество других статей, ресурсов, форумов и ответов на вопросы. В конце концов я пришел к выводу, что знаю много ненужных вещей, таких как Все основные методы синтаксического анализа или даже Оптимизация компилятора, но до сих пор не имею четкого понимания того, что Мне нужно, наконец, сделать с моим проектом компилятора.
Проблема во всех книгах и других ресурсах, которые вам нужны, чтобы понять (и освоить) все это сразу и с самого начала! Вам нужно понять и реализовать парсер, пока вы еще не знаете, что вы должны делать дальше. Кстати, я предполагаю, что вы действительно новичок в этой теме, однако я знаю, что это не так для некоторых из вас.
Когда-нибудь я перестану читать эти материалы. Я сказал, что достаточно узнать о каждой детали, я хочу сделать что-то настоящее. Итак, я начинаю задавать такие вопросы: Какова цель компилятора? Что ж, мой ответ был Создание понятного двоичного кода для процессора Итак, я сказал >Как же тогда быть? Ну вот так statement1; statement2;
на 0xAABBCCDD
и все.
Потом начинаю все с нуля. Начну с простейшего синтаксиса и машинных кодов. К концу дня у меня был работающий компилятор, способный генерировать чистый двоичный код для Intel. Он понимает всего несколько инструкций, но это был реально работающий компилятор, хотя и очень простой.
Позже я улучшил парсер и т.д., и с тех пор я почувствовал себя намного счастливее. Теперь я использую все эти материалы, когда они мне нужны. Моя проблема заключалась в том, что я очень старался все понять и освоить, потому что думал (в основном говорили другие), что не смогу сделать компилятор, даже простой, не прочитав все эти книги и статьи.
Здесь я хотел бы попросить вас перечислить идеи и концепции, которые, по вашему мнению, необходимо знать перед началом любых проектов компилятора. То, что вы считаете простым, достаточно, чтобы новичок мог прочитать и понять, лучше представить себе весь проект и перейти к написанию фактического кода и почувствовать, как работает настоящий компилятор.
В качестве примера см. мой ответ здесь!
P.S. Кстати, прежде чем вы проголосуете против вопроса, позвольте мне еще раз пояснить, что я не говорю, что эти материалы плохие. Я просто говорю, что тема невероятно расплывчата. Неправильный подход — браться за все сразу. Более разумное решение — начать с примера Hello World! вместо проекта с теми же функциями, что и GCC и т. д.