Модифицируем вычислитель

В этом разделе рассказывалось, как модифицировать вычислитель с явным управлением и позволить интерпретируемому коду вызывать скомпилированные процедуры. Покажите, как можно изменить компилятор и позволить скомпилированным процедурам вызывать не только элементарные и скомпилированные процедуры, но и интерпретируемые. При этом придется изменить compile-procedure-call так, чтобы обрабатывался случай составных (интерпретируемых) процедур. Проследите, чтобы обрабатывались все те же сочетания target и linkage , что и в compile-proc-appl . Для того, чтобы произвести собственно применение процедуры, код должен переходить на точку входа compound-apply вычислителя. На эту метку нельзя напрямую ссылаться из объектного кода (потому что ассемблер требует, чтобы все метки, на которые явно ссылается объектный код, в нем и определялись), так что придется добавить в машину-вычислитель специальный регистр compapp , в котором будет храниться эта точка входа, и команду для его инициализации:

(assign compapp (label compound-apply))
  ;; branches if flag is set:
  (branch (label external-entry))
read-eval-print-loop …

Чтобы проверить свой код, для начала определите процедуру f , которая вызывает процедуру g . С помощью compile-and-go скомпилируйте определение f и запустите вычислитель. Теперь, вводя код для интерпретации, определите g и попробуйте вызвать f .


Комментарии отсутствуют.

Необходима авторизация

Вы должны авторизоваться для создания комментария.

Вход