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 遥相呼应,体验了代码的模块化和简洁之美...
有图有真相