乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      lua-checker

       quasiceo 2016-07-14

      lua-checker[譯]

      轉(zhuǎn)載請注明出處。

       

      https://code.google.com/p/lua-checker/

      簡介
      Lua Checker是一個用來分析lua源代碼的一般錯誤的程序,很想C語言的"lint"。以下的問題已經(jīng)被定義:
      • 使用未聲明的變量
      • 變量的多重聲明
      • 嘗試改變常量
      • 其他計(jì)劃查看“future”板塊
      Lua Checker是谷歌Street View團(tuán)隊(duì)用來驗(yà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)。舉例:
      • 引用一個未聲明的變量會返回 nil 。這和引用一個已經(jīng)聲明為 nil 的變量沒有差別。因此,在lua腳本語言中,拼寫錯誤不會被發(fā)現(xiàn)并且會導(dǎo)致不好的(misbehavior)程序。
      • Tables(Lua主要的數(shù)據(jù)結(jié)構(gòu))沒有類型(原文:Tables and not typed),所以可以包含任意鍵(key)。當(dāng)tables被用于類似C的數(shù)據(jù)結(jié)構(gòu),拼寫的錯誤將會導(dǎo)致不良的程序。
      • 函數(shù)參數(shù)以及返回值也都是無類型的,有著類似的問題。
      事實(shí)上,超過1000行的Lua程序tend to累積這些問題,從而使得調(diào)試變得困難。一種標(biāo)準(zhǔn)的用來處理未定義的全局變量的Lua慣例是在全局變量的table安裝一個特殊的'get-value'句柄,可以警告未定的全局變量。這是有局限性的,因?yàn)槿耘f只有在程序運(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ù)是
      •   -no_reuse_varnames:   在局部作用域內(nèi)(inner scopes)變量名不能重用、這比很多強(qiáng)類型的語言更加嚴(yán)格,但是這可能捕獲更多的錯誤。
      •   -const_functions:所有的函數(shù)變量都是常量,一下都是錯誤的:
       
      實(shí)現(xiàn)(Implementation)
      Lua Checker的有趣部分被應(yīng)用在bison解析器中。兩個分開的部分被使用,那在兩個分開的程序中執(zhí)行:
      1. lua_simplifier將lua源代碼重寫為一種相對簡單的格式。簡化的代碼有很多語法糖擴(kuò)展并且更少的句法歧義(大多數(shù)是通過在每句后加分號)。lua.y 有更詳細(xì)的描述。簡化的關(guān)鍵是為了真正的分析變得更簡單。
      2. lua_checker 對已經(jīng)簡化的代碼進(jìn)行分析
       
      遠(yuǎn)景(Future)
      產(chǎn)品特色:
      • 允許將tables指派為一種類型,就像C數(shù)據(jù)結(jié)構(gòu)。當(dāng)意外的table字段進(jìn)入的時候給出警告。
      • 允許函數(shù)指派參數(shù)并且返回值類型。當(dāng)參數(shù)和返回值類型不匹配的時候提出警告。
      • 檢測從未被指派的變量。
      • 檢測意外的變量類型改變(比如從number到table)。
      • 在局部作用與內(nèi)定義新的全局函數(shù)時提出警告。
      • 在函數(shù)中使用ellipses但是沒有使用ellipses參數(shù),提出警告
      • Allow user-defined Lua extensions (e.g. global functions defined by the embedded Lua environment). 
      • 檢測‘require’的模塊

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多