Skip to content

About

中国地质大学(武汉)编译原理课程设计

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

COOL 编译器前端

中国地质大学(武汉)编译原理课程设计 · 基于 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

快速开始

构建 C++ 后端

# Linux / macOS / MSYS2
make

Windows 下也可使用 npm script 直接编译(输出 build/compiler.exe):

cd frontend
npm run build:backend:win

运行后端

echo "class Main { main(): Object { 1; }; };" | build/compiler

启动前端

cd 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)

About

中国地质大学(武汉)编译原理课程设计

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages