您好,欢迎访问三七文档
电子信息学院实验报告书课程名:《编译原理》题目:实验五词法分析(一)实验类别【设计】班级:学号:姓名:评语:实验态度:认真()一般()差()实验结果:正确()部分正确()错()实验理论:掌握()熟悉()了解()不懂()操作技能:强()一般()差()实验报告:好()一般()差()成绩:指导教师:批阅时间:年月日《VB.NET程序设计》实验报告-1-1、实验内容或题目掌握并实现识别程序中关键字的方法,并编程实现。为词法分析打基础。2、实验目的与要求任意输入一段C语言程序,字符串中的每个单词用空格分隔,要求识别出程序中的关键字。3、实验步骤与源程序⑴实验步骤1.定义关键字表。可以考虑用字符数组定义。2.定义一个输出关键字的缓冲区。用字符数组实现即可。长度可暂定为40。3.打开代码文件。4.从文件中读入单词5.判断单词是否是关键字⑵源代码#includestdio.h#includectype.h#includeiostream//下面定义保留,为简化程序,使用字符指针数组保存所有保留字。//如果想增加保留字,可继续添加,并修改保留字数目#definekeywordSum3//可根据需要添加保留字列表char*keyword[keywordSum]={begin,main,void};charPL0Scanin[300];//用于接收输入输出文件名FILE*fin;//用于指向输入输出文件的指针intmain()//词法分析函数{charch,id[40];//ch为每次读入的字符,id用于保存识别出的单词intes=0,j,n;//es错误代码,0表示没有错误。j,n为临时变量,控制组合单词时的下标等printf(请输入源程序文件名(包括路径):);scanf(%s,PL0Scanin);if((fin=fopen(PL0Scanin,r))==NULL)//判断输入文件名是否正确《VB.NET程序设计》实验报告-2-{printf(\n打开词法分析输入文件出错!\n);return(1);//输入文件出错返回错误代码1}ch=getc(fin);while(ch!='\0'){//未读到文件结束while(ch==''||ch=='\n'||ch=='\t')ch=getc(fin);if(ch==EOF)break;if((ch='a'&&ch='z')||(ch='A'&&ch='Z'))//如果ch是字母,则进行标识符处理{id[0]=ch;j=1;//从文件中读入下一个字符ch=getc(fin);while(isalnum(ch))//如果是字母数字则组合标识符;如果不是则标识符组合结束{//将读入的字符存放在id数组中,同时将数组下标增加1,准备容纳下一个字符。id[j++]=ch;ch=getc(fin);//读下一个字符}id[j]='\0';//标识符组合结束//查保留字n=0;//z在保留子表中查找保留字while((nkeywordSum)&&strcmp(strlwr(id),keyword[n]))n++;if(n=keywordSum)//不是保留字,输出标识符printf(%s\t%d\t%s\n,id,0,IDENT);//输出标识符符号else//是保留字,输出保留字printf(%s\t%d\t%s\n,strlwr(id),0,strlwr(id));//输出保留字符号}}fclose(fin);//关闭输入输出文件《VB.NET程序设计》实验报告-3-//fclose(fout);return(es);//返回主程序}4、测试数据与实验结果(可以抓图粘贴)5、结果分析与实验体会
本文标题:编译原理实验五
链接地址:https://www.777doc.com/doc-4254592 .html