欢迎来到天天文库
浏览记录
ID:13246396
大小:79.50 KB
页数:5页
时间:2018-07-21
《编译原理实验--词法分析器》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、实验一词法分析器设计【实验目的】1.熟悉词法分析的基本原理,词法分析的过程以及词法分析中要注意的问题。2.复习高级语言,进一步加强用高级语言来解决实际问题的能力。3.通过完成词法分析程序,了解词法分析的过程。【实验内容】用C语言编写一个PL/0词法分析器,为语法语义分析提供单词,使之能把输入的字符串形式的源程序分割成一个个单词符号传递给语法语义分析,并把分析结果(基本字,运算符,标识符,常数以及界符)输出。【实验流程图】【实验步骤】1.提取pl/0文件中基本字的源代码while((ch=fgetc(stream)
2、)!='.'){intk=-1;chara[SIZE];ints=0;while(ch>='a'&&ch<='z'
3、
4、ch>='A'&&ch<='Z'){if(ch>='A'&&ch<='Z')ch+=32;a[++k]=(char)ch;ch=fgetc(stream);}for(intm=0;m<=12&&k!=-1;m++)for(intn=0;n<=k;n++){if(a[n]==wsym[m][n])++s;elses=0;if(s==(strlen(wsym[m]))){printf("%st",w
5、sym[m]);m=14;n=k+1;}}2.提取pl/0文件中标识符的源代码while((ch=fgetc(stream))!='.'){intk=-1;chara[SIZE]="";ints=0;while(ch>='a'&&ch<='z'
6、
7、ch>='A'&&ch<='Z'){if(ch>='A'&&ch<='Z')ch+=32;a[++k]=(char)ch;ch=fgetc(stream);}for(intm=0;m<=12&&k!=-1;m++)for(intn=0;n<=k;n++){if(a[n]
8、==wsym[m][n])++s;elses=0;if(s==(strlen(wsym[m]))){m=14;n=k+1;}}if(m==13)for(m=0;a[m]!=NULL;m++)printf("%c",a[m]);3.提取pl/0文件中常数的源代码while((ch=fgetc(stream))!='.'){while(ch>='0'&&ch<='9'){num=10*num+ch-'0';ch=fgetc(stream);}if(num!=0)printf("%d",num);num=0;}2.提取
9、pl/0文件中运算符的源代码intch=fgetc(stream);while(ch!='.'){switch(ch){case'+':printf("+");break;case'-':printf("-");break;case'*':printf("*");break;case'/':printf("/");break;case'>':if(fgetc(stream)=='=')printf(">=");elseprintf(">");break;case'<':if(fgetc(stream)=='=')
10、printf("<=");elseprintf("<");break;case':':printf(":=");break;case'#':printf("#");break;case'=':printf("=");break;default:break;}ch=fgetc(stream);5.提取pl/0文件中界符的源代码intch=fgetc(stream);while(ch!='.'){switch(ch){case',':printf(",");break;case';':printf(";");brea
11、k;case'(':printf("(");break;case')':printf(")");break;default:break;}ch=fgetc(stream);}【实验结果】1.pl/0文件(222.txt)内容consta=10;varb,c;procedurep;beginc:=b+a;end;beginread(b);whileb#0dobegincallp;write(2*c);read(b)endend.2.实验运行结果【实验小结】1.了解程序在运行过程中对词法分析,识别一个个字符并组合成相
12、应的单词,是机器能过明白程序,定义各种关键字,界符。2.词法分析是运行一个程序的开端,在编译原理这门课中加深了对机器内部程序是如何运行,也加强自己上机动手能力。
此文档下载收益归作者所有