Эквивалентность типов данных. Ассоциации наименований объектов (пространства имен), страница 4

q(1,9)

k,si,sj

s()

arr

а)

q(1,3)

k,si,sj

q(1,9)

k,si,sj

s()

arr

б)

p(1,3)

i,j

q(1,3)

k,si,sj

q(1,9)

k,si,sj

s()

arr

в)

e(1,3)

p(1,3)

i,j

q(1,3)

k,si,sj

q(1,9)

k,si,sj

s()

arr

г)

s

 

(1)  program Sort(input, output);

(2)       var arr : array [0..11] of integer;x: integer;mVal,rest:word;

(3) 

r

 
     procedure readarray;

(4)           begin … end { readarray };

(5) 

e

 
     procedure Exchange(iFirst,iSecond: integer);

                 begin …                 end { exchange };

(6)   

(7)       procedure QuickSort(iBeg,iEnd : integer);

(8)       var iMid,k,si,sj: integer;

(9)            function PartExch(iBeg,iEnd: integer): integer;

(10)          var i,j: integer;

(11)          begin

(12)

(13)

p

 
              k:=mVal;

(14)

(15)

q

 
                  … arr[i]...

(16)

(17)          end { PartExch };

(18)      begin

(19)

(20)               iMid:=PartExch(iBeg,iEnd);

(21)

(22)           QuickSort(iBeg,iMid-1);  end;

(23)

(24)      end { QuickSort };

(25) begin

(26)      QuickSort(0, 11);

(27) end; { sort }

Глубина вложенности процедур:

sort

1

readarray

2

Exchange

2

QuickSort

2

PartExch

3

Использование связей по доступу

Если в процедуре с глубиной вложенности Na требуется доступ к объекту, объявленному в процедуре с глубиной вложенности Nb (очевидно, что Na>Nb), то

1. (Na-Nb) раз выполняется цикл выборки указателей на записи активации (связей по доступу)

2. Полученный указатель (базовый адрес записи активации) складывается со смещением объекта


Доступ к нелокальным объектам с использованием дисплея

 


Дисплей – глобальный массив – модифицируется в моменты передачи и возврата управления между процедурами.

При входе в процедуру та часть дисплея, которая соответствует большей или равной глубине вложенности сохраняется в куче или стеке. На верхушку дисплея заносится указатель на собственную запись активации.

Перед выходом (возвратом) состояние дисплея восстанавливается из стека (кучи).
Динамический доступ к нелокальным объектам

Глубокий доступ: реализуется путем движения по связям по управлению и просмотра таблиц имен объектов (таблиц идентификаторов) процедур, которые транслятором с такого языка сохраняются в области локальных данных записи активации.

Мелкий доступ: значения всех объектов с их именами (глобальная таблица идентификаторов) хранятся в статической области. При входе в процедуру значения всех ее локальных объектов переносятся из глобальной таблицы в область локальных данных, перед любым выходом (вызовом другой процедуры или возвратом) – копируются в глобальную таблицу.


Семантический анализатор создает дополнительные операции (тетрады) для:

1.  Создания записи активации (в том числе – локальных данных и не объявленных в исходной программе переменных, предназначенных для хранения промежуточных результатов вычислений) каждой вызываемой процедуры и установления ее связей с записями активации других процедур.

2.  Обеспечения доступа из процедур к нелокальным для них объектам (управление дисплеем при реализации текстуальной видимости, перемещение данных при мелком и поиск при глубоком доступе, если реализуется динамическая видимость).

3.  Преобразования значений данных к типу, требуемому для выполнения операций.

4.  Перемещения обрабатываемых значений в ту память, которая непосредственно доступна для выполнения операции (например – регистры процессора), и результатов вычислений обратно в основную память.

5.  Уничтожения записи активации (в том числе локальных объектов) процедуры в момент возврата из нее.