A simple C language compiler implemented by Python.
如果本地环境配置太麻烦,可以尝试使用 Docker 来运行,这里给出构建 Docker 和 启动 Docker 的命令:
当然如果你已经成功配置好本地环境,完全可以跳过这一步
docker build -t siguremo/pycc:pre .
# Windows 可能需要手动将 $PWD 换成自己当前的绝对路径
docker run --name pycc-dev -v $PWD:/pycc -w /pycc --network=host --rm -it siguremo/pycc:pre /bin/bash
之后就可以在 Docker 里运行相关命令了
首先确保安装 poetry
如果是 Windows 需要预先自行额外安装 VS Build Tools
poetry install
poetry run pycc <src>
poetry run pytest
未在 Windows 上进行测试
make # 编译构建 C++ 部分
make run # 运行 C++ 部分测试代码
.
├── LICENSE
├── Makefile
├── README.md
├── build.py # 用于编写 Cython 构建方式
├── cpp # C++ 端代码(虚拟机部分)
│ ├── include # C++ 端头文件
│ │ └── libvm.hpp # libvm 头文件
│ ├── libvm.pxd # libvm Cython 定义文件
│ ├── src # C++ 端源文件
│ │ └── libvm.cpp # libvm 源文件
│ ├── test # C++ 端测试文件
│ │ └── test_libvm.cpp # libvm 测试文件
│ └── vm.pyx # vm Cython 文件
├── poetry.lock
├── poetry.toml
├── pycc # Python 端代码
│ ├── __init__.py
│ ├── __main__.py # Python 入口文件
│ ├── lexer.py # 词法分析器
│ ├── parser.py # 语法分析器(递归下降)
│ ├── symbols.py # 符号表
│ ├── utils
│ │ ├── __init__.py
│ │ └── logger.py # 用于打印 log
│ ├── vm.cpython-310-darwin.so # vm 动态链接库,不同系统/Python 类型/Python 版本生成文件名会不同
│ └── vm.pyi # vm Python 定义文件(非必需,为 Editor 提供代码提示)
├── pyproject.toml
├── setup.py
├── target
│ └── test_vm # C++ 测试可执行文件
└── tests # Python 测试文件
├── __init__.py
├── test_pycc.py
└── test_vm.py
其中 cpp/include/libvm.hpp
与 cpp/src/libvm.cpp
为 C++ 端代码,cpp/libvm.pxd
是将其对应定义引入到 Cython 文件(cpp/vm.pyx
)中。
cpp/vm.pyx
是 C++ 端 libvm 的 Python 绑定,利用 Cython 连接 C++ 端代码,并将其编译成功后的动态链接库(pycc/vm.cpython-310-darwin.so
)安装到 Python 端代码中,此时可通过 pycc.vm
调用。
由于 pycc.vm
并非 .py
文件,编辑器/IDE 无法通过其提供有效的代码提示,可以通过 pycc/vm.pyi
文件来提供 cpp/vm.pyx
的定义,当然,该文件并非必要。
- VM
- Python side 更多可访问的属性
- 初始化相关测试
- 单步调试
- 显示所有寄存器的方法
- 显示局部内存的方法
- Lexer
- 整型数支持
- 非整型数支持
- Parser
- 全局运算支持
- 局部运算支持
- 非整形运算支持
- Symbols
- 全局变量
- 局部变量
- 内置函数(系统调用)
- docs
- 文件结构说明
- CI
- tests
- VM
- Lexer
- Parser
- Symbols