Ответ на этот вопрос явно необходим, а по сему попытаюсь это сделать здесь, объясняя как можно проще.
(Ссылок не даю, потому что в каждой мало-мальски правильной книжке по Форту все это рассказано, возможно, иными словами, но по сути - то же)
Первое. Как работает простейший интерпретатор?
1. Интерпретатор берет из входного потока (файла, строки ввода и т.п.) слова.
(Каждому (опредленному) слову в форте соответствует некая программа.)
2. Интерпретатор находит программу, соответствующую взятому слову
3. и вызывает ее на исполнение.
После чего интерпретатор берет следующее слово и снова повторяет все действия по кругу, т.е.
4. -- зацикливание на 1.
Если интерпретатору попадается незнакомое(неправильное) слово, то он начинает "ругаться".
Второе. Как работает простейший компилятор?
1. Компилятор берет из входного потока (файла, строки ввода и т.п.) слова.
(Каждому (опредленному) слову в форте соответствует некая программа.)
2. Компилятор находит программу, соответствующую взятому слову
3. и компилирует ее вызов в компилируемую программу.
После чего компилятор берет следующее слово и снова повторяет все действия по кругу, т.е.
4. -- зацикливание на 1.
Для того, чтобы переключаться между компилятором и интерпретатором существуют специальные слова, которые при исполнении делают это переключение. Исполнение этих слов в режиме интерпретации не вызывает сложностей - встретилось слово переключения на компиляцию - исполнилось, и переключение произошло.
А вот, чтобы переключиться назад, т.е. с компиляции на интерпретацию, переключающие слова должны иметь специальный признак - признак немедленного исполнения. Компилятор, встретив слово с таким признаком не компилирует его, а исполняет. Поэтому слово переключения с компиляции на интерпретацию имеет такой признак.
Теперь о том, как же связываются скомпилированные программы с новыми словами?
Для этого существуют так называемые определяющие слова.
Определяющее слово создает в словаре форта новую статью и включает компиляцию так, что все последующие слова компилируются в тело нового слова.
Когда программа написана, другое специальное слово (с признаком немедленного исполнения!) заканчивает определение - компилирует в конец программы код возврата и переключает систему в режим интерпретации.
После этого новое слово готово к использованию. И, когда интерпретатор встречает его во входном потоке, он вызывает на исполнение тот код, что был скомпилирован для этого слова.
Ответ на этот вопрос явно необходим, а по сему попытаюсь это сделать здесь, объясняя как можно проще.
(Ссылок не даю, потому что в каждой мало-мальски правильной книжке по Форту все это рассказано, возможно, иными словами, но по сути - то же)
[b]Первое.[/b] Как работает простейший интерпретатор?
[b]1.[/b] Интерпретатор берет из входного потока (файла, строки ввода и т.п.) слова.
(Каждому (опредленному) слову в форте соответствует некая программа.)
[b]2.[/b] Интерпретатор находит программу, соответствующую взятому слову
[b]3.[/b] и вызывает ее на исполнение.
После чего интерпретатор берет следующее слово и снова повторяет все действия по кругу, т.е.
[b]4.[/b] -- зацикливание на 1.
Если интерпретатору попадается незнакомое(неправильное) слово, то он начинает "ругаться".
[b]Второе.[/b] Как работает простейший компилятор?
[b]1.[/b] Компилятор берет из входного потока (файла, строки ввода и т.п.) слова.
(Каждому (опредленному) слову в форте соответствует некая программа.)
[b]2.[/b] Компилятор находит программу, соответствующую взятому слову
3. и компилирует ее вызов в компилируемую программу.
После чего компилятор берет следующее слово и снова повторяет все действия по кругу, т.е.
[b]4.[/b] -- зацикливание на 1.
Для того, чтобы переключаться между компилятором и интерпретатором существуют специальные слова, которые при исполнении делают это переключение. Исполнение этих слов в режиме интерпретации не вызывает сложностей - встретилось слово переключения на компиляцию - исполнилось, и переключение произошло.
А вот, чтобы переключиться назад, т.е. с компиляции на интерпретацию, переключающие слова должны иметь специальный признак - признак немедленного исполнения. Компилятор, встретив слово с таким признаком не компилирует его, а исполняет. Поэтому слово переключения с компиляции на интерпретацию имеет такой признак.
[b]Теперь о том, как же связываются скомпилированные программы с новыми словами?[/b]
Для этого существуют так называемые определяющие слова.
Определяющее слово создает в словаре форта новую статью и включает компиляцию так, что все последующие слова компилируются в тело нового слова.
Когда программа написана, другое специальное слово (с признаком немедленного исполнения!) заканчивает определение - компилирует в конец программы код возврата и переключает систему в режим интерпретации.
После этого новое слово готово к использованию. И, когда интерпретатор встречает его во входном потоке, он вызывает на исполнение тот код, что был скомпилирован для этого слова.
|