Скомпилируйте язык программирования с самим собой

10

Я студент информатики. Я хочу создать свой собственный язык программирования (базовый язык с несколькими инструкциями).

Я знаю, как сделать синтаксический анализатор, я уже сделал это в Perl. В статье я прочитал кое-что о компиляторе, компилятор сделан сам по себе.

Например, компилятор C написан на C. Как это возможно? Я могу создать свой собственный язык, но я не знаю, как я могу его выполнить? Есть идеи?

Это действительно хороший вопрос, и я могу написать блог проекта.

BaptisteL
источник
Люди объяснили, как начать, но зачем это нужно? Нет причин, по которым вы не можете скомпилировать свой язык, используя компилятор, написанный на C, Perl или чем-то еще. Конечно, было бы неплохо, чтобы компилятор для вашего языка был написан сам по себе, но это было бы большой работой - вам нужно было бы написать как минимум два компилятора, чтобы получить это (один на C / Perl / что угодно, другой на ваш язык).
Дэвид Ричерби
Хм .. Я думаю, что напишу свой первый компилятор на C и напишу secondde на моем языке. Очень интересно создать небольшой язык программирования, мы можем выучить много компьютерных наук
BaptisteL

Ответы:

13

Хитрость заключается в начальной загрузке . Сначала вы пишете компилятор для вашего языка (или его подмножество) на другом языке. Затем вы пишете компилятор для вашего языка (или большое подмножество того, что вы уже можете обрабатывать) на вашем языке. Вы используете прежний компилятор для компиляции нового компилятора, а затем новый компилятор может скомпилировать себя.

Юваль Фильмус
источник
Итак, я могу создать свой первый компилятор, используя C, и в следующий раз я буду компилировать мой компилятор v2 с v1? Но есть проблема, откуда мне знать, что у компилятора нет проблем? Мне нужно преобразовать мой исходный код в ассемблер? Или в другом?
BaptisteL
2
Как я мог знать, что у компилятора нет проблем? В общем, вы написали программу; откуда ты знаешь, что в ней нет ошибок? Вы не Вы пишете несколько тестов и надеетесь на лучшее. Нужно ли конвертировать исходный код в сборку? Точно нет. Вы можете доверять компилятору Си. Вы делаете то же самое, но с заменой сборки на C (или любой другой язык по вашему выбору).
Юваль Фильмус
Хорошо, я должен доверять своим навыкам ^^ Я хотел попросить процесс сделать компилятор. Я действительно не понимаю, что делает компилятор, синтаксический и лексический анализатор, хорошо, но дальше ??
BaptisteL
Затем вы генерируете код. Если вы не хотите вдаваться в детали генерации машинного кода, вы всегда можете сгенерировать код на каком-то другом языке, например, на С-коде, и использовать внешний компилятор для компиляции его в машинный код. (Или вы можете использовать интерпретируемый язык и запустить переводчика.)
Юваль Фильм
Хмммм Нет, я предпочитаю делать это так: Мой язык в вводе -> Машинный код. Я не хочу конвертировать свой язык в другой (то же самое для первой компиляции) Это возможно?
Баптист
2

Компилятор, который может компилировать свои собственные источники, называется компилятором с автономным размещением . Ранние компиляторы были написаны на другом языке. Например, первый компилятор C, вероятно, был написан на ассемблере. Вся хитрость в использовании бывшего компилятора более низкого уровня называется начальной загрузкой.

Бартош Прзыбыльски
источник