词法分析器C语言

词法分析器C语言

ID:41551333

大小:94.16 KB

页数:5页

时间:2019-08-27

词法分析器C语言_第1页
词法分析器C语言_第2页
词法分析器C语言_第3页
词法分析器C语言_第4页
词法分析器C语言_第5页
资源描述:

《词法分析器C语言》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、【实验目的】1.熟悉词法分析的基本原理,词法分析的过程以及词法分析屮要注意的问题。2.复习高级语言,进一步加强用高级语言来解决实际问题的能力。3.通过完成词法分析程序,了解词法分析的过程。【实验内容】用C语言编写一个PL/O词法分析器,为语法语义分析提供单词,使之能把输入的字符串形式的源程序分割成一个个单词符号传递给语法语义分析,并把分析结果(基本字,运算符,标识符,常数以及界符)输出。【实验步骤和要求】1•词法分析过程的流程图2•每个模块的源代码〃对关键字等实现初始化voidinit(){inti;for(i=0;i<=255;i++){ssym[i]

2、=nul;)ssym['+‘]二plus;ssym[-f]-minus;ssym严]-times;ssym[7‘]一slash;ssym[,(/]=lparen;ssym[T]=pe「iod;ssym[')‘]二rparen;ssym[-*]=eql;ssym[T]二comma;ssym

3、/#】=neq;ssyml^^semicolon;strcpy(&(word[01f01)/,beginH);strcpy(&(word[2][0]),"const");strcpy(&(word[4][0]),"end");strcpy(&(word[6][0]),H

4、odd");strcpy(&(word⑻[0]),"read”);strcpy(&(word[10][0]),”var“);strcpy(&(woni[12][0]),”wrilc”);strcpy(&(word[l][0]);,calF,);strcpy(&(word[3][0]),udoM);strcpy(&(word⑸[0]strcpy(&(wordl7][0J),"procedure");strcpy(&(word[9][0]),"program”);strcpy(&(word]11][()]),“while");strcpy(&(word]13

5、][0]),”lhc】T');wsym[2J=constsym;wsym[5]=ifsym;wsym[8]=readsym;wsym[ll]=whilesym;wsym[0J=beginsym;wsym[l]=callsym;wsym[3]=dosym;wsym[4]=endsym;wsym[6]=oddsym;wsymf7]=procsym;wsym[9]=programsym;wsym[10]=varsym;wsym[12]=writesym;wsym[13]=thensym;〃读取源文件并判断单词类别voidgetsym(){longm;chari

6、d[al+l],a[al+l];inti,k,n=0;init();if(ch==,l

7、ch==10

8、

9、ch==9){ch=fgetc(fin);}〃去除空格、制表符、换行符else{if(ch>=,a,&&ch<=,z,

10、

11、ch>=,A,&&ch<=,Z,){〃判断是否保留字k=0;do{if(k=*a'&&ch<=,z,

12、

13、ch>=,0'&&chv=9

14、

15、ch>=A&&ch<=,Z,);afk]=O;strcpy(id,a);for(i=0;i

16、f(strcmp(id,word[i])==0){sym=wsym[i];n=l;if(i==7){printf(H%stt%ssym(保留字)”,id,id);fprintf(fout,"%stt%ssym(保留字)”,id,id);}else}printf("%sttt%ssym(保留字)",id,id);fprintf(fout,"%sttt%ssym(保留字)",id,id);}break;}}if(n==O){sym=ident;printf("%stttident(标识符)",id);fprint

17、f(fout,"%stttident(标识符)”,id);}}else{if(ch>=,0•&&chv=9){k=0;m=0;sym二number;do{m=10*m+ch-0,;k++;ch=getc(fin);}while(ch>=*0'&&ch<=,9,);if(k>=nmax)(printf("tERROR!数值太大!”);printf("%dtttnumber(常数)'*,m);fprintf(fout,H%dtttnumber(常数)",m);}else{if(ch==':,){ch=getc(fin);i

18、f(ch=-=,)〃判断是否标识符〃判断是否数字〃判断是否运算符、界符sym=b

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。