这是一个基于Qt框架的词法与语法分析器生成器,包含词法分析器生成和语法分析器生成两个主要功能模块。
能够将正则表达式转换为NFA(非确定性有限自动机),再转换为DFA(确定性有限自动机),并最终生成最小化DFA,用于词法分析。
支持LL(1)、LR(0)、SLR(1)、LR(1)等多种语法分析方法,能够解析BNF文法,生成语法分析表,并进行语法分析。
- 支持解析多种格式的正则表达式
- 支持正则表达式引用(如
digit = [0-9]) - 支持特殊字符转义
- 支持命名规则验证
- 使用Thompson构造法生成NFA
- 支持查看总NFA图
- 支持查看各独立正则表达式对应的NFA图
- 支持NFA状态转移表显示
- 将NFA转换为DFA
- 支持查看总DFA图
- 支持查看各独立正则表达式对应的DFA图
- 支持DFA状态转移表显示
- 使用Hopcroft算法最小化DFA
- 支持查看总最小化DFA图
- 支持查看各独立正则表达式对应的最小化DFA图
- 支持最小化DFA状态转移表显示
- 根据最小化DFA生成词法分析器代码
- 支持保存为C++文件
- 支持测试生成的词法分析器
- 支持输入测试文本
- 支持显示词法分析结果
- 支持解析BNF文法
- 支持查看文法的产生式
- 支持查看文法的非终结符和终结符
- 生成LL(1)分析表
- 支持LL(1)语法分析
- 支持查看语法分析步骤
- 支持LR(0)、SLR(1)、LR(1)分析器生成
- 生成相应的分析表
- 支持语法分析
- 支持查看语法分析步骤
- 支持生成抽象语法树(AST)
-
include/
- task1/:词法分析器生成器的头文件
- task2/:语法分析器生成器的头文件
-
src/
- task1/:词法分析器生成器的源文件
- task2/:语法分析器生成器的源文件
-
test/
- 测试样例/:包含Tiny和mini-c两种语言的测试样例
- 各种测试文件和配置文件
dfabuilder.h/cpp:DFA构建器dfaminimizer.h/cpp:DFA最小化器lexergenerator.h/cpp:词法分析器生成器nfabuilder.h/cpp:NFA构建器regexengine.h/cpp:正则表达式引擎
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:语法分析器
-
c_cpp_properties.json
- 配置了C++编译器路径和IntelliSense设置
- 添加了Qt头文件路径
- 设置了Qt相关的宏定义
-
launch.json
- 配置了VSCode的调试环境
- 设置了正确的可执行文件路径
- 配置了gdb调试器
-
settings.json
- 配置了C/C++ Runner扩展的编译和调试选项
- 打开项目文件夹
- 安装C/C++和C/C++ Runner扩展
- 按F5键开始调试
- 打开
byylCD.pro文件 - 选择合适的构建套件
- 点击构建按钮编译项目
- 点击运行按钮启动程序
- 确保已安装Qt框架(建议使用Qt 6.x版本)
- 确保已将Qt的bin目录添加到系统环境变量中
- 在项目根目录下执行以下命令:
qmake mingw32-make - 编译完成后,在
release或debug目录下找到可执行文件
-
正则表达式输入
- 在"正则表达式"标签页中输入正则表达式
- 支持多行输入,每行一个正则表达式
- 支持注释行(以
//开头) - 支持正则表达式引用(如
digit = [0-9])
-
解析正则表达式
- 点击"解析正则表达式"按钮
- 系统将解析输入的正则表达式
- 显示解析结果,包括正则表达式名称、模式、编码等
-
生成NFA
- 点击"生成NFA"按钮
- 系统将为每个正则表达式生成对应的NFA
- 在"NFA"标签页中查看NFA状态转移表
- 使用组合框切换查看总NFA图或各独立NFA图
-
生成DFA
- 点击"生成DFA"按钮
- 系统将NFA转换为DFA
- 在"DFA"标签页中查看DFA状态转移表
- 使用组合框切换查看总DFA图或各独立DFA图
-
最小化DFA
- 点击"最小化DFA"按钮
- 系统将最小化DFA
- 在"最小化DFA"标签页中查看最小化DFA状态转移表
- 使用组合框切换查看总最小化DFA图或各独立最小化DFA图
-
生成词法分析器
- 点击"生成词法分析器"按钮
- 系统将生成词法分析器代码
- 点击"保存为.cpp"按钮保存代码
-
测试词法分析器
- 在"测试"标签页中输入测试文本
- 点击"运行词法分析"按钮
- 查看词法分析结果
-
BNF文法输入
- 在"文法输入"标签页中输入BNF文法
- 支持多行输入,每行一个产生式
- 支持注释行(以
//开头)
-
解析BNF文法
- 点击"解析文法"按钮
- 系统将解析输入的BNF文法
- 显示解析结果,包括非终结符、终结符、产生式等
-
生成分析表
- 选择分析方法(LL(1)、LR(0)、SLR(1)、LR(1))
- 点击"生成分析表"按钮
- 系统将生成相应的分析表
- 支持查看分析表内容
-
语法分析
- 在"词法分析结果"标签页中输入词法分析结果
- 点击"开始分析"按钮
- 系统将进行语法分析
- 支持查看分析步骤和语法树
- 正则表达式:用于输入和解析正则表达式
- NFA:用于显示NFA状态转移表
- DFA:用于显示DFA状态转移表
- 最小化DFA:用于显示最小化DFA状态转移表
- 词法分析器:用于生成和保存词法分析器代码
- 测试:用于测试词法分析器
- 文法输入:用于输入和解析BNF文法
- 文法分析:用于显示文法分析结果
- 分析表:用于显示生成的分析表
- 词法分析结果:用于输入词法分析结果
- 语法分析:用于显示语法分析结果
- 语法树:用于显示生成的语法树
- 文本编辑框:用于输入正则表达式、BNF文法和测试文本
- 组合框:用于切换查看总图或各独立图,选择分析方法等
- 表格:用于显示状态转移表、分析表等
- 按钮:用于执行各种操作
- 确保已将Qt的bin目录添加到系统环境变量中
- 如果使用MinGW编译器,确保MinGW的bin目录也在系统环境变量中
- 首次运行项目时,编译时间可能较长
- 如果遇到编译错误,请检查Qt版本和编译器版本是否匹配
- 正则表达式名称以下划线开头的将被视为需要生成词法分析器的正则表达式
- 语法分析器支持的语法规则请参考测试样例
- 作者:郭梓烽
- 完成日期:2025/12/07
- 版权所有 © 2025 郭梓烽
- 保留所有权利
- 当前版本:1.0.0
- 发布日期:2025/12/07
- 初始版本发布
- 包含词法分析器生成器和语法分析器生成器
- 支持正则表达式到NFA、DFA、最小化DFA的转换
- 支持LL(1)、LR(0)、SLR(1)、LR(1)语法分析方法
- 支持生成词法分析器代码
- 支持语法树生成和显示