资源描述:
《C语言词法分析》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、南华丈曇计算机科学与技术学院实验报告(2015〜2016学年度第2学期)课程名称程序语言设计与编译实验名称C语言词法分析器的设计与实现姓名鲍广明学号20144340218专业数媒班级2地点教师罗江琴1•实验目的及要求软件、硬件环境Win7,VisualStudioC++6.02•实验步骤实验分析:(1)关键字:ifelsewhiledocaseintbreak等所有的关键字都是小写。(2)运算符和界符:二+-*/〈〈二◊>>二二;()等(3)其他单词是标识符(ID)和整型常数(SUM),通过以下正规式定义:ID=
2、letter(lett
3、er
4、digit)*NUM=digitdigit*(4)空格冇空白、制表符和换行符组成。空格一般用来分隔1D、SUM、运算符、界符和关键字,词法分析阶段通常被忽略。(5)注释被忽略(6)各种单词符号对应的种别码(如下):单词符号种别码单词符号种别码auto1double2int3struct4break5else6long7switch8case9enum10register11typedef12char13extern14return15union16const17float18short19unsigned20continue21f
5、or22signed23void24default25goto26sizeof27volatile28do29while30static31if32a33b34f3536t37v38\39?40‘41‘,42 43ddd44xhh45数字46标识符47#48(49)50[51]52{53}5455*56■■5758%59A60+61?■62=63164&65!■66<67>68>=6970»71!=72«73&&74<=75II76++779=■78一79—80・>8182%A(A可为d's'c)8384—8
6、5/868788899091其他类别993.实验内容实验流程图源代码:#includo#include#include#includevoidniainO{FILE*fp,*fpl;inthanjsq=l;intguanjz(charchi[]);charch,infile[15],outfile[15];printf(“*****************Entertheinfilename*******************〃);scanf("%s〃,i
7、nfile);printf(“*****************Entertheoutfilename******************〃);scanfoutfile);if((fp=fopen(infile,^r^))==NULL){printf(z/cannotopenf订e〃);exit(0);if((fpl=fopen(outfi1e,z,w,z))二二NULL)printf(z/cannotopenfile〃);exit(0);printf(“*********************************
8、************************〃);printf(〃*》开始进行词法分析《*〃);种别码〃);ppintf(“ri*********************************************************〃);printfC行号字符串yrwsjz"•I'*I(ifprintf(fpl,彳亍号while(!feof(fp))fprintf(fpl,〃*********************************************************");字
9、符串种别码〃);ch=fgetc(fp);if(ch==10)hanjsq++;if(isalpha(ch)
10、
11、ch=='_'){inti二0;charchi[30];chi[i++]=ch;while(!feof(fp)){ch=fgetc(fp);if(ch==10)hanjsq++;if(isalpha(ch)
12、
13、isdigit(ch)
14、
15、ch==,J){chi[i++]=ch;Jif((ch=fgetc(fp))==,h')if(ch=10)hanjsq++;chl[i++]二;chl[i++]二'h';chl[i]= '
16、;83,z,hanjsq,chi);83hanjsq,chi);printf(z/line%d:%sfprintf(fpl,Z,1ine%d:%sbreak;fseek(fp,-1,1);//fp回退