东北大学编译原理实验1(18 页)Good is good, but better carries it.精益求精,善益求善。编译原理程序设计实验报告——实验题目班级:计算机 1507 班 姓名:罗艺博学号:20254377一、实验目标:词法分析扫描器的设计实现。在程序源文件中输入类 C 语言程序源文件,设计词法分析扫描器,并以 TOKEN 类别码序列的形式输出扫描结果。二、实验内容:1.概要设计:将程序大致分为:主函数、识别器(有限自动机state_change)、词法分析器(state_to_code)三大部分。其中,主函数所完成的功能为:打开、读取、关闭文件(即 C 语言源程序),重置 token 串等。识别器的功能为:识别字符,完成 token 串的生成,推断词法错误等。词法分析器的功能为:生成 token 类别码,推断token 是否出错等。主函数、识别器、词法分析器关系图2.流程图词法分析扫描器流程图3.关键函数a. 识别器(有限自动机 state_change)int state_change(state,ch) //识别器,有限自动机{if((ch == ' ') || (ch == '\t') || (ch == '\n'))//略去空格、TAB、换行 return 0; else if((IsAlpha(ch) == 1) || (ch == '_'))//推断是否为字母或'_',从而推断是关键字、标识符、CT 字符还是 ST 字符串 { if(state == 1) return 2; else if(state == 2) return 2; else if(state == 7) return 8; else if(state == 8) return 8; else if(state == 10) return 11; else if(state == 11) return 11; else if(state == 6)//考虑与 PT 相连的情况 { state_to_code(state_before,token); i = 0; memset(token,0,10); return 2; } else return -1; } else if(IsNum(ch) == 1)//推断是否为数字,从而进一步推断是为IT,CT,KT { if(state == 1) return 3; else if(state == 2) return 2; else if(state == 3) return 3; else if(state == 4) return 4; else if(state == 5) return 5; else if(state == 6)//考虑与 PT 相连的情况 { state_to_code(state_before,token); i = 0; memset(token,0,10); return 3; } else return -1; } else if(ch == '.')//推断是否为 CT 中的小数点 { if(state == 3) return 4; else return -1; } else if(ch == '\'')//推断是否为 CT 字符 { if(state == 1) return 7; ...