4.7 KiB
4.7 KiB
第三章 — VSPM 与 miniCC
章节定位
通过编译器、VSPM 模拟器的递进设计与优化,覆盖词法分析、语法分析、语义分析、中间代码生成与目标代码生成及指令级模拟执行的完整流程,帮助学生打通从源代码到可执行文件的编译—链接—执行全链路,夯实系统软件开发与调试能力。
知识主线
- 词法分析(Lexical Analysis):从源程序字符流到记号(Token)流
- 语法分析(Syntax Analysis):从 Token 流到抽象语法树(AST)
- 语义分析(Semantic Analysis):作用域、类型检查、符号表
- 中间代码生成(IR Generation):三地址码 / 四元组
- 目标代码生成(Code Generation):面向 VSCPU 指令集的自定义汇编
- VSPM 模拟器演进:1.0 → 2.0(支持函数调用)
- miniCC 编译器演进:1.0 → 2.0(函数调用)→ 3.0(更完整的语言特性)
- 编译—链接—执行全链路:ELF、重定位、符号解析
学习单元
| 编号 | 单元名称 | educoder 直达 | 状态 |
|---|---|---|---|
| 3-1 | VSPM 1.0 | 前往学习 | ✅ 计入打卡 |
| 3-2 | miniCC 1.0 | 前往学习 | ✅ 计入打卡 |
| 3-3 | VSPM 2.0 | 前往学习 | ✅ 计入打卡 |
| 3-4 | miniCC 2.0 | 前往学习 | ✅ 计入打卡 |
| 3-5 | miniCC 3.0 | 前往学习 | ✅ 计入打卡 |
3-1 VSPM 1.0
VSPM 1.0 采用 Java 语言实现了 VSCPU 的体系结构模拟器。代码规模约千余行,整体架构采用模块化关卡(Level-based)设计,通过渐进式难度递增有效降低认知负荷,平滑学习曲线。
主要内容:
- 模拟器核心模块(取指、译码、执行、访存、写回)
- 指令级模拟执行
- VSCPU 12 条指令的 Java 实现
- 简单 C 语言子集的执行
打卡 Issue:【打卡】任务 9 — 3-1 VSPM 1.0
3-2 miniCC 1.0
基于 JavaCC 工具构建的面向 C 语言子集的编译器原型。
主要内容:
- JavaCC 词法/语法分析器 生成
- AST 构建 与遍历
- 语义检查(类型、作用域)
- 目标代码生成:面向 VSCPU 指令集架构的自定义汇编指令序列
- 运行验证:生成的目标代码既可在 VSPM 模拟器上执行,亦可部署于 VSCPU 硬件平台
打卡 Issue:【打卡】任务 10 — 3-2 miniCC 1.0
3-3 VSPM 2.0
以支持 函数调用机制 为核心目标,对 VSPM 1.0 的指令集架构及运行时环境进行系统性扩展。
主要内容:
- 函数调用约定
- 参数传递机制
- 栈帧管理
- 返回地址保存与控制流恢复
- 扩展后的指令集
打卡 Issue:【打卡】任务 11 — 3-3 VSPM 2.0
3-4 miniCC 2.0
对 miniCC 1.0 的语法分析、语义检查与代码生成模块进行系统性扩展,以与 VSPM 2.0 配套。
主要内容:
- 函数定义与声明的语法扩展
- 函数调用表达式的处理
- 形参与实参的类型检查
- 栈帧分配的代码生成
- 调用者保存 / 被调用者保存约定的实现
打卡 Issue:【打卡】任务 12 — 3-4 miniCC 2.0
3-5 miniCC 3.0
miniCC 编译器的进一步扩展版本,面向更完整的 C 语言特性支持。
主要内容:
- 更丰富的控制流(switch/case、do-while、break/continue)
- 复合数据类型(数组、结构体)
- 作用域嵌套与符号表管理
- 代码优化(常量折叠、死代码消除)
打卡 Issue:【打卡】任务 13 — 3-5 miniCC 3.0
关卡式学习范式
VSPM 与 miniCC 的关卡式(Gamified Level-based)学习范式,使学习者能够在逐层递进的任务驱动下,逐步掌握函数定义、参数传递、栈帧管理、返回地址保存及控制流恢复等关键编译原理与计算机体系结构概念。
学习资源
- 📘 教材参考:《编译原理》(龙书)、《现代编译原理》(虎书)
- 🛠️ 工具链:Java(推荐 JDK 11+)、JavaCC、Maven/Gradle
- 📁 代码规模:VSPM 1.0 / miniCC 1.0 均约千余行;后续版本逐步扩展
- 🔗 运行验证:VSPM 模拟器、VSCPU FPGA 平台