Appearance
自己动手实现 Lua
准备
- 准备开发环境
- IDE vscode 安装 c/c++ 插件,go 相关开发的插件
- 了解 Lua 源码的目录结构,相关文件存在的意义
- 改变自己的默认看法,学习一门语言不是为了学习新的语法糖,而是学习它的设计思想。每种语言发展至今都有其存在的意义,如果没有什么特色,学一门语言和多门语言有什么区别呢?
Lua 虚拟机和 Lua API
二进制 chunk
指令集
Lua API
Lua 运算符
虚拟机雏形
表
函数调用
Go 函数调用
闭包和 Upvalue
元编程
迭代器
Lua 语法和编译器
词法分析
词法分析器的作用是根据编程语言的词法规则,把源代码(字符流)分解为 token 流。 token 按其作用可以分为不同的类型,比较常见的类型:
- 空白字符
- \r、\n、\t、\v、\f、\s
- 注释
- 短注释、长注释
- 关键字
- and、break、do、else、if、elseif、end、false、for、fuction、goto、in、nil、local、not、or、repeat、return、then、true、until、while
- 标识符
- Identifier 变量命名
- 字面量
- 数字字面变量,整数、浮点
- 字符串字面量
- 运算符
- +、-、*、/、^、~、%、&、|、>>、<<等
- 分隔符
- (、)、[、]、{、}、,、:、;等
抽象语法树 AST
语法规则定义了怎样的组合可以构成合法的程序。词法分析阶段
根据词法规则
将字符序列分解为 token 序列,语法分析阶段
根据语法规则
将 token 序列解析为抽象语法树(AST)。
例如:a * (b + c)