获取一个函数的AST

假设我有一个函数:

function hi()
    print('hi')
end

我想能够将这个函数作为参数,并对其进行分析,例如列出其中所有的函数调用,查看它引用的所有变量等。

请注意,我不是在谈论分析_源代码_;我没有函数的源文本,我只有函数对象,即这是在运行时完成的。

我认为你会做到这一点的方式是获取函数的AST。但我不知道该如何做。那么,我应该如何获得函数的AST(或者如果有更好的方法,否则分析它)?

原文链接 https://stackoverflow.com/questions/7464661

点赞
stackoverflow用户211160
stackoverflow用户211160

抽象语法树(Abstract Syntax Trees)大致可以理解为源码级别的概念。

所以,对于非反射式编译语言,你可能在寻找一种“反编译器”(decompiler)。

这个能行吗?

http://luadec.luaforge.net/

2011-09-18 21:45:46
stackoverflow用户151501
stackoverflow用户151501

我必须问一下。为什么你没有源代码?它被混淆了吗?

无论如何,正如已经提到的,AST - 即使在Lua中一开始就没有 - 通过任何运行时机制也无法获得。

虽然在许多情况下可以很容易地访问源代码,因为它是被嵌入或未嵌入的解释器输入的(除非当然只使用字节码...

2011-09-18 21:59:17
stackoverflow用户107090
stackoverflow用户107090

你可能想尝试我的 lbci,一个字节码检查器库。

2011-09-18 23:07:00