一个使用 Python 实现的 Lua 解释器/虚拟机实验项目,包含 Lua 字节码读取、AST/解析器、简单代码生成以及运行时执行等模块。
- 读取 Lua 字节码(.luac)并解析 Header/Proto
- 虚拟机执行部分指令集
- 词法分析与语法分析(parser/)
- AST 与简单代码生成(codegen/)
- 基础运行时与内建函数(如
print、getmetatable、setmetatable等) - 命令行工具支持(pylua 和 pyluac)
.
├─ binary/ # 字节码读取相关
│ ├─ header.py
│ ├─ io.py
│ └─ reader.py
├─ codegen/ # 代码生成相关
│ ├─ func.py
│ └─ inst.py
├─ parser/ # 词法/语法分析
│ ├─ block.py
│ ├─ expr.py
│ ├─ lexer.py
│ ├─ lua_ast_util.py
│ └─ stat.py
├─ structs/ # 数据结构
│ ├─ function.py
│ ├─ instruction.py
│ ├─ table.py
│ └─ value.py
├─ vm/ # 虚拟机实现
│ ├─ builtins.py
│ ├─ operator.py
│ ├─ protocols.py
│ └─ state.py
├─ cli.py # 命令行接口
├─ pylua.py # 解释器入口
├─ pyluac.py # 编译器入口
└─ README.md # 项目文档
- Python 3.10+(建议)
- 准备 Lua 源文件(示例:
test.lua) - 运行:
python pylua.py test.lua
- 准备 Lua 源文件(示例:
test.lua) - 编译为字节码:
python pyluac.py -o test.luac test.lua
- 运行编译后的字节码:
python pylua.py test.luac
- 参考 cli.py 中的
PyLua类:读取.luac并得到主函数原型(Proto)。
- 参考 cli.py 中的使用方式:
- 词法分析:
Lexer.from_file(...) - 语法解析:
Parser.from_lexer(lexer) - 代码生成:
parser.to_info()
- 词法分析:
- 项目为实验性质,指令集、语法覆盖与标准库支持均不完整
- 字节码序列化功能正在开发中
- 运行示例依赖本地 Lua 编译器生成
.luac
- 扩展 VM 指令集与运行时内建函数
- 完善语法解析与代码生成
- 实现完整的字节码序列化功能
- 增加测试与示例
- 优化性能与错误处理