說的AST我有一個函數:獲取函數
function hi()
print('hi')
end
我希望能夠利用這個功能作爲參數,並進行分析就可以了,例如列出所有的函數調用它看到它引用的所有變量等。
請注意,我不是在談論分析源代碼;我沒有函數的源文本,我只有函數對象,即這是在運行時完成的。
我想你會這樣做的方式是獲取函數的AST。但我不知道該怎麼做。那麼,我將如何去獲取函數的AST(或者如果有更好的方法來分析它)呢?
說的AST我有一個函數:獲取函數
function hi()
print('hi')
end
我希望能夠利用這個功能作爲參數,並進行分析就可以了,例如列出所有的函數調用它看到它引用的所有變量等。
請注意,我不是在談論分析源代碼;我沒有函數的源文本,我只有函數對象,即這是在運行時完成的。
我想你會這樣做的方式是獲取函數的AST。但我不知道該怎麼做。那麼,我將如何去獲取函數的AST(或者如果有更好的方法來分析它)呢?
你可能想嘗試我lbci,一個字節碼檢查器庫
我真正需要的是一個可以接受一個函數併爲其生成AST(或者我可以使用的一些其他表示形式)的Lua庫,如果唯一的方法是獲得然後我想這就是它的方式,但是你可以使用lua的luadec,還是隻是一個程序?這需要我把它做成一個lua擴展(真的想要逃避d)並將其與我的應用程序分發。 –
那麼,如果你的源代碼是固定的,你可以在編譯時總是運行分析。然後將從分析中提取的相關數據嵌入到您的程序中。或者你可以通過這樣一種方式來設置你的代碼的風格:每個函數都有一個明確的「聲明」,並且你可以進一步風格化它,這樣只有那些函數在運行時才被調用... – HostileFork
- OR-使用元語言代替:http://en.wikipedia.org/wiki/Meta-circular_evaluator – HostileFork
我要問。你爲什麼沒有來源?是以某種方式混淆了嗎?不管怎樣,如上所述,即使真的沒有一個在Lua中開始,AST也不能通過任何運行時機制來使用。
雖然這是很容易的,因爲它被送入嵌入式解釋或不獲取訪問在很多情況下,源(當然,除非他們只船的字節碼...
我沒有源代碼,因爲這是一個我正在編寫的lua庫,而我的函數寫作只是一個函數作爲論點。 –
如果你是一個受控制的人。讓他們將函數作爲字符串提交給loadstring()。真的,你可以從清單文件'luac -l' – sylvanaar
中得到你想說的大部分內容。「這並不簡單,對不起。 –
對不起,但我不明白函數的返回值是否爲lbci。有沒有更好的文檔比頁面上說「沒有太多的文檔,但它簡單直觀」? –
@親愛的,我很抱歉沒有文件。嘗試閱讀'test.lua'。如果你仍然有問題,請給我發電子郵件。 – lhf