中北大学软件学院实 验 报 告 专 业 软件工程 课程名称 编译原理 学 号 1414011712 姓 名 杨倩 辅导老师 张静 成绩 14:00~18:001 实验名称 :词法分析器的设计与实现2、实验目的(1)掌握 C 语言单词符号的划分、正规式、状态转换图及词法分析器的实现.(2)掌握词法分析程序的作用。3、实验要求(1)对任给的一个 C 语言源程序,能够滤掉空格、回车换行符、tab 键及注释。(2)识别各类单词符号,如关键字、标识符、运算符、常数、界符,结果以二元式形式输出,并构造符号表。(3)输出有词法错误的单词及所在行号.(在此阶段只能识别有限的词法错误)4、实验原理根据扫描到的单词符号的第一个字符的种类,分别转到相应的程序进行处理。这些程序的功能就是识别以相应字符开头的各类单词符号。5、实验步骤(1)根据 C 语言各类单词的正规式,构造能识别各类单词的状态转换图.(2)根据状态转换图,构造识别各类单词的词法分析器.6、状态转换图及词法分析程序//词法分析程序。cpp#include#include#include='a’))||((c〈=’Z’)&&(c>=’A’))) return 1;else return 0;}int IsNum(char c){ //推断是否为数字if(c>='0’&&c〈=’9’) return 1;else return 0;}int IsKey(char *Word){ //识别关键字函数int m,i;for(i=0;i〈9;i++){if((m=strcmp(Word,Key[i]))==0){if(i==0)return 2;return 1;}} return 0;}void scanner(FILE *fp){ //扫描函数char Word[20]={'\0'};char ch;int i,c;ch=fgetc(fp); //猎取字符,指针 fp 并自动指向下一个字符if(IsAlpha(ch)){ //推断该字符是否是字母Word[0]=ch;ch=fgetc(fp);i=1;while(IsNum(ch)||IsAlpha(ch)){ //推断该字符是否是字母或数字Word[i]=ch;i++;ch=fgetc(fp); }Word[i]='\0’; //'\0’ 代表字符结束(空格)fseek(fp,-1,1); //回退一个字符c=IsKey(Word); //推断是否是关键字if(c==0) printf(”%s\t$普通标识符\n\n”,Word);//不是关键字else if(c==2) printf(”%s\t$主函数\n\n”,W...