欢迎来到天天文库
浏览记录
ID:47491011
大小:278.01 KB
页数:9页
时间:2020-01-12
《实验一 简单样本语言的词法分析器》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、昆明理工大学信息工程与自动化学院学生实验报告(2014—2015学年第1学期)课程名称:编译原理开课实验室:信自楼机房4442014年11月20日年级、专业、班学号姓名成绩实验项目名称简单样本语言的词法分析器指导教师李亚教师评语该同学是否了解实验原理:A.了解□B.基本了解□C.不了解□该同学的实验能力:A.强□B.中等□C.差□该同学的实验是否达到要求:A.达到□B.基本达到□C.未达到□实验报告是否规范:A.规范□B.基本规范□C.不规范□实验过程是否详细记录:A.详细□B.一般□C.没有□教师签名:年月日
2、一、实验目的及内容实验目的:能够采用C编程语言实现简单的词法分析程序,设计、编制并调试一个词法分析程序,加深对词法分析原理的理解。实验内容:实现我们定义的语言的词法分析器。这种语言的程序结构很简单,语法相当于c的函数体,即由一对大括号括起来的语句序列,没有过程或函数。声明语句、表达式语句及控制语句的写法都与c类似,但规定:一条声明语句只能声明一个整型变量,没有数组;控制语句只是if、for和while三个语句,这三个语句本身也可以包含语句序列;表达式仅局限于布尔表达式和整型算术表达式,布尔表达式由对两个算术表达
3、式的比较组成,该比较使用<,>,<=,>=,==,!=比较运算符;算术表达式可以包括整型常数、变量以及+,-,*,/这四个运算符。另外,还可以有复合语句。用read和write语句实现输入输出。注释用/*和*/括起来,但注释不能嵌套。-9-一、实验原理及基本技术路线图(方框原理图或程序流程图)词法分析器流程图:三、所用仪器、材料(设备名称、型号、规格等或使用软件)1台PC及VISUALC++6.0软件。四、实验方法、步骤(或:程序代码或操作过程)源代码:#include#include4、ring>usingnamespacestd;-9-#defineMAX22charch='';stringkey[15]={"begin","end","if","then","else","while","write","read","do","call","const","char","until","procedure","repeat"};intIskey(stringc){//关键字判断inti;for(i=0;i5、return0;}intIsLetter(charc){//判断是否为字母if(((c<='z')&&(c>='a'))6、7、((c<='Z')&&(c>='A')))return1;elsereturn0;}intIsDigit(charc){//判断是否为数字if(c>='0'&&c<='9')return1;elsereturn0;}voidanalyse(FILE*fpin){stringarr="";while((ch=fgetc(fpin))!=EOF){arr="";-9-if(ch==''8、9、ch10、=='t'11、12、ch==''){}elseif(IsLetter(ch)){while(IsLetter(ch)13、14、IsDigit(ch)){if((ch<='Z')&&(ch>='A'))ch=ch+32;arr=arr+ch;ch=fgetc(fpin);}fseek(fpin,-1L,SEEK_CUR);if(Iskey(arr)){cout<15、(IsDigit(ch)16、17、ch=='.'&&IsDigit(fgetc(fpin))){arr=arr+ch;ch=fgetc(fpin);}fseek(fpin,-1L,SEEK_CUR);cout<18、e'.':case',':case'{':case'}':cout<':
4、ring>usingnamespacestd;-9-#defineMAX22charch='';stringkey[15]={"begin","end","if","then","else","while","write","read","do","call","const","char","until","procedure","repeat"};intIskey(stringc){//关键字判断inti;for(i=0;i5、return0;}intIsLetter(charc){//判断是否为字母if(((c<='z')&&(c>='a'))6、7、((c<='Z')&&(c>='A')))return1;elsereturn0;}intIsDigit(charc){//判断是否为数字if(c>='0'&&c<='9')return1;elsereturn0;}voidanalyse(FILE*fpin){stringarr="";while((ch=fgetc(fpin))!=EOF){arr="";-9-if(ch==''8、9、ch10、=='t'11、12、ch==''){}elseif(IsLetter(ch)){while(IsLetter(ch)13、14、IsDigit(ch)){if((ch<='Z')&&(ch>='A'))ch=ch+32;arr=arr+ch;ch=fgetc(fpin);}fseek(fpin,-1L,SEEK_CUR);if(Iskey(arr)){cout<15、(IsDigit(ch)16、17、ch=='.'&&IsDigit(fgetc(fpin))){arr=arr+ch;ch=fgetc(fpin);}fseek(fpin,-1L,SEEK_CUR);cout<18、e'.':case',':case'{':case'}':cout<':
5、return0;}intIsLetter(charc){//判断是否为字母if(((c<='z')&&(c>='a'))
6、
7、((c<='Z')&&(c>='A')))return1;elsereturn0;}intIsDigit(charc){//判断是否为数字if(c>='0'&&c<='9')return1;elsereturn0;}voidanalyse(FILE*fpin){stringarr="";while((ch=fgetc(fpin))!=EOF){arr="";-9-if(ch==''
8、
9、ch
10、=='t'
11、
12、ch==''){}elseif(IsLetter(ch)){while(IsLetter(ch)
13、
14、IsDigit(ch)){if((ch<='Z')&&(ch>='A'))ch=ch+32;arr=arr+ch;ch=fgetc(fpin);}fseek(fpin,-1L,SEEK_CUR);if(Iskey(arr)){cout<15、(IsDigit(ch)16、17、ch=='.'&&IsDigit(fgetc(fpin))){arr=arr+ch;ch=fgetc(fpin);}fseek(fpin,-1L,SEEK_CUR);cout<18、e'.':case',':case'{':case'}':cout<':
15、(IsDigit(ch)
16、
17、ch=='.'&&IsDigit(fgetc(fpin))){arr=arr+ch;ch=fgetc(fpin);}fseek(fpin,-1L,SEEK_CUR);cout<18、e'.':case',':case'{':case'}':cout<':
18、e'.':case',':case'{':case'}':cout<':
此文档下载收益归作者所有