Подтвердить что ты не робот

Как можно написать компилятор языка на этом языке?

Возможные дубликаты:
реализация компилятора в "самом себе"
Загрузочный язык

Как вы можете написать компилятор на том же языке, что и язык, на котором вы пишете этот компилятор? Разве это не рекурсивный?

Edit: Это может быть удалено, но в противном случае...:

Как загрузиться:

Почему загрузочный файл:

4b9b3361

Ответ 1

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

Ответ 2

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

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

Ответ 3

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

Ответ 4

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

Ответ 5

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

Ответ 6

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