Как компилятор языка может быть записан на том языке? [дубликат]

20
задан Community 23 May 2017 в 11:54
поделиться

6 ответов

Обычно первая версия компилятора написана на другом языке, а затем каждая последующая версия написана на этом языке и скомпилирована с более старой версией. После того, как вы скомпилировали версию x с версией x-1 , вы можете использовать недавно созданную версию x для перекомпиляции, используя преимущества любых новых оптимизаций, которые версия представляет; GCC делает свои выпуски таким образом

30
ответ дан 29 November 2019 в 23:11
поделиться

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

1
ответ дан 29 November 2019 в 23:11
поделиться

В какой-то момент вам понадобится компилятор (или интерпретатор), написанный на другом языке. Но он не обязательно должен быть эффективным и может быть сделан на языке, который облегчает разбор и создание прототипов (популярен LISP). После того, как вы использовали его для компиляции "самокомпилятора", вы можете отбросить его и использовать результат.

1
ответ дан 29 November 2019 в 23:11
поделиться

Это так. Обычно вам нужна загрузочная версия языка, либо скомпилированная, либо интерпретированная из другого языка.

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

13
ответ дан 29 November 2019 в 23:11
поделиться

Первый проход компилятора обычно пишется на чем-то другом, пока язык не будет достаточно хорошо сформирован, чтобы быть в состоянии компилировать свой собственный компилятор, тогда вы можете перейти к x is written in x.

1
ответ дан 29 November 2019 в 23:11
поделиться

Это проблема только для самой первой версии. Как только у меня работает компилятор V1.0, я могу написать V2.0 на своем языке и использовать компилятор V1.0 для его компиляции. Затем я могу написать V3.0 и использовать V2.0 для компиляции этой версии, использовать V3.0 для компиляции V4.0 и так далее.

6
ответ дан 29 November 2019 в 23:11
поделиться
Другие вопросы по тегам:

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