Skip to content

CrazyThought/byylCourseDesign

Repository files navigation

词法与语法分析器生成器

项目概述

这是一个基于Qt框架的词法与语法分析器生成器,包含词法分析器生成和语法分析器生成两个主要功能模块。

词法分析器生成器

能够将正则表达式转换为NFA(非确定性有限自动机),再转换为DFA(确定性有限自动机),并最终生成最小化DFA,用于词法分析。

语法分析器生成器

支持LL(1)、LR(0)、SLR(1)、LR(1)等多种语法分析方法,能够解析BNF文法,生成语法分析表,并进行语法分析。

功能模块

1. 正则表达式解析

  • 支持解析多种格式的正则表达式
  • 支持正则表达式引用(如digit = [0-9]
  • 支持特殊字符转义
  • 支持命名规则验证

2. NFA生成

  • 使用Thompson构造法生成NFA
  • 支持查看总NFA图
  • 支持查看各独立正则表达式对应的NFA图
  • 支持NFA状态转移表显示

3. DFA生成

  • 将NFA转换为DFA
  • 支持查看总DFA图
  • 支持查看各独立正则表达式对应的DFA图
  • 支持DFA状态转移表显示

4. 最小化DFA生成

  • 使用Hopcroft算法最小化DFA
  • 支持查看总最小化DFA图
  • 支持查看各独立正则表达式对应的最小化DFA图
  • 支持最小化DFA状态转移表显示

5. 词法分析器生成

  • 根据最小化DFA生成词法分析器代码
  • 支持保存为C++文件

6. 词法分析测试

  • 支持测试生成的词法分析器
  • 支持输入测试文本
  • 支持显示词法分析结果

7. BNF文法解析

  • 支持解析BNF文法
  • 支持查看文法的产生式
  • 支持查看文法的非终结符和终结符

8. LL(1)分析器生成

  • 生成LL(1)分析表
  • 支持LL(1)语法分析
  • 支持查看语法分析步骤

9. LR分析器生成

  • 支持LR(0)、SLR(1)、LR(1)分析器生成
  • 生成相应的分析表
  • 支持语法分析
  • 支持查看语法分析步骤

10. 语法树生成

  • 支持生成抽象语法树(AST)

项目结构

主要目录

  1. include/

    • task1/:词法分析器生成器的头文件
    • task2/:语法分析器生成器的头文件
  2. src/

    • task1/:词法分析器生成器的源文件
    • task2/:语法分析器生成器的源文件
  3. test/

    • 测试样例/:包含Tiny和mini-c两种语言的测试样例
    • 各种测试文件和配置文件

主要文件

词法分析器生成器(task1)

  • dfabuilder.h/cpp:DFA构建器
  • dfaminimizer.h/cpp:DFA最小化器
  • lexergenerator.h/cpp:词法分析器生成器
  • nfabuilder.h/cpp:NFA构建器
  • regexengine.h/cpp:正则表达式引擎

语法分析器生成器(task2)

  • Grammar.h/cpp:文法定义
  • GrammarParser.h/cpp:文法解析器
  • LL1.h/cpp:LL(1)分析器
  • LR0.h/cpp:LR(0)分析器
  • SLR.h/cpp:SLR(1)分析器
  • LR1.h/cpp:LR(1)分析器
  • LR1Parser.h/cpp:LR(1)分析器实现
  • SyntaxParser.h/cpp:语法分析器

配置文件说明

VSCode配置文件

  1. c_cpp_properties.json

    • 配置了C++编译器路径和IntelliSense设置
    • 添加了Qt头文件路径
    • 设置了Qt相关的宏定义
  2. launch.json

    • 配置了VSCode的调试环境
    • 设置了正确的可执行文件路径
    • 配置了gdb调试器
  3. settings.json

    • 配置了C/C++ Runner扩展的编译和调试选项

编译说明

使用VSCode编译

  1. 打开项目文件夹
  2. 安装C/C++和C/C++ Runner扩展
  3. 按F5键开始调试

使用Qt Creator编译

  1. 打开byylCD.pro文件
  2. 选择合适的构建套件
  3. 点击构建按钮编译项目
  4. 点击运行按钮启动程序

使用命令行编译

  1. 确保已安装Qt框架(建议使用Qt 6.x版本)
  2. 确保已将Qt的bin目录添加到系统环境变量中
  3. 在项目根目录下执行以下命令:
    qmake
    mingw32-make
    
  4. 编译完成后,在releasedebug目录下找到可执行文件

使用指南

词法分析器生成

  1. 正则表达式输入

    • 在"正则表达式"标签页中输入正则表达式
    • 支持多行输入,每行一个正则表达式
    • 支持注释行(以//开头)
    • 支持正则表达式引用(如digit = [0-9]
  2. 解析正则表达式

    • 点击"解析正则表达式"按钮
    • 系统将解析输入的正则表达式
    • 显示解析结果,包括正则表达式名称、模式、编码等
  3. 生成NFA

    • 点击"生成NFA"按钮
    • 系统将为每个正则表达式生成对应的NFA
    • 在"NFA"标签页中查看NFA状态转移表
    • 使用组合框切换查看总NFA图或各独立NFA图
  4. 生成DFA

    • 点击"生成DFA"按钮
    • 系统将NFA转换为DFA
    • 在"DFA"标签页中查看DFA状态转移表
    • 使用组合框切换查看总DFA图或各独立DFA图
  5. 最小化DFA

    • 点击"最小化DFA"按钮
    • 系统将最小化DFA
    • 在"最小化DFA"标签页中查看最小化DFA状态转移表
    • 使用组合框切换查看总最小化DFA图或各独立最小化DFA图
  6. 生成词法分析器

    • 点击"生成词法分析器"按钮
    • 系统将生成词法分析器代码
    • 点击"保存为.cpp"按钮保存代码
  7. 测试词法分析器

    • 在"测试"标签页中输入测试文本
    • 点击"运行词法分析"按钮
    • 查看词法分析结果

语法分析器生成

  1. BNF文法输入

    • 在"文法输入"标签页中输入BNF文法
    • 支持多行输入,每行一个产生式
    • 支持注释行(以//开头)
  2. 解析BNF文法

    • 点击"解析文法"按钮
    • 系统将解析输入的BNF文法
    • 显示解析结果,包括非终结符、终结符、产生式等
  3. 生成分析表

    • 选择分析方法(LL(1)、LR(0)、SLR(1)、LR(1))
    • 点击"生成分析表"按钮
    • 系统将生成相应的分析表
    • 支持查看分析表内容
  4. 语法分析

    • 在"词法分析结果"标签页中输入词法分析结果
    • 点击"开始分析"按钮
    • 系统将进行语法分析
    • 支持查看分析步骤和语法树

界面说明

标签页

词法分析器生成器

  1. 正则表达式:用于输入和解析正则表达式
  2. NFA:用于显示NFA状态转移表
  3. DFA:用于显示DFA状态转移表
  4. 最小化DFA:用于显示最小化DFA状态转移表
  5. 词法分析器:用于生成和保存词法分析器代码
  6. 测试:用于测试词法分析器

语法分析器生成器

  1. 文法输入:用于输入和解析BNF文法
  2. 文法分析:用于显示文法分析结果
  3. 分析表:用于显示生成的分析表
  4. 词法分析结果:用于输入词法分析结果
  5. 语法分析:用于显示语法分析结果
  6. 语法树:用于显示生成的语法树

控件

  • 文本编辑框:用于输入正则表达式、BNF文法和测试文本
  • 组合框:用于切换查看总图或各独立图,选择分析方法等
  • 表格:用于显示状态转移表、分析表等
  • 按钮:用于执行各种操作

注意事项

  1. 确保已将Qt的bin目录添加到系统环境变量中
  2. 如果使用MinGW编译器,确保MinGW的bin目录也在系统环境变量中
  3. 首次运行项目时,编译时间可能较长
  4. 如果遇到编译错误,请检查Qt版本和编译器版本是否匹配
  5. 正则表达式名称以下划线开头的将被视为需要生成词法分析器的正则表达式
  6. 语法分析器支持的语法规则请参考测试样例

项目信息

作者信息

  • 作者:郭梓烽
  • 完成日期:2025/12/07

版权信息

  • 版权所有 © 2025 郭梓烽
  • 保留所有权利

版本信息

  • 当前版本:1.0.0
  • 发布日期:2025/12/07

更新日志

2025/12/07 - 版本 1.0.0

  • 初始版本发布
  • 包含词法分析器生成器和语法分析器生成器
  • 支持正则表达式到NFA、DFA、最小化DFA的转换
  • 支持LL(1)、LR(0)、SLR(1)、LR(1)语法分析方法
  • 支持生成词法分析器代码
  • 支持语法树生成和显示

About

Just piece of st.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages