| lua-checker[譯]轉(zhuǎn)載請注明出處。 
 https://code.google.com/p/lua-checker/ 簡介 Lua Checker是一個用來分析lua源代碼的一般錯誤的程序,很想C語言的"lint"。以下的問題已經(jīng)被定義: 
 Lua Checker是谷歌Street View團(tuán)隊用來驗證Lua腳本而編寫的。Lua Checker是在Lua 5.0標(biāo)準(zhǔn)允許的。 Lua Checker包含一個bison兼容的解析器(詳見lua.y)。 背景 諸如C/C++和Java都是強(qiáng)類型的。這意味著每一個變量只有一種類型(比如數(shù)組、字符串或者對象),當(dāng)變量被錯誤使用的時候,編譯器會給出錯誤信息。所以很多問題都能盡早被發(fā)現(xiàn)。 相反地,Lua腳本語言是動態(tài)類型的,只有一種簡單的類型模型(a simple type model)。變量可被指派為任意類型。這使得腳本語言的開發(fā)在某種程度上更加簡單,但是它也意味著在一些大型程序中,很多一般的錯誤只有在程序運(yùn)行的時候才能被發(fā)現(xiàn)。舉例: 
 事實上,超過1000行的Lua程序tend to累積這些問題,從而使得調(diào)試變得困難。一種標(biāo)準(zhǔn)的用來處理未定義的全局變量的Lua慣例是在全局變量的table安裝一個特殊的'get-value'句柄,可以警告未定的全局變量。這是有局限性的,因為仍舊只有在程序運(yùn)行的時候才能發(fā)現(xiàn)缺陷。 Lua Checker正式用來解決這些問題的。它在程序運(yùn)行前執(zhí)行靜態(tài)分析,并且可以發(fā)現(xiàn)問題并給出警告信息。 用法 為了幫助Lua Checker做這些工作,Lua源碼必須被寫得更加嚴(yán)謹(jǐn)。     1、所有的全局變量在使用前必須聲明,如下:        但是不能像這樣,即使作用是相同的:      2、通過_G table進(jìn)入的全局變量可以被檢查機(jī)制忽略,所以盡量不要這樣做。      3、通過dofile被包含進(jìn)的源文件也會被掃描,只要dofile用一個單獨(dú)的字符串參數(shù)被調(diào)用在outer scope:       4、變量可以被聲明為常量,只要添加了以下代碼:             --@標(biāo)記代表著特殊的lua checker關(guān)鍵字將會在同一行出現(xiàn)。const 關(guān)鍵字意味著之前的變量被聲明為一個常量。之后任何對這個常量其他的操作             都被認(rèn)為是錯誤的。注意特殊的關(guān)機(jī)子能夠跟隨lua注釋,如下:  命令行參數(shù)        CHECK_LUA.SH是用來調(diào)用lua_checker的。它是笨拙的并且將被更好的代替。     lua_checker 程序像這樣被調(diào)用:     可用的flags參數(shù)是 
 實現(xiàn)(Implementation) Lua Checker的有趣部分被應(yīng)用在bison解析器中。兩個分開的部分被使用,那在兩個分開的程序中執(zhí)行: 
 遠(yuǎn)景(Future) 產(chǎn)品特色: 
 分類: Lua | 
|  |