# project-compile-principle **Repository Path**: CodexploRe/project-compile-principle ## Basic Information - **Project Name**: project-compile-principle - **Description**: project-compile-principle项目为词法分析程序+语法分析程序的GUI实现。编译原理基础。 - **Primary Language**: Unknown - **License**: AGPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-11-19 - **Last Updated**: 2025-03-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 编译原理项目 - 词法分析与语法分析 ## 简介 本项目是一个基于Qt界面的编译原理词法分析与语法分析工具。它能够读取源代码文件,进行词法分析和语法分析,并展示分析结果。 ## 系统要求 - **操作系统**: Windows 10/11 或 macOS - **编译器**: Qt Creator (推荐版本 5.15 或更高) - **依赖库**: Qt (推荐版本 5.15 或更高) ## 编译方法 ### 1. 安装Qt 首先,确保你的开发环境中安装了Qt。你可以从Qt的官方网站下载Qt Creator,它包含了Qt库和编译器。 - 访问 [Qt官网](https://www.qt.io/download) 下载Qt Creator。 ### 2. 打开源程序 - 打开Qt Creator。 - 选择 "File" > "Open File or Project..."。 - 导航到你的项目文件夹,选择 `.pro` 文件并打开。 ### 3. 编译步骤 - 确保你的Qt版本与项目兼容。 - 在Qt Creator中,选择 "Build" > "Build All" 来编译项目。 - 编译完成后,你将在 "Build" 标签页中看到编译结果。 ## 使用说明 ### 1. 启动程序 在Qt Creator中,选择 "Run" > "Start Debugging" 或 "Start Without Debugging" 来运行程序。若看到如下界面,则程序启动成功: ![image-20241203095711899](README.assets/image-20241203095711899.png) ### 2. 操作步骤 程序启动后,您将看到主窗口,包含两个主要标签页:“词法分析程序”和“语法分析程序”。 #### 2.1 词法分析程序 ![Clip_2024-12-02_19-27-49](README.assets/Clip_2024-12-02_19-27-49-1733138878725-2.png) ##### 2.1.1 生成自动机和代码 - **输入正则表达式**:在文本编辑框中输入或加载正则表达式文件。 - **生成自动机**:点击“生成自动机”按钮,系统将显示NFA、DFA和最小化DFA的状态转换表。 - **生成分词程序代码**:点击“生成分词程序代码”按钮,系统将生成C/C++源程序。 ##### 2.1.2 使用程序分析代码 - **选择分词程序代码**:点击“选择分词程序代码”按钮,加载分词程序。 - **选择代码文件**:点击“选择代码文件”按钮,加载需要分词的源代码文件。 - **执行分词程序**:点击“执行分词程序”按钮,系统将显示分词结果。 #### 2.2 语法分析程序 ![Clip_2024-12-02_19-28-07](README.assets/Clip_2024-12-02_19-28-07.png) ##### 2.2.1 文法编辑和分析 - **输入文法规则**:在文本编辑框中输入或加载BNF文法规则文件。 - **解析文法规则**:点击“解析”按钮,系统将计算First集合、Follow集合,并生成LR(1)或LALR(1)分析表。 ##### 2.2.2 语法分析 - **选择分词结果文件**:点击“选择分词结果文件”按钮,加载分词结果。 - **执行语法分析**:点击“执行语法分析”按钮,系统将显示语法分析过程和生成的语法树。 ### 3. 使用示例 #### 3.1 词法分析 1. 打开“词法分析程序”标签页。 ![Clip_2024-12-02_19-28-52](README.assets/Clip_2024-12-02_19-28-52.png) 2. 在“生成自动机和代码”部分,输入或加载正则表达式。 ![Clip_2024-12-02_19-29-30](README.assets/Clip_2024-12-02_19-29-30.png) ![Clip_2024-12-02_19-30-31](README.assets/Clip_2024-12-02_19-30-31.png) 3. 点击“生成自动机”按钮,查看NFA、DFA和最小化DFA的状态转换表。 - 执行流程较长的功能会有加载弹框,出现时请耐心等待,后续不再赘述,界面如下: ![Clip_2024-12-03_09-12-36](README.assets/Clip_2024-12-03_09-12-36.png) 执行结果示例: ![Clip_2024-12-02_19-33-30](README.assets/Clip_2024-12-02_19-33-30.png) 4. 点击“生成分词程序代码”按钮,生成C/C++源程序。 ![Clip_2024-12-02_19-33-52](README.assets/Clip_2024-12-02_19-33-52.png) ![Clip_2024-12-02_19-34-59](README.assets/Clip_2024-12-02_19-34-59.png) 5. 在“使用程序分析代码”部分,加载分词程序和需要分词的源代码文件。 ![Clip_2024-12-02_19-35-39](README.assets/Clip_2024-12-02_19-35-39.png) ![Clip_2024-12-02_19-37-58](README.assets/Clip_2024-12-02_19-37-58.png) 可选择先生成可执行程序或者先选择代码文件,顺序可以改变 完成上述两步操作后可以看到如下效果: ![Clip_2024-12-02_19-37-22](README.assets/Clip_2024-12-02_19-37-22.png) 6. 点击“执行分词程序”按钮,查看分词结果。 ![Clip_2024-12-02_19-38-18](README.assets/Clip_2024-12-02_19-38-18.png) 之后可以选择保存分词结果到本地文件中。 #### 3.2 语法分析 1. 打开“语法分析程序”标签页。 ![Clip_2024-12-02_19-38-43](README.assets/Clip_2024-12-02_19-38-43.png) 2. 在“文法编辑和分析”部分,输入或加载BNF文法规则和建点标记文件。 ![Clip_2024-12-02_19-39-21](README.assets/Clip_2024-12-02_19-39-21.png) ![Clip_2024-12-02_19-39-45](README.assets/Clip_2024-12-02_19-39-45.png) 3. 点击“解析”按钮,查看First集合、Follow集合和LR(1)或LALR(1)分析表。 ![Clip_2024-12-02_19-40-01](README.assets/Clip_2024-12-02_19-40-01.png) first集合: ![Clip_2024-12-02_19-40-22](README.assets/Clip_2024-12-02_19-40-22.png) follow集合: ![Clip_2024-12-02_19-40-35](README.assets/Clip_2024-12-02_19-40-35.png) LR(1)分析表: ![Clip_2024-12-02_19-40-48](README.assets/Clip_2024-12-02_19-40-48.png) 分析表下方是每个节点的具体内容和出边情况: ![Clip_2024-11-30_16-28-03](README.assets/Clip_2024-11-30_16-28-03.png) LALR(1)分析表同理。 4. 在“语法分析”部分,加载分词结果文件。 ![Clip_2024-12-02_19-41-25](README.assets/Clip_2024-12-02_19-41-25.png) ![Clip_2024-12-02_19-41-48](README.assets/Clip_2024-12-02_19-41-48.png) 5. 点击“执行语法分析”按钮,查看语法分析过程和生成的语法树。 ![Clip_2024-12-02_19-42-17](README.assets/Clip_2024-12-02_19-42-17.png) ![Clip_2024-12-02_19-42-32](README.assets/Clip_2024-12-02_19-42-32.png) ![Clip_2024-12-02_19-43-15](README.assets/Clip_2024-12-02_19-43-15.png) ![Clip_2024-12-02_19-43-47](README.assets/Clip_2024-12-02_19-43-47.png) ### 4. 保存和导出 - 您可以使用“保存分词结果”按钮将分词结果保存到本地文件。 - 您可以使用“保存代码”按钮将生成的分词程序代码保存到本地文件。 ## 常见问题 - **编译失败**: - 确保所有依赖库都已正确安装。 - 检查 `.pro` 文件中的配置是否正确。 - **程序运行错误**: - 确保源代码文件格式正确。 - 查看程序日志以获取错误信息。 ## 许可证 本项目遵循 [AGPL-3.0](https://www.gnu.org/licenses/agpl-3.0.zh-cn.html) 开源许可协议,请确保遵守AGPL-3.0的所有条款和条件。