Построение срезов для программ на динамических языках
15
Lua применяется стандартная функция
loadstring
, возвращающая но-
вую функцию, при вызове которой и происходит выполнение сгене-
рированного кода.
Рис. 9.
Граф программных зависимостей из опыта № 1
Рис. 10.
Срез по оператору
print(sum)
из опыта № 1
Приведенная ниже программа принимает на вход два числа и имя
процедуры, в которую затем передаются эти числа. Так, если запу-
стить программу с входными данными «2 3 product», то будет выдан
результат «6», а если «2 3 sum» — то «5».
local func_name, code, result;
function sum(a, b)
local r;
r = a + b;
return r;
end
function product(a, b)
local r;
r = a * b;
return r;
end
a = oi.read(’*number’);
b = oi.read(’*number’);
func_name = oi.read(’*line’);
code = loadstring(“return” .. func_name .. “(a, b)”);
print(result);