Получение AST функции - PullRequest
       20

Получение AST функции

4 голосов
/ 19 сентября 2011

Скажите, у меня есть функция:

function hi()
    print('hi')
end

Я бы хотел иметь возможность взять эту функцию в качестве аргумента и выполнить ее анализ, например, перечислить все вызовы функций в ней, увидеть все переменные, на которые она ссылается и т. Д.

Обратите внимание, что я не говорю об анализе исходного кода ; У меня нет исходного текста функции, у меня просто есть объект функции, то есть это делается во время выполнения.

Я думаю, вы могли бы сделать это, чтобы получить AST функции. Но я не знаю, как это сделать. Так как же мне получить AST функции (или иным образом проанализировать ее, если есть лучший способ)?

Ответы [ 3 ]

2 голосов
/ 19 сентября 2011

Возможно, вы захотите попробовать мою lbci , библиотеку инспектора байт-кода.

1 голос
/ 19 сентября 2011

Я должен спросить .Почему у вас нет источника?Был ли он каким-то образом запутан?

Во всяком случае, как уже упоминалось, AST - даже если в Lua действительно не было никого, с чего начать, не доступен через какой-либо механизм времени выполнения.

Хотя этово многих случаях довольно легко получить доступ к источнику, так как он вводится во встроенный интерпретатор или нет (если, конечно, они только отправляют байт-код ...

0 голосов
/ 19 сентября 2011

Абстрактные синтаксические деревья - это (в значительной степени по определению) концепция уровня источника.

Так что вы, возможно, ищете в неотражающем скомпилированном языке, будет "декомпилятор"

Будет ли это работать?

http://luadec.luaforge.net/

...