Skip to content

About

SysY 编译器:Java 从零实现,SysY(C 子集)→MIPS,含词法/语法/错误处理/代码生成与中间代码优化

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

SysY 编译器

一个将 SysY 语言(C 语言子集)编译到 MIPS 汇编的完整编译器,使用 Java 从零实现。涵盖编译器前端到后端的完整流程,并包含中间代码优化。

编译流程

SysY 源码
   │  词法分析(有限自动机)
   ▼  → Token 流
   │  语法分析(递归下降)
   ▼  → 语法树 / PCode
   │  错误处理(词法/语法/语义错误检测)
   ▼  符号表管理
   │  中间代码生成(四元式)
   ▼  → 中间代码
   │  优化(Optimizer)
   ▼  目标代码生成
   → MIPS 汇编

目录结构

阶段 内容
01-词法分析 基于有限自动机的词法分析器,将源码切分为 Token(标识符、关键字、数字、运算符、注释处理)
02-语法分析与PCode 递归下降语法分析,构建语法结构并编译为 PCode,内置虚拟机解释执行。含设计文档
03-错误处理 在词法、语法、语义层面检测并报告错误(符号表、类型检查、作用域)
04-代码生成与优化 生成 MIPS 目标代码,并对中间代码做优化(含优化前后中间代码/目标代码对比)

技术要点

  • 词法分析:有限自动机(DFA)驱动,分类型 Lexer(数字、字符、关键字、注释)
  • 语法分析:递归下降(recursive descent),每个非终结符对应一个解析函数
  • 符号表:分层作用域管理(SymbolManager / SymbolTable)
  • 中间表示:四元式(FourParts),便于优化
  • 目标代码:MIPS 汇编,含寄存器分配
  • 优化:中间代码级优化(见 04 阶段的优化前后对比)

说明

各阶段独立成目录,src/ 下为 Java 源码,testfile*.txt 为测试用例。项目按编译流程分阶段组织,完整展示了从零构建一个编译器的过程。

About

SysY 编译器:Java 从零实现,SysY(C 子集)→MIPS,含词法/语法/错误处理/代码生成与中间代码优化

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages