Skip to content

Repository files navigation

CompilerFrontWorkbench

编译器前端工作台 —— 一个基于 Qt 的编译器前端可视化工具,完整实现从正则表达式/BNF 文法配置到词法分析器自动生成、语法分析与语义分析的全流程。

功能概览

词法分析(Lexical Analysis)

  • 读取用户定义的正则表达式规则文件
  • 正则表达式解析:词法解析 → 语法解析(AST)→ NFA(Thompson 构造法)→ DFA(子集构造法)→ 最小化 DFA
  • 自动生成 C++ 词法分析器源代码并编译为可执行程序
  • 可视化展示每个正则规则对应的 NFA / DFA / 最小化 DFA 状态转换表

语法分析(Syntax Analysis)

  • 读取用户定义的 BNF 文法文件
  • 文法处理流水线:文法解析 → FIRST/FOLLOW 集计算 → LR(0) 自动机构造 → SLR(1) 冲突检测 → LR(1) 自动机构造 → LR(1) 分析表构造
  • 基于 LR(1) 分析表对 Token 流进行语法分析
  • 语义分析:符号表管理、四元组中间代码生成、回填(backpatch)技术
  • 支持通过 JavaScript(QJSEngine)执行用户自定义语义动作

可视化界面

  • 多标签页代码编辑器(支持行号、语法高亮)
  • 项目文件树面板(QTreeView + QFileSystemModel)
  • 中央控制台(错误日志 + 终端输出)
  • 分析结果视图:AST 树形/图形展示、LR 分析步骤表、四元组列表
  • 配置结果视图:FIRST/FOLLOW 集、LR(0)/LR(1) DFA 状态图、LR(1) 分析表

技术栈

类别 技术
语言 C++17
GUI 框架 Qt 6.5.3(Widgets + QML)
构建系统 qmake
脚本引擎 QJSEngine(语义动作执行)
编译器 MinGW 64-bit (GCC) / MSVC

纯手写实现,无第三方依赖。 所有编译器前端算法(正则引擎、有限自动机、LR 分析)均为从零实现。

项目结构

CompilerFrontWorkbench/
├── CompilerFrontWorkbench.pro  # qmake 工程文件
├── main.cpp                     # 应用程序入口
├── mainwindow.h/.cpp/.ui        # 主窗口
├── src/
│   ├── common/                  # 公共基础设施
│   │   ├── graph/               #   自动机图结构(状态转移图)
│   │   └── utils/               #   位图(BitSet)、字符串工具、文件工具
│   ├── lexical/                 # 词法分析模块
│   │   ├── core/                #   核心数据结构(Regex、LexicalConfig)
│   │   ├── regex/               #   流水线:词法解析→语法解析→NFA→DFA→最小化→代码生成→映射表
│   │   └── LexicalServicer      #   词法分析服务编排
│   ├── syntax/                  # 语法分析模块
│   │   ├── core/                #   核心数据结构(Grammar、SemanticAction、SyntaxConfig)
│   │   ├── grammar/             #   流水线:文法解析→FIRST/FOLLOW→LR0→SLR1→LR1→分析表
│   │   ├── semantic/            #   语义分析辅助(符号表、四元组、AST管理)
│   │   └── SyntaxServicer       #   语法分析服务编排
│   └── ui/                      # 用户界面模块
│       ├── template/            #   可复用组件(CodeEditor、TriangleButton)
│       ├── view/                #   结果展示视图
│       └── widget/              #   功能部件(ProjectPanel、EditorTab、Console、Config)
├── test/                        # 单元测试
│   ├── LexicalModuleTester       #   词法模块全流程测试
│   ├── SyntaxModuleTester        #   语法模块全流程测试
│   └── UiModuleTester            #   UI 模块测试
└── sample/                       # 示例语言
    ├── postfix expression/        #   后缀表达式示例(.regex + .bnf + 源代码)
    └── tiny/                     #   TINY 语言示例(.regex + .bnf + 源代码)

构建与运行

环境要求

  • Qt 6.5.3 或更高版本(需包含 Widgets 和 QML 模块)
  • 支持 C++17 的编译器(MinGW 8.1+ / MSVC 2019+ / GCC 8+)
  • Qt Creator(推荐)或命令行 qmake

构建步骤

使用 Qt Creator:

  1. 打开 CompilerFrontWorkbench.pro 文件
  2. 配置构建套件(MinGW 64-bit 或 MSVC)
  3. 点击构建并运行

使用命令行:

mkdir build && cd build
qmake ../CompilerFrontWorkbench.pro
make    # 或 mingw32-make / nmake(Windows)

运行测试

项目包含三个测试模块,可在 main.cpp 中取消注释来运行:

// LexicalModuleTester::instance().testAll();  // 词法模块测试
// SyntaxModuleTester::instance().testAll();    // 语法模块测试
// UiModuleTester::instance().testAll();        // UI 模块测试

使用流程

  1. 配置编译环境:在菜单栏中打开配置对话框,分别指定:

    • 正则表达式规则文件(.regex),可选用 sample/tiny/build/tiny.regex
    • BNF 文法文件(.bnf),可选用 sample/tiny/build/tiny.bnf
    • C++ 编译器路径(用于编译生成的词法分析器)
  2. 构建:点击工具栏的构建按钮,系统将:

    • 执行词法配置流水线,生成词法分析器程序
    • 执行语法配置流水线,构造 LR(1) 分析表
  3. 分析:打开待分析的源代码文件(如 sample/tiny/longTest.tiny),点击分析按钮,系统将:

    • 调用生成的词法分析器将源代码转换为 Token 流
    • 基于 LR(1) 分析表进行语法分析
    • 执行语义动作,生成 AST 和四元组中间代码
  4. 查看结果:在结果视图中查看 AST 树、LR 分析步骤和四元组。

详细使用说明请参阅 使用说明书,示例语言文件位于 sample/ 目录下。

核心算法

算法 说明
Thompson 构造法 正则表达式 → NFA
子集构造法 NFA → DFA
Hopcroft 算法 DFA 最小化
FIRST/FOLLOW 集 LL/LR 分析前置计算
LR(0) 项目集规范族 LR(0) 自动机构造
LR(1) 项目集规范族 LR(1) 自动机构造
SLR(1) 冲突检测 判断文法是否为 SLR(1)
LR(1) 分析表 Action 表 + Goto 表构造
回填(Backpatch) 语义分析中的地址回填

许可证

本项目仅用于教学和学习目的。

About

基于 Qt/C++ 的编译器前端可视化工作台,支持从正则表达式/BNF 文法自动生成词法分析器,并完成 LR(1) 语法分析与语义分析。

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages