Lua
文章平均质量分 68
hiheasy
这个作者很懒,什么都没留下…
展开
-
Lua词法分析总结
正在抽空看lua的语法分析(lparse.c), 这个过程也是断断续续的。这里的记录也将会是断断续续的,等到全部看透就再写一篇补充之。看语法分析前得先看词法分析, 就一个llex.c 代码很简单,读取文件,每次取出一个有效的token,或者保留字,或者变量或者值等等。其中保留字有以下这么多种:const char *const luaX_tokens [] = { "and",原创 2012-11-13 14:47:10 · 1005 阅读 · 0 评论 -
lua if条件语句的实现
先来看看lua if语句最简单的用法:local n = 3 if n > 3 then n = 4 else n = 5 end字节码要分析lua如何通过词法(llex.c),语法(lparse.c),代码生成器(lcode.c)来解析上面这段代码,生成供虚拟机执行的字节码, 就得先知道这段lua代码最终究竟生成了什么模样的字节码。先来一原创 2012-12-05 20:16:50 · 4699 阅读 · 0 评论 -
lua函数中的self的实现
一个lua的表函数要有类似C++类函数的this指针,在函数定义,和函数调用时都得使用冒号, 如local tb = {scale=1}function tb:add(a, b) return self.scale + a + bend调用方式: local result = tb:add(1, 3)来看看函数声明的词法分析的过程, 遇到function token会原创 2013-01-06 10:10:44 · 2989 阅读 · 0 评论 -
lua函数栈的base和top会冲突吗?
lua虚拟机在运行指令的使用会使用诸如RA, RB, RC等宏来找变量的位置, 这三个宏分别以base为底,加上指令中的A,B, C操作数。 而我们平时用到的void (lua_pushnumber) (lua_State *L, lua_Number n); 这类函数是基于top的, 那么在push我们的数据时,会不会覆盖了一些正在使用的数据呢, base和top都指示栈上的位置,他们是如原创 2013-01-06 10:28:10 · 1079 阅读 · 0 评论