根据提供的实验报告,我们可以总结出以下相关知识点: ### 1. 实验背景 - **课程名称**:编译原理 - **实验名称**:词法分析 - **实验目的**: - 设计并实现一个词法分析器,能够识别输入的源程序字符串中的单词,并将其转换为计算机更易于处理的形式。 - 加深对C语言的理解和应用能力。 ### 2. 实验内容 #### 2.1 输入输出 - **输入**:任意的一段程序(字符串形式)。 - **输出**:程序中的词法单元(属性字序列)。 #### 2.2 实现要求 - **不处理说明部分**:忽略源程序中的注释、声明等非执行代码。 - **属性字的符号类**:除编码外,还应包含其他相关信息,例如运算符的优先级等。 - **小子集的符号类**:应具有代表性,尽可能涵盖常见的符号类别。 - **帮助信息**:提供用户指南,介绍可用的符号和属性字结构。 ### 3. 数据结构设计 #### 3.1 关键字数组与优先级 - **Keywords**:存储了15个C语言的关键字。 - **keywords**:对应于关键字的优先级编码。 #### 3.2 符号表及其优先级 - **Fuhao**:存储了18种常见符号。 - **fuhao**:对应于符号的优先级编码。 #### 3.3 双目运算符及其优先级 - **Smy**:存储了13种双目运算符。 - **smy**:对应于双目运算符的优先级编码。 ### 4. 流程图 报告中提到了两个流程图: - **词法分析控制流程图**:用于概述整个词法分析的过程。 - **取字符子程序的控制流程图**:详细说明了如何从输入流中提取字符的逻辑。 ### 5. C语言代码实现 #### 5.1 主要函数 - **ql()**:清空字符数组`token`。 - **pd(ifstream& myinf)**:从输入流`myinf`中读取字符,判断是否为关键字或标识符。 - **zf(ifstream& myinf)**:从输入流`myinf`中读取符号,判断是否为单目或双目运算符。 #### 5.2 关键逻辑 - **pd()函数**: - 读取字符到`token`数组中,直到遇到非字母数字字符。 - 检查`token`是否匹配关键字数组`Keywords`中的任何关键字。 - 如果匹配,则输出该关键字及其优先级;否则,输出为标识符。 - **zf()函数**: - 读取符号到`token`数组中,检查是否为双目运算符。 - 如果是双目运算符,则输出该运算符及其优先级。 - 否则,输出为单目运算符及其优先级。 ### 6. 总结 本实验通过设计和实现一个简单的词法分析器,旨在加深学生对词法分析概念的理解,并提高其使用C语言进行编程的能力。通过实验,学生能够掌握如何处理文本输入、识别关键字和标识符、解析运算符等基本的编译原理技术。此外,通过编写清晰的代码和提供详细的文档(包括流程图和帮助信息),学生还能学习到软件开发过程中文档编写的重要性。
- 墨锋2017-11-05看了蛮不错的
- 粉丝: 0
- 资源: 3
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助