yyqng

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

随笔分类 -  Lua源码

摘要:生成跳转指令时并不确定最后将跳转到哪里去(因为往往还未解析到目标代码段)。因此这里会用到编译原理中一个叫“回填”的技术。相关的指令: typedef enum { /* name args description */ // ...... OP_LOADBOOL,/* A B C R(A) := ( 阅读全文
posted @ 2021-06-06 12:57 zziii 阅读(186) 评论(0) 推荐(0)

摘要:在下面的指令中选择power解释,其他指令类似 typedef enum { /* name args description */ //...... OP_ADD,/* A B C R(A) := RK(B) + RK(C) */ OP_SUB,/* A B C R(A) := RK(B) - R 阅读全文
posted @ 2021-06-06 12:05 zziii 阅读(69) 评论(0) 推荐(0)

摘要:在下面的示例中,(3)的prev成员指向(2),(2)的prev成员指向(1),(1)的prev为NULL。 g = 10 -- (1) 全局环境的 FuncState: 其 prev 为 NULL function fun () -- (2) fun 的 FuncState: 其 prev 指向( 阅读全文
posted @ 2021-05-16 15:10 zziii 阅读(123) 评论(0) 推荐(0)

摘要:6.3.1 创建表 创建一个空表,测试代码为: local p = {} --filename 使用ChunkSpy反编译出来的结果: ; function [0] definition (level 1) ; 0 upvalues, 0 params, 2 stacks .function 0 0 阅读全文
posted @ 2021-05-03 12:03 zziii 阅读(127) 评论(0) 推荐(0)

摘要:6.1 Lua词法 语言的解析一般是两遍遍历的过程,第一遍生成AST,第二遍将AST翻译为字节码。 Lua使用一遍扫描代码文件的方式生成字节码,以加快解释执行的速度。但缺点是代码比较难以理解。如 dostat -> DO block END 函数 -> 终结符 语法块 终结符 6.2 赋值类指令 - 阅读全文
posted @ 2021-04-14 22:25 zziii 阅读(189) 评论(0) 推荐(0)

摘要:5.1 Lua执行过程概述 脚本语言处理代码生成字节码,让虚拟机执行。硬件平台的差异由虚拟机解决,因此相同的代码可以运行在不同的操作系统、硬件平台上。 Lua是基于寄存器虚拟机的编程语言,这里的寄存器并不是物理意义上的寄存器,而是某个物理内存地址。 相比于基于栈的虚拟机,Lua只需一条指令即可执行加 阅读全文
posted @ 2021-01-23 22:41 zziii 阅读(474) 评论(0) 推荐(0)

摘要:使用表来统一表示Lua中的一切数据,是Lua区分其他语言的一个特色。 Lua表分为数组(索引从1开始)和散列表两个部分,可以模拟其他各种数据--数组、链表、树等。 4.1 表的数据结构 //llimits.h:27 typedef unsigned char lu_byte; //ltm.h:18 阅读全文
posted @ 2021-01-19 23:48 zziii 阅读(154) 评论(0) 推荐(0)

摘要:3.1 概述 字符串在Lua中是不可变的数据。每当使用不存在的字符串时,就会创建一份新的数据,创建之后是不可更改的。 3.2 字符串实现 //luaconf.h:595 // 用于8字节对齐 #define LUAI_USER_ALIGNMENT_T union { double u; void * 阅读全文
posted @ 2021-01-19 07:10 zziii 阅读(130) 评论(0) 推荐(0)

摘要://主要有以下几种数据类型 //lua.h:72 #define LUA_TNONE (-1) // 无 #define LUA_TNIL 0 // 空 #define LUA_TBOOLEAN 1 // 布尔 #define LUA_TLIGHTUSERDATA 2 // 指针 void* 使用者 阅读全文
posted @ 2021-01-17 16:49 zziii 阅读(179) 评论(0) 推荐(0)

摘要:1.1 前世今生 Lua于1993年诞生于巴西的Tecgraf实验室,Tecgraf主要专注于图形图像相关的工具研发。 (1)可移植性:使用clean C编写的解释器。 (2)良好的嵌入性:提供丰富的API供宿主与Lua脚本之间进行通信和交换数据。 (3)非常小的尺寸:Lua5.1源码只有一万多行。 阅读全文
posted @ 2021-01-17 12:26 zziii 阅读(309) 评论(0) 推荐(0)