在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
转载请注明出处。
https://code.google.com/p/lua-checker/ 简介
Lua Checker是一个用来分析lua源代码的一般错误的程序,很想C语言的"lint"。以下的问题已经被定义:
Lua Checker是谷歌Street View团队用来验证Lua脚本而编写的。Lua Checker是在Lua 5.0标准允许的。
Lua Checker包含一个bison兼容的解析器(详见lua.y)。
背景
诸如C/C++和Java都是强类型的。这意味着每一个变量只有一种类型(比如数组、字符串或者对象),当变量被错误使用的时候,编译器会给出错误信息。所以很多问题都能尽早被发现。
相反地,Lua脚本语言是动态类型的,只有一种简单的类型模型(a simple type model)。变量可被指派为任意类型。这使得脚本语言的开发在某种程度上更加简单,但是它也意味着在一些大型程序中,很多一般的错误只有在程序运行的时候才能被发现。举例:
事实上,超过1000行的Lua程序tend to累积这些问题,从而使得调试变得困难。一种标准的用来处理未定义的全局变量的Lua惯例是在全局变量的table安装一个特殊的'get-value'句柄,可以警告未定的全局变量。这是有局限性的,因为仍旧只有在程序运行的时候才能发现缺陷。
Lua Checker正式用来解决这些问题的。它在程序运行前执行静态分析,并且可以发现问题并给出警告信息。
用法
为了帮助Lua Checker做这些工作,Lua源码必须被写得更加严谨。
1、所有的全局变量在使用前必须声明,如下:
但是不能像这样,即使作用是相同的:
2、通过_G table进入的全局变量可以被检查机制忽略,所以尽量不要这样做。
3、通过dofile被包含进的源文件也会被扫描,只要dofile用一个单独的字符串参数被调用在outer scope:
4、变量可以被声明为常量,只要添加了以下代码:
--@标记代表着特殊的lua checker关键字将会在同一行出现。const 关键字意味着之前的变量被声明为一个常量。之后任何对这个常量其他的操作
都被认为是错误的。注意特殊的关机子能够跟随lua注释,如下:
命令行参数
CHECK_LUA.SH是用来调用lua_checker的。它是笨拙的并且将被更好的代替。
lua_checker 程序像这样被调用:
可用的flags参数是
实现(Implementation)
Lua Checker的有趣部分被应用在bison解析器中。两个分开的部分被使用,那在两个分开的程序中执行:
远景(Future)
产品特色:
|
请发表评论