lua脚本解析器是一个简单解析器,代码开源,集成简单,目前最新版本是5.2 下载地址是

这个地址,根据工作需要,要做一个类似的脚本解析器放到应用当中,当然主要是为了能够扩充,其实用xml解析器,sh脚本解析器都可以完成这样的任务,但是目前主流大家都是用的lua脚本解析器,也就拿来用一下了

下载了lua脚本,eclipse里面安装了cdt,然后将lua的代码倒入到eclipse后,编译就可以。需要注意的是源码下的lua.c 和 luac.c 这两个文件是包含main函数,也就是说是不是本身lua的库

源码的结构主要是

lua.c 文件主要的lua脚本的解析器,能够直接执行lua脚本的命令行程序,执行方法也很简单 生成的可执行文件 lua xxx.lua 即可,中间有错误的话,解析会报错的...

luac.c 这个文件其实是lua脚本解析器的中间过程分析,主要是完成语法分析,跟gcc -c 类似的命令似的。

其他的文件包括头文件就是生成lua脚本的真正的库文件咯

由于我也是刚开始学习lua脚本滴,所以只能将自己知道的一点一点的记录下,今天只是记录一下如何在lua脚本解析器中添加新的函数和新的库

其实库和函数都一个概念啦

添加一个库的方法

1 在项目的下面添加一个新的文件,我添加的是 libmyaddlib.c 这个文件实现的方法很简单,就是一个math函数。该文件的内容如下:

#include <stdlib.h>

#include <math.h>
#define libmyaddlib_c
#define LUA_LIB
#include "lua.h"
#include "lauxlib.h"
#include "lualib.h"
static int math_sqrt (lua_State *L) {
lua_pushnumber(L, l_mathop(sqrt)(luaL_checknumber(L, 1)));
return 1;
}
static const luaL_Reg myaddlib[] = {
{"sqrt", math_sqrt},
{NULL, NULL}
};
/*
** Open math library
*/
LUAMOD_API int luaopen_myaddlib (lua_State *L) {
luaL_newlib(L, myaddlib);
return 1;
}

luaopen_myaddlib 这个函数是对外的接口,在Linit.c 这个文件中的

static const luaL_Reg loadedlibs[] = {

{"_G", luaopen_base},
...

...

{LUA_MYLIBADD, luaopen_myaddlib},

{NULL, NULL}
};

当然还需要定义一下 LUA_MYLIBADD 这个宏,这个宏的名字的定义也很重要,这个宏在Lualib.h这个文件中定义,如下

#define LUA_MYLIBADD "myaddlib"

LUAMOD_API int (luaopen_myaddlib) (lua_State *L);

注意 myaddlib 这个字符串,在将来的lua脚本中需要用的着...

添加的过程出奇的简单,基本上自己添加的函数就已经可以搞定了,当然需要再编译一遍。。

好了 需要有一个lua脚本来进行测试了

这里写了一个test.lua 这个脚本,内容如下:

function pythagorean(a,b)

local c2=a^2 + b^2
return myaddlib.sqrt(c2)
end
print(pythagorean(5,4))

这里和前面的 libmyaddlib.c 遥相呼应,体验了代码的模块化和简洁之美...

有图有真相