преобразование функции в список
lst = macr2lst(function_name)
функция, которую требуется преобразовать.
список.
Этот примитив преобразует компилированную функцию Scilab
function_name в список, который кодирует внутреннее
представление функции (обратная бесскобочная запись).
Первый элемент списка является именем функции, второй и третий являются, соответственно, именами выходных переменных и входных переменных. Следующие элементы являются или записями основных операций или списками, содержащими иерархические управляющие структуры, такие, как
if, for, ...
Записи основных операций описываются вектором символьных строк, чей первый элемент представляет собой код операции.
| коды операций | значение | параметры |
| "0" | игнорируемый код операции | ничего |
| "1" | более не используется | |
| "2" | ссылка на переменную или функцию | имя переменной, #rhs, #lhs |
| "3" | положить строку в стек | строка |
| "4" | положить пустую матрицу в стек | ничего |
| "5" | применить операцию | код операции, #rhs,#lhs |
| "6" | положить число в стек | число |
| "12" | команда pause | ничего |
| "13" | команда break | ничего |
| "14" | команда abort | ничего |
| "15" | конец метки строки | ничего |
| "17" | команда quit | ничего |
| "18" | именованная переменная | имя переменной |
| "19" | создать рекурсивную структуру индексов | длина пути, количество конечных индексов |
| "20" | вызов функции | имя функции, #rhs, #lhs |
| "23" | создать переменную из имени | имя переменной |
| "24" | положить переменную с типом 0 в стек | ничего |
| "25" | запись профиля | количество вызовов, затраченное время |
| "26" | положить вектор строк в стек | кол-во строк, кол-во столбцов, последовательность элементов |
| "27" | положить встроенную ссылку в стек | номер интерфейса, положение в интерфейсе, имя функции |
| "28" | команда continue | ничего |
| "29" | присвоение | #lhs, режим отображения, (имя переменной, #rhs)* |
| "30" | сокращённое вычисление логического выражения | тип, размер скачка |
| "31" | комментарий | комментарий |
| "99" | команда return | ничего |
| > "100" | встроенный вызов (устарело) | 100*fun, #rhs, #lhs, fin |
Функция fun2string может быть использована для генерации исходного кода.
// ОТОБРАЖЕНИЕ function y=foo(x, flag) if flag then y=sin(x) else y=cos(x) end endfunction L=macr2lst(foo) fun2string(L) | ![]() | ![]() |