中国地质大学(武汉)编译原理课程设计 · 基于 C++ 后端 + Electron 前端的编译器前端可视化工具,针对 COOL (Classroom Object-Oriented Language) 语言。
- DFA 词法分析 — 基于 DFA 的 COOL 语言 Token 识别,包含 Hopcroft 状态最小化
- LALR(1) 语法分析 — LALR(1) 分析表驱动(约 140 状态),支持完整的 COOL 语法结构
- AST 生成 — 构建抽象语法树,支持方法调度、属性访问、let 绑定、case 分支等
- 语义分析 — 4 遍类型检查:类收集 → 继承检查 → 重写检查 → 表达式类型推导
- 作用域栈(变量遮蔽、let / formal / case 绑定)
- 协变返回类型检查
- 方法调度参数类型与数量验证
- 内置类型支持(Object, IO, Int, String, Bool)
- IR 生成 — 三地址码中间表示,包含函数边界、参数传递、控制流和调度调用
- 图形化界面 — Electron 桌面应用,代码编辑器、Token / AST / IR / 诊断展示
- 实时编译 — 输入过程中实时编译(500ms 防抖 + 过期进程终结),同步更新 Diagnostics 面板和编辑器行号标注
- 语法高亮 — 客户端 JS 基于后端 Token 流的高亮,CSS 覆盖层实现无侵入高亮
.
├── backend/ # C++ 编译器核心
│ ├── include/ # 头文件
│ │ ├── lexer/ # 词法分析 (Token, DFA, Lexer)
│ │ ├── parser/ # 语法分析 (AST, Grammar, LALR, Parser, IR)
│ │ ├── semantic/ # 语义分析 (Type, SemanticAnalyzer, SymbolTable)
│ │ └── utils/ # 工具类 (SourceLocation, Diagnostics)
│ └── src/ # 模块实现 (main.cpp 及各模块 .cpp)
├── frontend/ # Electron 前端
│ ├── electron/ # 主进程 (IPC、子进程管理) + preload
│ └── public/ # 渲染进程 (编辑器、语法高亮、标签页)
├── grammar/ # COOL 文法定义 (Flex/Bison 参考)
├── doc/ # 文档 (设计报告)
├── Makefile # Makefile 构建配置
└── .gitignore
# Linux / macOS / MSYS2
makeWindows 下也可使用 npm script 直接编译(输出 build/compiler.exe):
cd frontend
npm run build:backend:winecho "class Main { main(): Object { 1; }; };" | build/compilercd frontend
npm install
npm start- 后端: C++17 编译器 (GCC 9+ / Clang 10+ / MSVC 2019+)
- 前端: Node.js 18+、Electron 28
- 平台: Linux / macOS / Windows
源代码 (stdin / 文件)
│
▼
Lexer (DFA + Hopcroft 最小化) → Token 序列
│
▼
Parser (LALR(1) 移进-归约) → AST
│
▼
SemanticAnalyzer (4 遍类型检查) → 类型注解 + 错误诊断
│
▼
IRGenerator (三地址码) → IR 指令序列
│
▼
JSON 输出 → Electron 前端展示
doc/编译原理前端设计报告.md— 整体设计与各阶段实现说明(含设计取舍论证)grammar/cool.l、grammar/cool.y— COOL 词法/语法参考文法(Flex/Bison)