Алгоритм перевода ОПЗ в машинные команды

В общем случае операция R может иметь k операндов.

Будем считать, что к моменту генерирования машинных команд проведено распределение памяти, и каждый операнд представлен соответствующим адресом или ссылкой на таблицу имен, содержащую адрес операнда. Аналогично, для каждой рабочей переменной (rj) известен ее адрес.

Для трансляции выражения из ОПЗ в машинные команды используется стек операндов (СО) с указателем i. В исходном состоянии стек пуст, а указатель i=1. Будем также считать, что в исходном состоянии номер первой свободной рабочей переменной j=1.

Блок-схема алгоритма перевода

 
 

:

Для блока 9 используется заранее подготовленные группы машинных команд, в которые требуется лишь подставить адреса операндов (или значения самоопределенных операндов), взятые из стека операндов.

Эту подстановку выполняет подпрограмма, соответствующая операции R и типам ее операндов.

Например, одна подпрограмма соответствует операции сложения вещественных чисел, а другая – операции сложения целых.

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: