"编译原理:C语言词法分析实验报告"

需积分: 0 15 下载量 190 浏览量 更新于2024-01-11 1 收藏 266KB DOCX 举报
实验报告:编译原理词法分析 学号:班级:姓名: 一、实验要求 本实验由3-4位同学组成小组完成,具体要求如下: 1. 确定源语言L和编写编译程序的语言P; 2. 用正规式描述L的词法规则; 3. 根据正规式构造一个能够识别单词的有限自动机DFA; 4. 根据DFA,用语言P编写L的词法分析程序; 5. 实验需要在3月24日前完成,并在课堂上进行检查。 二、实验设计 1. 源语言和编译程序语言 源语言我选择了C语言,编译程序语言我选择了C。 2. 单词符号和种别码 根据C语言的单词种类,确定单词符号和种别码如下: - 关键字:auto、break、case、char、const、continue、default、do、double、else、enum、extern、float、for - 运算符:+、-、*、/、% - 比较运算符:==、!=、<、<=、>、>= 3. 正规式描述L的词法规则 根据C语言的词法规则,我们可以得到以下正规式描述: - 自动机的初始状态为0; - 对于标识符,正规式为[A-Za-z_][A-Za-z0-9_]; - 对于整数常量,正规式为[0-9]+; - 对于浮点数常量,正规式为[0-9]+"."[0-9]+; - 对于运算符和比较运算符,直接使用其本身作为正规式即可。 4. 构造DFA 根据正规式构造DFA,具体步骤如下: - 对于标识符,构造一个状态0到状态1的边,边上的标记为字母A-Z、a-z和下划线_;状态1以后的状态通过字母、数字和下划线转换; - 对于整数常量,构造一个状态0到状态2的边,边上的标记为0-9;状态2以后的状态通过数字转换; - 对于浮点数常量,构造一个状态0到状态3的边,边上的标记为0-9;状态3到状态4的边上的标记为.,状态4以后的状态通过数字转换; - 对于运算符和比较运算符,直接构造边即可。 5. 编写词法分析程序 根据构造的DFA,使用语言P编写词法分析程序,具体步骤如下: - 读取输入的源代码; - 从源代码中逐字符读取,根据DFA进行状态转换; - 根据状态转换结果,判断是否识别出一个完整的单词; - 如果识别出一个完整的单词,则输出单词符号和种别码;否则,继续下一个字符的读取。 三、实验结果 根据上述的实验设计,我完成了编写词法分析程序。 四、实验总结 通过本实验,我对编译原理中的词法分析有了更深入的理解。通过使用正规式描述词法规则,并构造有限自动机DFA,我能够编写出一个能够识别源代码中单词符号的词法分析程序。这为之后的语法分析和语义分析提供了基础。 在实验过程中,我遇到了一些困难和挑战。一方面,正规式的构造需要我对编程语言的词法规则有深入的理解;另一方面,构造DFA和编写词法分析程序需要我有良好的编程能力。通过不断的学习和实践,我最终成功地完成了本实验。 总的来说,本实验让我对编译原理的词法分析有了更深入的了解,并提升了我的编程能力。我相信这对我的学习和职业发展都有非常重要的意义。