科技
类型
9.1
豆瓣评分
可以朗读
语音朗读
337千字
字数
2018-10-01
发行日期
展开全部
主编推荐语
本书是一本面向Lua程序员和脚本语言爱好者的语言自制指南和实战宝典。
内容简介
全书将带给读者3个维度的收获:维度1:深入理解Lua语言本身作者融合自己丰富的工程实践经验,详细阐述了Lua语言的核心语法和实现原理,深入探讨了Lua虚拟机、编译器和标准库的实现,并给出了实际可以编译执行的代码。维度2:从零开始实现一门脚本语言本书以Lua语言为例,系统、完整地(涵盖虚拟机、编译器和标准库)讲解了如何零基础编写一门脚本语言,帮助读者彻底理解脚本语言的工作原理。维度3:提升Go和Java语言编程能力本书分别用Go语言和Java语言来实现Lua,包含大量对Go和Java的使用,有很多巧妙的设计,能帮助读者提升Go和Java的编程能力。全书共21章,分为3个部分:第一部分(第1-13章) 主要讲解Lua API和虚拟机的实现,包括二进制chunk格式、Lua虚拟机指令集、元编程、错误处理等。第二部分(第14-17章)主要讨论Lua语法和编译器的实现,包括词法分析、语法分析、代码优化、代码生成等。第三部分(第18-21章) 主要讲解Lua辅助API和标准库实现,包括基础库、实用工具库、包和模块、协程等。
目录
- 版权信息
- 前言
- 第一部分 准备
- 第1章 准备工作
- 1.1 准备开发环境
- 1.1.1 操作系统
- 1.1.2 安装Lua
- 1.1.3 安装Go
- 1.2 准备目录结构
- 1.3 本章小结
- 第二部分 Lua虚拟机和Lua API
- 第2章 二进制chunk
- 2.1 什么是二进制chunk
- 2.2 luac命令介绍
- 2.2.1 编译Lua源文件
- 2.2.2 查看二进制chunk
- 2.3 二进制chunk格式
- 2.3.1 数据类型
- 2.3.2 总体结构
- 2.3.3 头部
- 2.3.4 函数原型
- 2.4 解析二进制chunk
- 2.4.1 读取基本数据类型
- 2.4.2 检查头部
- 2.4.3 读取函数原型
- 2.5 测试本章代码
- 2.6 本章小结
- 第3章 指令集
- 3.1 指令集介绍
- 3.2 指令编码格式
- 3.2.1 编码模式
- 3.2.2 操作码
- 3.2.3 操作数
- 3.2.4 指令表
- 3.3 指令解码
- 3.4 测试本章代码
- 3.5 本章小结
- 第4章 Lua API
- 4.1 Lua API介绍
- 4.2 Lua栈
- 4.2.1 Lua数据类型和值
- 4.2.2 栈索引
- 4.2.3 定义luaStack结构体
- 4.3 Lua State
- 4.3.1 定义LuaState接口
- 4.3.2 定义luaState结构体
- 4.3.3 基础栈操纵方法
- 4.3.4 Push方法
- 4.3.5 Access方法
- 4.4 测试本章代码
- 4.5 本章小结
- 第5章 Lua运算符
- 5.1 Lua运算符介绍
- 5.2 自动类型转换
- 5.3 扩展LuaState接口
- 5.3.1 Arith()方法
- 5.3.2 Compare()方法
- 5.3.3 Len()方法
- 5.3.4 Concat()方法
- 5.4 测试本章代码
- 5.5 本章小结
- 第6章 虚拟机雏形
- 6.1 添加LuaVM接口
- 6.1.1 定义LuaVM接口
- 6.1.2 改造luaState结构体
- 6.1.3 实现LuaVM接口
- 6.2 实现Lua虚拟机指令
- 6.2.1 移动和跳转指令
- 6.2.2 加载指令
- 6.2.3 算术运算指令
- 6.2.4 长度和拼接指令
- 6.2.5 比较指令
- 6.2.6 逻辑运算指令
- 6.2.7 for循环指令
- 6.3 指令分派
- 6.4 测试本章代码
- 6.5 本章小结
- 第7章 表
- 7.1 表介绍
- 7.2 表内部实现
- 7.3 表相关API
- 7.3.1 Get方法
- 7.3.2 Set方法
- 7.4 表相关指令
- 7.4.1 NEWTABLE
- 7.4.2 GETTABLE
- 7.4.3 SETTABLE
- 7.4.4 SETLIST
- 7.5 测试本章代码
- 7.6 本章小结
- 第8章 函数调用
- 8.1 函数调用介绍
- 8.2 函数调用栈
- 8.2.1 调用帧实现
- 8.2.2 调用栈实现
- 8.3 函数调用API
- 8.3.1 Load()
- 8.3.2 Call()
- 8.4 函数调用指令
- 8.4.1 CLOSURE
- 8.4.2 CALL
- 8.4.3 RETURN
- 8.4.4 VARARG
- 8.4.5 TAILCALL
- 8.4.6 SELF
- 8.4.7 扩展LuaVM接口
- 8.4.8 改进SETLIST指令
- 8.5 测试本章代码
- 8.6 本章小结
- 第9章 Go函数调用
- 9.1 Go函数登场
- 9.1.1 添加Go函数类型
- 9.1.2 扩展Lua API
- 9.1.3 调用Go函数
- 9.2 Lua注册表
- 9.2.1 添加注册表
- 9.2.2 操作注册表
- 9.3 全局环境
- 9.3.1 使用API操作全局环境
- 9.3.2 在Lua里访问全局环境
- 9.4 测试本章代码
- 9.5 本章小结
- 第10章 闭包和Upvalue
- 10.1 闭包和Upvalue介绍
- 10.1.1 背景知识
- 10.1.2 Upvalue介绍
- 10.1.3 全局变量
- 10.2 Upvalue底层支持
- 10.2.1 修改closure结构体
- 10.2.2 Lua闭包支持
- 10.2.3 Go闭包支持
- 10.3 Upvalue相关指令
- 10.3.1 GETUPVAL
- 10.3.2 SETUPVAL
- 10.3.3 GETTABUP
- 10.3.4 SETTABUP
- 10.3.5 JMP
- 10.4 测试本章代码
- 10.5 本章小结
- 第11章 元编程
- 11.1 元表和元方法介绍
- 11.1.1 元表
- 11.1.2 元方法
- 11.2 支持元表
- 11.3 调用元方法
- 11.3.1 算术元方法
- 11.3.2 长度元方法
- 11.3.3 拼接元方法
- 11.3.4 比较元方法
- 11.3.5 索引元方法
- 11.3.6 函数调用元方法
- 11.4 扩展Lua API
- 11.4.1 GetMetatable()
- 11.4.2 SetMetatable()
- 11.5 测试本章代码
- 11.6 本章小结
- 第12章 迭代器
- 12.1 迭代器介绍
- 12.2 next()函数
- 12.2.1 修改luaTable结构体
- 12.2.2 扩展Lua API
- 12.2.3 实现next()函数
- 12.3 通用for循环指令
- 12.4 测试本章代码
- 12.5 本章小结
- 第13章 异常和错误处理
- 13.1 异常和错误处理介绍
- 13.2 异常和错误处理API
- 13.2.1 Error()
- 13.2.2 PCall()
- 13.3 error()和pcall()函数
- 13.4 测试本章代码
- 13.5 本章小结
- 第三部分 Lua语法和编译器
- 第14章 词法分析
- 14.1 编译器介绍
- 14.2 Lua词法介绍
- 14.3 实现词法分析器
- 14.3.1 定义Token类型
- 14.3.2 空白字符
- 14.3.3 注释
- 14.3.4 分隔符和运算符
- 14.3.5 长字符串字面量
- 14.3.6 短字符串字面量
- 14.3.7 数字字面量
- 14.3.8 标识符和关键字
- 14.4 LookAhead()和其他方法
- 14.5 测试本章代码
- 14.6 本章小结
- 第15章 抽象语法树
- 15.1 抽象语法树介绍
- 15.2 Chunk和块
- 15.3 语句
- 15.3.1 简单语句
- 15.3.2 while和repeat语句
- 15.3.3 if语句
- 15.3.4 数值for循环语句
- 15.3.5 通用for循环语句
- 15.3.6 局部变量声明语句
- 15.3.7 赋值语句
- 15.3.8 非局部函数定义语句
- 15.3.9 局部函数定义语句
- 15.4 表达式
- 15.4.1 简单表达式
- 15.4.2 运算符表达式
- 15.4.3 表构造表达式
- 15.4.4 函数定义表达式
- 15.4.5 前缀表达式
- 15.4.6 圆括号表达式
- 15.4.7 表访问表达式
- 15.4.8 函数调用表达式
- 15.5 本章小结
- 第16章 语法分析
- 16.1 语法分析介绍
- 16.1.1 歧义
- 16.1.2 前瞻和回溯
- 16.1.3 解析方式
- 16.2 解析块
- 16.3 解析语句
- 16.3.1 简单语句
- 16.3.2 if语句
- 16.3.3 for循环语句
- 16.3.4 局部变量声明和函数定义语句
- 16.3.5 赋值和函数调用语句
- 16.3.6 非局部函数定义语句
- 16.4 解析表达式
- 16.4.1 运算符表达式
- 16.4.2 非运算符表达式
- 16.4.3 函数定义表达式
- 16.4.4 表构造表达式
- 16.4.5 前缀表达式
- 16.4.6 圆括号表达式
- 16.4.7 函数调用表达式
- 16.4.8 表达式优化
- 16.5 测试本章代码
- 16.6 本章小结
- 第17章 代码生成
- 17.1 定义funcInfo结构体
- 17.1.1 常量表
- 17.1.2 寄存器分配
- 17.1.3 局部变量表
- 17.1.4 Break表
- 17.1.5 Upvalue表
- 17.1.6 字节码
- 17.1.7 其他信息
- 17.2 编译块
- 17.3 编译语句
- 17.3.1 简单语句
- 17.3.2 while和repeat语句
- 17.3.3 if语句
- 17.3.4 for循环语句
- 17.3.5 局部变量声明语句
- 17.3.6 赋值语句
- 17.4 编译表达式
- 17.4.1 函数定义表达式
- 17.4.2 表构造表达式
- 17.4.3 运算符表达式
- 17.4.4 名字和表访问表达式
- 17.4.5 函数调用表达式
- 17.5 生成函数原型
- 17.6 使用编译器
- 17.7 测试本章代码
- 17.8 本章小结
- 第四部分 Lua标准库
- 第18章 辅助API和基础库
- 18.1 Lua标准库介绍
- 18.2 辅助API
- 18.2.1 增强版方法
- 18.2.2 加载方法
- 18.2.3 参数检查方法
- 18.2.4 标准库开启方法
- 18.3 基础库
- 18.3.1 基础库介绍
- 18.3.2 基础库实现
- 18.4 测试本章代码
- 18.5 本章小结
- 第19章 工具库
- 19.1 数学库
- 19.2 表库
- 19.3 字符串库
- 19.4 UTF-8库
- 19.5 OS库
- 19.6 本章小结
- 第20章 包和模块
- 20.1 包和模块介绍
- 20.2 实现包库
- 20.3 测试本章代码
- 20.4 本章小结
- 第21章 协程
- 21.1 协程介绍
- 21.2 协程API
- 21.2.1 支持线程类型
- 21.2.2 支持协程操作
- 21.3 实现协程库
- 21.4 测试本章代码
- 21.5 本章小结
- 附录A Lua虚拟机指令集
- 附录B Lua语法EBNF描述
- 后记
展开全部
出版方
机械工业出版社有限公司
机械工业出版社是全国优秀出版社,自1952年成立以来,坚持为科技、为教育服务,以向行业、向学校提供优质、权威的精神产品为宗旨,以“服务社会和人民群众需求,传播社会主义先进文化”为己任,产业结构不断完善,已由传统的图书出版向着图书、期刊、电子出版物、音像制品、电子商务一体化延伸,现已发展为多领域、多学科的大型综合性出版社,涉及机械、电工电子、汽车、计算机、经济管理、建筑、ELT、科普以及教材、教辅等领域。