标准c语言词法分析(c语言描述)

标准c语言词法分析(c语言描述)

ID:40229886

大小:68.00 KB

页数:13页

时间:2019-07-27

标准c语言词法分析(c语言描述)_第1页
标准c语言词法分析(c语言描述)_第2页
标准c语言词法分析(c语言描述)_第3页
标准c语言词法分析(c语言描述)_第4页
标准c语言词法分析(c语言描述)_第5页
资源描述:

《标准c语言词法分析(c语言描述)》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、实验内容:实现标准C语言词法分析器实验目的:1.掌握程序设计语言词法分析的设计方法;2.掌握DFA的设计与使用方法;3.掌握正规式到有限自动机的构造方法;实验要求:1.单词种别编码要求基本字(关键字)、运算符、界符:一符一种;标识符(变量名):统一为一种;常量():按类型编码;2.词法分析工作过程中建立符号表、常量表,并以文本文件形式输出;3.词法分析的最后结果以文本文件形式输出;4.完成对所设计词法分析器的功能测试,并给出测试数据和实验结果;5.为增加程序可读性,请在程序中进行适当注释说明;6.

2、整理上机步骤,总结经验和体会;7.认真完成并按时提交实验报告。#include#include#include#include#includeFILE*fr,*fw,*temp1,*temp2;char*key0[]={"main","printf","scanf","else","if","auto","double","int","struct","break","long","switch","cas

3、e","enum","register","typedef","char","extern","return","union","const","float","short","unsigned","continue","for","signed","void","default","goto","sizeof","volatile","do","while","static"};/*关键字表*/char*key1[]={""","\","%%","(",")","[","]","{","}"

4、,",",";","'"};/*边界符表*/char*key2[]={"","+","-","*","/","%","<",">","==",">=","<=","!=","!","&&","

5、

6、","<<",">>","~","

7、","^","&","=","?:","->","++","--",".","+=","-=","*=","/="};/*运算符表*/intisLet(charc)//判断是否是字母{if(c>='a'&&c<='z'

8、

9、c>='A'&&c<='Z')return1;e

10、lsereturn0;}intisNum(charc)//判断是否是数字{if(c>='0'&&c<='9')return1;elsereturn0;}intisKey(char*word){intm,i;for(i=0;i<36;i++){if((m=strcmp(word,key0[i]))==0){if(i==0)return2;elsereturn1;}}return0;}intisBoudany(char*word){intm,i;for(i=0;i<12;i++){if((m=strc

11、mp(word,key1[i]))==0){if(i==1)return2;elseif(i==2)return3;return1;}}return0;}voidcheck(FILE*fr){charword[30];while(fscanf(fr,"%*")!=EOF){memset(word,0,sizeof(word));charch,temp;ch=fgetc(fr);//获取字符,指针fr并自动指向下一个字符inti,c;if((ch=='')

12、

13、(ch=='t'))//处理空字符

14、{}elseif(ch=='')//处理换行{}elseif(ch=='#')//预处理{while(ch!='>')ch=fgetc(fr);ch=fgetc(fr);fprintf(fw,"跳过头文件和文件宏定义");}elseif(ch=='/')//跳过注释/**/类型{ch=fgetc(fr);if(ch=='/')//跳过注释//类型{while(ch!='')ch=fgetc(fr);}elseif(ch=='*'){ch=fgetc(fr);temp=fgetc(fr)

15、;do{ch=fgetc(fr);temp=fgetc(fr);}while(ch!='*'

16、

17、temp!='/');fprintf(fw,"跳过注释");ch=fgetc(fr);}}elseif(isLet(ch)){word[0]=ch;ch=fgetc(fr);i=1;while(isNum(ch)

18、

19、isLet(ch))//判断该字符是否是字母或数字{word[i]=ch;i++;ch=fgetc(fr);}word[i]='';//''代表字符结束(空格)f

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

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

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