词法分析 编译原理 课程实验

词法分析 编译原理 课程实验

ID:10777926

大小:52.50 KB

页数:6页

时间:2018-07-08

词法分析 编译原理 课程实验_第1页
词法分析 编译原理 课程实验_第2页
词法分析 编译原理 课程实验_第3页
词法分析 编译原理 课程实验_第4页
词法分析 编译原理 课程实验_第5页
资源描述:

《词法分析 编译原理 课程实验》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、《编译原理》课程实验实验一:词法分析1、实验目的:设计、编制并调试一个词法分析程序,加深对词法分析程序的理解。2、实验要求:(1)能识别关键字、运算符号、界符、标识符、数字(无符号整数、实数(4分)、科学计数法表示的数(5分))(2)要求建立一张关键字和种别码表(3)源程序从键盘输入(4分)、源程序以文件的形式输入(5分)typedefstructnode{charname[20];intdata;structnode*next;}*linklist,lnode;structkey{charname[20];intnumber;}kword[]={{"int",1},

2、{"float",2},{"if",3},{"switch",4},{"while",5},{"do",6},{"main",7},{"double",8},{"char",9},{"else",12},{"for",18},{"case",19},{"+",13},{"-",14},{"*",15},{"/",16},{"=",17},{"<",20},{"<=",21},{"==",22},{"!=",23},{">",24},{">=",25},{"{",31},{"}",32},{";",26},{"(",27},{")",28},{"?",29},{":",

3、30}};/*定义一个静态表*/#include#include#includeintmain(){FILE*fp,*fp1;charstring[81];linklistH,p,r;chara[20];charch;charstr[]="##########################";inti,j=0,k=0,f=0,n=0,t=0;H=(linklist)malloc(sizeof(lnode));H->next=NULL;r=H;if((fp=fopen("test.txt","r"))==N

4、ULL){printf("不能打开文件");return0;}while(fgets(string,81,fp)!=NULL)/*读取一行字符存入string中*/{if(!strcmp(string,str))/*判断string中是否是'##########################'*/{p=(linklist)malloc(sizeof(lnode));strcpy(p->name,str);p->data=100;r->next=p;r=p;printf("编译下一段程序");continue;}else{i=0;n++;ch=

5、string[i];while(ch==''

6、

7、ch=='t'

8、

9、ch=='')/*滤去空格*/{i++;ch=string[i];}while(string[i]!=''&&string[i]!='')/*进行字符匹配*/{p=(linklist)malloc(sizeof(lnode));if(ch>='a'&&ch<='z')/*对于以字符开头的匹配操作*/{a[j]=ch;j++;i++;ch=string[i];t=0;/*标志量*/while(ch!='+'&&ch!='-'&&ch!='*'&&ch!='/'&&ch!=';'&&ch!='

10、('&&ch!=')'&&ch!='?'&&ch!=':'&&ch!='{'&&ch!='}'&&ch!='<'&&ch!='>'&&ch!='='&&ch!='!'&&ch!=''){if((ch<'a'

11、

12、ch>'z')&&(ch<'0'

13、

14、ch>'9'))t=1;/*为非法标识符的t置*/a[j++]=ch;i++;ch=string[i];}a[j]='';if(t==1)/*t为判断为非法字符*/{printf("第%d行%s编译出错",n,a);j=0;}else{strcpy(p->name,a);j=0;k=0;while(k<31&&(str

15、cmp(p->name,kword[k].name)!=0))/*查找静态表*/k=k+1;if(k==31)/*没找到,为用户定义的标识符*/p->data=10;elsep->data=kword[k].number;printf("(%d,%s)",p->data,p->name);r->next=p;r=p;}}elseif(ch>='0'&&ch<='9')/*对以数字开头的进行匹配操作*/{a[j]=ch;j++;i++;ch=string[i];f=0;while(ch>='0'&&ch<='9'

16、

17、ch>='a'&&ch<='z'

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

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

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