Построение срезов для программ на динамических языках - page 6

А.О. Крючков, В.А. Крищенко
6
Рис. 3.
Процесс выполнения программы модифицированным интерпретатором
Рис. 4.
Модифицированный основной цикл интерпретатора
Зависимости по данным
формализуются записями
REFS
, име-
ющими следующий вид:
O
1
REFS O
2
, где
O
1
и
O
2
— идентификаторы
операторов. Идентификатор определяет положение оператора в коде
программы и может представлять собой, например, пару «имя файла
+ номер строки» либо более точные координаты (конкретный вид
идентификатора не существенен для описываемого метода).
Для формирования таких записей код выполнения каждой ин-
струкции языка в интерпретаторе изменяется по следующему образ-
цу (
referenced_values
— используемые значения или операнды,
calculated_values
— вычисляемые значения).
current_pos := определить_положение_текущей_инструкции;
for v in referenced_values:
ref_pos := DEF_AT(v);
добавить_в_траекторию('$current_pos REFS $ref_pos');
calculated_values := выполнить_текущую_инструкцию;
for v in calculated_values:
DEF_AT(v) := current_pos;
1,2,3,4,5 7,8,9,10,11,12,13,14,15,16,...17
Powered by FlippingBook