computer-systems-practice/docs/chapter-03-vspm-minicc.md

4.7 KiB
Raw Permalink Blame History

第三章 — VSPM 与 miniCC

回到课程总览README.md · 头歌平台第三章

章节定位

通过编译器、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 平台