本人是Lua的初学者,了解了Lua的一些法语与特性,希望趁现在有空研究Lua的源码,写一个学习笔记,边学习边记录。
对于Lua的语法,有两个经典的电子书,分享如下:
Lua程序设计:http://dl.dbank.com/c0c0fbks4f
Lua-5.1中文手册:http://dl.dbank.com/c0fn9ud061
因为我的ubuntu11.04主机出了点问题,今天的东西都写在windows下,主要有两部分:lua5.2的编译与VC下搭建lua5.1的使用环境。
Lua5.2的编译
最近lua论坛非常火,lua5.2发布了,本人也趁着这股风下了新的版本(www.lua.org)。
在windows下使用dev-c进行编译,dev-c使用的是gcc,也有make.exe程序,只要在环境变量中加入make.exe的路径就可以在cmd下使用make了。
进入lua-5.2.0目录,执行make generic (因为平台支持里没有windows,选择默认的generic,详细说明见lua-5.2.0\doc\readme.html)
编译很快,成功,生成lua.exe luac.exe lualib.a。
简单测试,当然是helloworld了。
VC下lua5.1环境的搭建
在lua-5.2.0\doc\readme.htm中有在other system下的building,因为懒就没做,直接用了SciTE(非常好的lua IDE,网上可下载)中lua5.1已经编好的文件。
加入include files
加入lib
新建工程FirstInstance,使用《lua程序设计》(上文的分享中有)24.1节的代码,但要做如下修改:
1.
#include <lua.h>
#include <lauxlib.h>
#include <lualib.h>
改为:
extern "C"
{
#include "lua.h"
#include "lauxlib.h"
#include "lualib.h"
}
要不会出现Link2001。
2.
luaopen_base(L); /* opens the basic library */
luaopen_table(L); /* opens the table library */
luaopen_io(L); /* opens the I/O library */
luaopen_string(L); /* opens the string lib. */
luaopen_math(L); /* opens the math lib. */
改为:
luaL_openlibs(L);
因为自5.1之后的版本已经不这么初始化了。
修改好的代码为:
#include <stdio.h>
extern "C"
{
#include "lua.h"
#include "lauxlib.h"
#include "lualib.h"
}
#include <string.h>
int main (void)
{
char buff[256];
int error;
lua_State *L = lua_open(); /* opens Lua */
luaL_openlibs(L);
while (fgets(buff, sizeof(buff), stdin) != NULL)
{
error = luaL_loadbuffer(L, buff, strlen(buff),
"line") || lua_pcall(L, 0, 0, 0);
if (error)
{
fprintf(stderr, "%s", lua_tostring(L, -1));
lua_pop(L, 1);/* pop error message from the stack */
}
}
lua_close(L);
return 0;
}
最后,别忘在工程中加入lua5.1.lib。即可
这样就有了自已的解释器了