资源描述:
《词法分析报告附代码devc》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、屮北大学软件学院实验报告专业课程名称学号屮北大学软件学院实验报告专业课程名称学号辅导教师成绩实验日期实验时间1实验名称:词法分析器的设计与实现2、实验目的(1)掌握C语言单词符号的划分、正规式、状态转换图及词法分析器的实现。(2)掌握词法分析程序的作用。3、实验要求(1)对任给的一个C语言源程序,能够滤掉空格、回车换行符、tab键及注释。(2)识别各类单词符号,如关键字、标识符、运算符、常数、界符,结果以二元式形式输出,并构造符号表。(3)输出有词法错谋的单词及所在行号。(在此阶段只能识别有限的词法错谋)4、实验原理根据扫描到的单词符号的第一个字符的种类,分别转到相应
2、的程序进行处理。这些程序的功能就是识别以相应字符开头的各类单词符号。5、实验步骤(1)根据C语言各类单词的正规式,构造能识别各类单词的状态转换图。(2)根据状态转换图,构造识别各类单词的词法分析器。6、状态转换图及词法分析程序(1)标识符(1D)和整型常数(NUM)的正规式如下:ID=
3、letter(letter
4、digit)*NUM=digitdigit*其中标识符的状态转换图为:为(ch~'))其词法分析程序if(((ch>=A')&&(ch"'Z'))((ch>=『)&&(ch<=z'))/*以字母开头*/while(((ch>=,A*)&&(ch〈二'Z'))
5、
6、
7、((ch>二'a')&&(ch〈二'z'))
8、
9、(ch==,_,)
10、
11、((ch>=,0')&&(chU'9'))){array[i++]=ch;ch=fgetc(fpin);}word=(char*)malloc((i+1)*sizcof(char));memcpy(word,array,i);word[i]二' ';isidkey(word);if(ch!=EOF)fseek(fpin,-IL,SEEK_CUR);)常数的状态转换图为:其词法分析程序为:elseif(ch>二'O'&&ch〈二'9'){/*以数字开头*/whi1e(ch>二'0,&&ch〈二'
12、9')array[i++]=ch;ch二fgetc(fpin);word=(charmal1oc((i+1)izeof(char));is_number(word,array,i);word[i]二' ';csmanage(word);if(ch!=EOF)fseek(fpin,-lL,SEEK_CUR);流程图输团対战的広即杆帕的字味足舌为士?计龙frS敎学检出它見&印R7、测试及结果ca*C:DOCU1EITSAIDSETTIlGSABIIIISTRAT0R^fiqq4qqq4Debugqqq«qq
13、ut,txt-记爭本-Jn
14、x
15、文件d)編辑g)格式(Q)查看世)帮肋Qi)nincludemain()#includc#include#includevoidinit();intscan();/////////////////////////////////////////////////////A判断是否关键字结束)voidis_nuinber(char*p){HLE*fp;fp=fopen(Hconstant.txt"
16、,"a");fprintf(fp,”%s”,p);fclose(fp);fp=fopen("output.txt',,,,a,');fprintf(fp,"%sH,p);fclose(fp);}/////////////////////////////////////////////////////判断是否为常虽intis_limit(char*ch){inti;for(i=0;i<41;i++){if(ch==limit[i])return1;return-1;voidis_error(charerror,intlineno){printf("error
17、:%c,line%d',,error,lineno);///////////////////////////////////////////////////////报告出错符号和所在行数"enum",char*Key[]={"auto","break","case*',"char","const","continue","default",“do”,“double",“else",“extern",“float”,”for“,“goto",Hif"long","printf',"register","return","short","signed"