更新时间:2023-06-28 15:31:33
封面
版权信息
作者简介
序
前言
第1章 Lua解释器概述
1.1 Lua解释器
1.1.1 Lua解释器的整体架构
1.1.2 Lua解释器的运行机制
1.2 Lua虚拟机
1.2.1 虚拟机简介
1.2.2 虚拟机指令的编码方式
1.2.3 虚拟机指令集
1.3 Lua编译器
1.3.1 Lua的词法分析器
1.3.2 Lua的语法分析器
1.4 从0开发一个Lua解释器:dummylua项目
1.4.1 项目简介
1.4.2 项目架构说明
第2章 Lua虚拟机
2.1 Lua虚拟机基础知识
2.1.1 基本类型定义
2.1.2 虚拟机全局状态——global_State
2.1.3 虚拟机的线程结构——lua_State
2.1.4 虚拟机中执行函数的基础——CallInfo结构
2.1.5 C函数在虚拟机线程中的调用流程
2.1.6 虚拟机异常处理机制
2.1.7 dummylua项目的虚拟机基础实现
2.2 为虚拟机添加垃圾回收机制
2.2.1 标记清除算法
2.2.2 增量式标记清除算法
2.2.3 dummylua项目的垃圾回收机制实现
2.3 Lua虚拟机的字符串
2.3.1 Lua字符串概述
2.3.2 Lua字符串结构
2.3.3 字符串的哈希运算
2.3.4 短字符串与内部化
2.3.5 长字符串与惰性哈希
2.3.6 Lua-5.2的Hash DoS攻击
2.3.7 dummylua的字符串实现
2.4 Lua虚拟机的表
2.4.1 Lua表功能概述
2.4.2 Lua表的基本数据结构
2.4.3 表的初始化
2.4.4 键值的哈希运算
2.4.5 查找元素
2.4.6 值的更新与插入
2.4.7 调整表的大小
2.4.8 表遍历
2.4.9 dummylua的表实现
第3章 Lua脚本的编译与虚拟机指令运行流程
3.1 第一个编译并运行脚本的例子:让Lua说“hello world”
3.2 Lua的整体编译和运行流程
3.3 虚拟机如何运行编译后的指令
3.4 虚拟机输出“hello world”的例子
3.5 反编译工具——protodump
3.5.1 protodump工具简介
3.5.2 使用protodump反编译Lua的字节码
3.5.3 反编译结果分析
3.6 标准库加载流程
3.7 Lua内置编译器补充说明
3.7.1 EBNF简介
3.7.2 本章定义的EBNF
3.7.3 词法分析器设计与实现
3.7.4 语句和表达式
3.7.5 语法分析器的基础设计与实现
3.8 让dummylua能够编译并运行“hello world”脚本
第4章 Lua编译器
4.1 Lua词法分析器
4.1.1 词法分析器简介
4.1.2 词法分析器基本数据结构
4.1.3 词法分析器的接口设计
4.1.4 词法分析器的初始化流程
4.1.5 token识别流程
4.1.6 一个测试用例
4.1.7 dummylua的词法分析器实现
4.2 Lua语法分析器基础——expr语句编译流程
4.2.1 语法分析器的主要工作
4.2.2 实现的语法
4.2.3 语法分析器基本数据结构
4.2.4 编译逻辑与EBNF的关联
4.2.5 exprstat的逻辑结构
4.2.6 expr的构造与编译
4.2.7 suffixedexp构造与编译
4.2.8 assignment构造和编译
4.2.9 为dummylua添加编译exprstat的功能
4.3 完整的Lua语法分析器
4.3.1 Lua的语句块
4.3.2 local语句编译流程
4.3.3 do-end语句编译流程
4.3.4 if语句编译流程
4.3.5 while语句编译流程
4.3.6 repeat语句编译流程
4.3.7 for语句编译流程
4.3.8 break语句编译流程
4.3.9 function语句编译流程
4.3.10 return语句编译流程
4.3.11 dummylua的完整语法分析器实现
第5章 Lua解释器的其他基础特性
5.1 元表