Есть ли способ написать компилятор на его собственном языке?
У вас должен быть какой-то существующий язык для написания вашего нового компилятора. Если бы вы писали новый, скажем, компилятор C ++, вы бы просто написали его на C ++ и сначала скомпилировали с помощью существующего компилятора. С другой стороны, если вы создавали компилятор для нового языка, назовем его Yazzleof, вам сначала нужно будет написать новый компилятор на другом языке. Как правило, это другой язык программирования, но это не обязательно. Это может быть сборка, а при необходимости и машинный код.
Если бы ты был собираетесь самонастройки компилятора для Yazzleof, вы вообще не написать компилятор для полного языка на начальном этапе. Вместо этого вы должны написать компилятор для Yazzle-lite, наименьшего возможного подмножества Yazzleof (ну, по крайней мере , довольно небольшого подмножества). Затем в Yazzle-lite вы должны написать компилятор для полного языка. (Очевидно, это может происходить итеративно, а не за один прыжок.) Поскольку Yazzle-lite является правильным подмножеством Yazzleof, теперь у вас есть компилятор, который может компилировать себя.
Есть действительно хорошая статья о начальной загрузке компилятора с минимально возможного уровня (который на современной машине в основном представляет собой шестнадцатеричный редактор) под названием « Загрузка простого компилятора из ничего» . Его можно найти по адресу https://web.archive.org/web/20061108010907/http://www.rano.org/bcompiler.html .