4

関数があるとします:

function hi()
    print('hi')
end

この関数を引数として取り、その中のすべての関数呼び出しを一覧表示したり、参照しているすべての変数を表示したりするなど、分析を実行できるようにしたいと考えています。

ソース コードの分析について話しているのではないことに注意してください。関数のソース テキストはありません。関数オブジェクトだけがあります。つまり、これは実行時に行われます。

これを行う方法は、関数の AST を取得することです。しかし、私はそれを行う方法がわかりません。では、関数の AST を取得するにはどうすればよいでしょうか (または、より良い方法があればそれを分析します)。

4

3 に答える 3

2

バイトコードインスペクターライブラリである私のlbciを試してみてください。

于 2011-09-18T23:07:00.500 に答える
1

私は尋ねなければなりません。なんでソース出ないの?何らかの方法で難読化されましたか?

とにかく、述べたように、AST は、Lua には最初から存在しませんでしたが、ランタイム メカニズムを介して利用することはできません。

多くの場合、ソースはインタープリターに埋め込まれているかどうかに関係なく供給されているため、ソースへのアクセスを取得するのは非常に簡単ですが (もちろん、バイトコードのみが出荷されている場合を除きます...

于 2011-09-18T21:59:17.790 に答える
0

抽象構文ツリーは (ほぼ定義上) ソースレベルの概念です。

したがって、非反射コンパイル言語でおそらく探しているのは「逆コンパイラ」です。

これは機能しますか?

http://luadec.luaforge.net/

于 2011-09-18T21:45:46.833 に答える