版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、学生学号实验课成绩武汉理工大学学生实验报告书实验课程名称编译原理开课学院计算机科学与技术学院指导老师姓名饶文碧学生姓名学生专业班级学年第学期实验课程名称:编译原理实验项目名称单词的词法分析实验成绩实验者专业班级组别同组者实验日期第一部分:实验分析与设计(可加页)一、实验内容描述(问题域描述)完成对某一种常用高级语言(如Pascal、C语言、PL/0语言)的各类单词进行词法分析,即对源程序从左到右进行扫描,对组成源程序的字符串拼接成为单词;并把其转换成属性字输出。实验要求:(1)选择常用高级程序设计语言(如Pascal、C语言、PL/0语言)的源程序作为词法分析对象。(2)根据教学要求和学生具体
2、情况,从上列语言之一中选取它的一个适当大小的子集,可以选取一类典型单词,也可以尽可能使各种类型的单词都能兼顾到。其基本要求是:对源程序从左到右进行扫描,对组成源程序的字符串拼接成为单词,并把其转换成属性字输出。教育资料二、实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑或者算法描述)#include#include#include#includechar*table7=,main,int,if,then,else,return,TOKEN20,ch;intlookup(char*TOKEN)intm,i;for(i=1;i6;i+)if(m=strcmp(TOKEN
3、,tablei)=0)return(i);return(0);voidout(intc,char*TOKEN)printf(%d,%s)n,c,TOKEN);定义关键字关键字匹配函数/输出函数扫描函数定义关键字关键字匹配函数/输出函数扫描函数charTOKEN20=0;charch;inti,c;ch=fgetc(fp);获取字符指针口并自动指向下一个字符if(isalpha(ch)判断该字符是否是字母判断该字符是否是字母或数字回退一个字符判断该字符是否是字母或数字回退一个字符/输出标识符/输出关键字判断是否是数字TOKEN0=ch;ch=fgetc(fp);i=1;while(isalnum
4、(ch)TOKENi=ch;i+;ch=fgetc(fp);TOKENi=0;fseek(fp,-1,1);c=lookup(TOKEN);if(c=0)out(6,TOKEN);elseout(c,TOKEN);elseif(isdigit(ch)TOKEN0=ch;ch=fgetc(fp);i=1;while(isdigit(ch)TOKENi=ch;i+;ch=fgetc(fp);TOKENi=0;fseek(fp,-1,1);out(7,TOKEN);elseTOKEN0=ch;switch(ch)case:out(17,TOKEN);break;case:out(18,TOKEN);
5、break;case,:out(14,TOKEN);break;case;:out(15,TOKEN);break;case)out(11,TOKEN);elsefseek(fp,-1,1);out(8,TOKEN);break;case=:out(10,TOKEN);break;case:ch=fgetc(fp);TOKEN1=ch;if(ch=)out(13,TOKEN);elsefseek(fp,-1,1);out(12,TOKEN);break;default:printf(error!n);break;voidmain()FILE*fp;if(fp=fopen(D:ZHT.txt,r
6、)=NULL)读取文件内容,并返回文件指针,该指针指向文件的第一个字符fprintf(stderr,errorexit(1);doch=fgetc(fp);if(ch=#)break;fprintf(stderr,errorexit(1);doch=fgetc(fp);if(ch=#)break;if(ch=)scanner(fp);elsefseek(fp,-1,1);opening.n);/文件以#结尾作为扫描结束条件如果是空格,自动跳到下个字符如果不是空格,则回退一个字符并扫描scanner(fp);while(ch!=#);return(0);三、主要仪器设备及耗材VC6.0第二部分:
7、实验调试与结果分析(可加页)第二部分:实验调试与结果分析(可加页)一、调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等)在扫描源程序字符串时一旦识别出关键字、分隔符、标识符、无符号常数中之一即以单词形式各类单词均采用相同的结构,即二元式编码形式输出。每次调用词法分析程序它均能自动继续扫描下去形成下一个单词,直至整个源程序全部扫描完毕,并形成相应的单词串形式的源程序。二、实验结果及分析(包括结果描述、实验现象分析、影响因素讨论、综合分析和结论等)口涉至二记事本.文件旧统璟但)格式J,查看g帮助(HinainQ.tiiita,b;a=4;return;#实验课程名称:编
8、译原理实验项目名称赋值语句的翻译程序设计实验成绩实验者专业班级组别同组者实验日期第一部分:实验分析与设计(可加页)一、实验内容描述(问题域描述)对于常用高级语言(如Pascal、。语言)的源程序从左到右进行扫描,把其中赋值语句用所学过的语法分析方法进行语法分析,采用最有代表性的语义分析方法将其转换为中间代码形式表示输出。实验要求(1)选择最有代表性的语法分析方法,如算符优先法(或简单优先法)、递归下降分析法、LL分析法和LR分析法之一进行语法分析。(2)选择对各种常见程序语言都通用的语法结构,如赋值语句(尤指表达式)作为分析对象,并且与所选语法分析方法要比较贴切。(3)选择最有代表性的语义分析
9、方法,如语法制导翻译方法进行语义翻译工作。(4)实习时间为46小、时。二、实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑或者算法描述)voidmain()intg,h,i,j,l,p,y,z,count;inta10;/状态栈intni10;/存放输出逆波兰式的参数charb10;符号栈charstr10;/放输入的表达式charc1;inttop1,top2,top3,top,topn,m,n;charx;charcopy10;/放Si,ri,看移进还是归约charcopy110;charvt6=+,*,i,C,),#;/存放非终结符charvn=E;/存放终结
10、符char*LR4=E-E+E,E-E*E,E-(E),E-i;存放产生式;top1=0;top2=0;top3=0;top=0;topn=0;a0=0;y=a0;b0=#;count=0;z=0;cout文法GE:endl;coutt(1)E:=E+Eendl;coutt(2)E:=E*Eendl;coutt(3)E:=(E)|iendl;cout文法GE合法句子举例:i+i*iendl;cout*endl;cout请输入符号串:str;l=strlen(str);strl=#;for(i=l+1;i10;i+)stri=NULL;coutendltt符号串str分析过程如下:endl;co
11、ut-endl;cout步骤t状态栈tt符号栈tt输入串ttACTIONtGOTOendl;doy=z;m=0;n=0;/y,z指向状态栈栈顶g=top;j=0;x=strtop;count+;coutcountt;while(m=top1)/输出状态栈coutam;m=m+1;couttt;while(n=top2)/输出符号栈coutbn;n=n+1;couttt;strtop-1=;coutstr;/输出输入串couttt;while(x!7tj&j=6)j+;/vt6=+,*,i,(,),#存放终结符if(j=6&x!=vtj)coutendlendl;coutendl输入字符串不是该
12、文法的一个句子!endl;coutendl按任意数字或字母键,回车退出!i;return;)if(actionyj=NULL)coutendlendl;coutendl输入字符串不是该文法的一个句子!endl;coutendl按任意数字或字母键,回车退出!i;return;)else/couty=yj=jstrcpy(copy,actionyj);if(copy0=S)z=copy1-0;top1=top1+1;top2=top2+1;atop1=z;btop2=x;top=top+1;i=0;while(copyi!=#)coutcopyi;i+;)coutendl;)/couty=yj=j
13、actionyj;处理移进/a10状态栈actionyj;处理移进/a10状态栈/b10符号栈x=strtopactionyj;/处理归约i=0;while(copyi!=#)cout也)#,田-1#存放产生式/while(copy10!=vn0)k+;/丫过1=飞存放非终结符l=strlen(LRh);top1=top1-l+3;y=atop1;/couttop1=top1;/y=h-1;p=goto1y;top2=top2-l+4;top1=top1+1;atop1=p;btop2=copy10;z=p;coutt;coutpendl;while(actionyj!=acc);coutac
14、cendl;coutendlendl;coutendl输入字符串是该文法的一个句子!endl;cout中间代码的逆波兰式如下:endl;for(i=0;i10;i+)if(nii=1)coutEEE+=endl;if(nii=2)coutEEE*=endl;if(nii=3)coutEE()=endl;if(nii=4)coutiE=endl;coutendl按任意数字或字母键,回车退出!i;三、主要仪器设备及耗材VC6.0教育资料教育资料第二部分:实验调试与结果分析(可加页)调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等)用LR分析法完成此次文法分析的关键在于构
15、造该文法的分析表,以及如何运用该分析表完成移入和归约的过程,从而完成整个文法的分析。根据LR分析的基本原理,语法分析程序的主要任务就是:不断移进输入符号,识别句柄并归约它。在分析过程中,利用分析栈存放已识别的那部分句型,而句型的其余部分由剩余输人串组成,通过输入串的当前符号和分析栈的栈顶状态查找分析表应采取的动作,对状态栈和符号栈进行相应的操作。本程序中主要用到的数据结构是栈,实现的相应操作有建立两个空栈操作数栈OPR,操作符栈OPT,压栈push,出栈pop,取栈顶元素OPRtop等,每个操作用相应的代码实现。该数据结构主要完成状态栈的操作,对每个状态进行相应的压栈、出栈和取栈顶元素等操作。实验结果及分析(包括结果描述、实验现象分析、影响因
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年某服装设计与某纺织厂关于环保材料应用的合作协议
- 2024-2030年中国卫生消毒场运行状况及投资发展前景预测报告
- 2024年度养老机构与专业护理团队合作协议3篇
- 2024上海应届生落户离职赔偿金计算及协议3篇
- 2024年版房地产项目开发合作合同样本版B版
- 珠海城市职业技术学院实训室安全事故应急处置管理办法(已发文)
- 满洲里俄语职业学院《软件工程原理与应用》2023-2024学年第一学期期末试卷
- 2025技术咨询标准合同书
- 2025年石家庄道路货物运输驾驶员考试
- 2025年福州从业资格证模拟考试题货运考题
- 安全自护我能行
- 带教老师评价模板
- 中国古代文学史_袁行霈_隋唐五代文学
- 教师专业成长(课堂PPT)
- 五位一体协同机制建设知识
- 特种设备法律法规以及标准培训课件
- 绘本PPT:可怕的大妖怪
- 【打印版】2021年上海市浦东新区中考一模数学试卷及解析
- EN1779-欧洲无损检测标准
- 【数据结构】A类停车场管理系统
- 生态保护红线划定.ppt
评论
0/150
提交评论