展开全部

主编推荐语

本书是一本面向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描述
  • 后记
展开全部

评分及书评

评分不足
1个评分

出版方

机械工业出版社有限公司

机械工业出版社是全国优秀出版社,自1952年成立以来,坚持为科技、为教育服务,以向行业、向学校提供优质、权威的精神产品为宗旨,以“服务社会和人民群众需求,传播社会主义先进文化”为己任,产业结构不断完善,已由传统的图书出版向着图书、期刊、电子出版物、音像制品、电子商务一体化延伸,现已发展为多领域、多学科的大型综合性出版社,涉及机械、电工电子、汽车、计算机、经济管理、建筑、ELT、科普以及教材、教辅等领域。