欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > DOCX文档下载  

    算符优先语法分析设计原理与实现技术实验报告.docx

    • 资源ID:9403300       资源大小:20.09KB        全文页数:18页
    • 资源格式: DOCX        下载积分:4
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要4
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    算符优先语法分析设计原理与实现技术实验报告.docx

    算符优先语法分析设计原理与实现技术实验报告算符优先语法分析设计原理与实现技术实验报告 算符优先语法分析设计原理与实现技术实验报告 PAGEPAGE 1算符优先语法分析设计原理与实现技术实验报告变更说明日期版本变更位置变更说明作者xxxx/5/81.0初稿生成*实验目的:本实验的目的在于在教师的引导下以问题回朔与思维启发的方式,使学生在不断的探究过程中掌握编译程序设计和构造的基本原理和实现技术,启迪学生的抽象思维、激发学生的学_兴趣、培养学生的探究精神和专业素养,从而提高学生发现问题、分析问题和解决问题的能力。实验内容:实验项目实现算符优先分析算法,完成以下描述算术表达式的算符优先文法的算符优先分析过程。GE:EE+TE-TTTT*FT/FFF(E)i实验说明终结符号i 为用户定义的简单变量,即标识符的定义。设计要求(1)输入串应是词法分析的输出二元式序列,即某算术表达式“实验项目一”的输出结果。输出为输入串是否为该文法定义的算术表达式的判断结果;(2)算符优先分析过程应能发现输入串出错;(3)设计两个测试用例(尽可能完备,正确和出错),并给出测试结果。实验环境:操作系统:Windows 7软件:VC+6.0程序功能描述:提供了文件输入方式,且输入的内容为二元式序列;能够对输入的字符串做出正确的算符优先分析判断,并给出判断结果,判断结果输出到文件,并显示在屏幕;能发现输入串中的错误,包含非法字符,输入不匹配等;能够处理一些可预见性的错误,如文件不存在,输入非法等。五、数据结构设计:六、程序结构描述:设计方法:本程序采用从文件读取的输入方式,输入的内容需为二元式序列,然后按照算符优先分析的方法对输入的字符串进行分析判断,分析完成后输出判断结果到文件,并在屏幕显示。程序通过对输入串的检查能够发现输入串中的错误。程序规定的单词符号及其种别码见下表:单词符号及其种别码表单词符号种别码单词符号种别码(1*5)2/6+3i7-4#8算符优先矩阵+-*/()i#+-*/(=)i # = 算符优先分析法简介基本思路是根据既定的规则构建算符优先矩阵,然后根据算符之间的优先关系寻找输入串中的最左素短语,若找到,则寻找与最左素短语匹配的产生式进行规约;否则进行移进操作,及输入的算符进分析栈。循环直至输入串的末尾,若分析栈开始的#与输入串末尾的#相匹配则接受,其他情况均失败。主要函数说明:error():void型,输出错误,表示不是该文法的句子;getIndexVt(char ch):int型,获取并返回终结符号ch的序号;init():void型,初始化函数,读文件到输入串;IsEqualTo(char ch1,char ch2):bool型,若终结符号ch1和ch2的优先级别相同则返回true,否则返回false;IsHigherThan(char ch1,char ch2):bool型,若终结符号ch1的优先级别高于ch2,则返回true,否则返回false;IsLowerThan(char ch1,char ch2):bool型,若终结符号ch1的优先级别低于ch2,则返回true,否则返回false;IsReduce(int begin,int end,int len):bool型,函数功能:寻找与最左素短语匹配的产生式;入口参数:int begin,int end,int len;入口参数意义:最左素短语的开头和结束位置及最左素短语的长度;返回值:若存在相应产生式则返回true,否则返回falseIsVt(char ch):bool型,判断ch是否为终结符号,是则返回true,否则返回false;parser(void):void型,函数功能:寻找最左素短语、控制规约与移进;main():主函数。函数调用关系说明:函数main()调用init()、parser(void);函数parser(void)调用error()、IsEqualTo(char ch1,char ch2)、IsHigherThan(char ch1,char ch2)、IsLowerThan(char ch1,char ch2)、IsReduce(int begin,int end,int len)、IsVt(char ch);函数IsEqualTo(char ch1,char ch2)、IsHigherThan(char ch1,char ch2)、IsLowerThan(char ch1,char ch2)均调用getIndexVt(char ch)。执行框图:实验过程结果截图:测试用例一:i+i*i#测试用例二:i+i*i/#实验总结:实验心得:通过本次实验我锻炼了自己的上机操作能力及编程能力,并对理论知识有了进一步的了解。老师提供的算符优先分析法的流程图给了我很大的帮助,使得本实验基本思路变得很清晰,用较为简单的算法就能实现,程序的难点是算符优先矩阵的构造及寻找与最左素短语相匹配的产生式进行规约,解决实验中遇到的问题也花费了一部分时间,我增长了处理错误的能力。实验中遇到的问题及解决方法:问题主要有在寻找与最左素短语相匹配的产生式时没有思路,经过对文法的分析,发现只有长度为1或3的产生式,基于这一点,再根据各产生式及最左素短语的特点,利用终结符号的匹配进行寻找;当输入内容不匹配或输入内容非法时要退出程序,此时若不关闭已经打开的文件可能导致文件内容受到破坏;解决方法是将文件指针变量设置为全局变量,error()函数在退出程序之前先将未关闭的文件关闭。程序的自我评价:此程序实现了要求中的所有功能,并增加了输入串错误检测的功能,但因编程能力及经验的有限,其中有的地方不免有些繁杂,还有一些潜藏的问题,需要进一步测试与修改来提高程序的健壮性。程序清单:/*课题名称:算符优先语法分析设计原理与实现技术作者:房皓 进修生最后修改时间:xxxx.5.7*/*单词符号及其分类编码*单词符号种别码(1)2+3-4*5/6i7#8*文法*GE:EE+TE-TTTT*FT/FFF(E)i*算符优先矩阵*+-*/()i#+-*/(=)i#=*/#includeiostreamusing namespace std;#define MAXINPUT 300#define MAXSTACK 100#define NewVn Nchar stackMAXSTACK,aMAXINPUT;FILE *fpin,*fpout;int array88=/优先矩阵,1=,-1=,0= 1, 1,-1,-1,-1, 1,-1, 1, 1, 1,-1,-1,-1, 1,-1, 1, 1, 1, 1, 1,-1, 1,-1, 1, 1, 1, 1, 1,-1, 1,-1, 1,-1,-1,-1,-1,-1, 0,-1, 1, 1, 1, 1, 1, ,1, ,1, 1, 1, 1, 1, ,1, ,1,-1,-1,-1,-1,-1,-1,-1, 0;void init()char a1MAXINPUT;int i=0,j=0;if(fpin=fopen(input.txt,r)=NULL)cout文件打开失败!endl;exit(0);if(fpout=fopen(result.txt,w)=NULL)fclose(fpin);cout文件打开失败!endl;exit(0);a1i+=fgetc(fpin);while(!feof(fpin)a1i+=fgetc(fpin);if(i%5)=0)aj+=a1i-2;fclose(fpin);cout读入字符串为:;coutaendl;void error()coutFAIL!endl;fprintf(fpout,%s,FAIL!);fclose(fpout);exit(0);int getIndexVt(char ch)/获取终结符号ch的序号char vt8=+,-,*,/,(,),i,#;int i;for(i=0;i8;i+)if(ch=vti)break;return i;bool IsHigherThan(char ch1,char ch2)int c1,c2;c1=getIndexVt(ch1);c2=getIndexVt(ch2);if(arrayc1c2=1)return true;return false;bool IsLowerThan(char ch1,char ch2)int c1,c2;c1=getIndexVt(ch1);c2=getIndexVt(ch2);if(arrayc1c2=-1)return true;return false;bool IsEqualTo(char ch1,char ch2)int c1,c2;c1=getIndexVt(ch1);c2=getIndexVt(ch2);if(arrayc1c2=0)return true;return false;bool IsVt(char ch)char vt8=+,-,*,/,(,),i,#;int i;for(i=0;i8;i+)if(ch=vti)return true;return false;/*函数名:IsReduce(int begin,int end,int len)函数类型:bool函数功能:寻找与最左素短语匹配的产生式入口参数:int begin,int end,int len入口参数意义:最左素短语的开头和结束位置及最左素短语的长度返回值:若存在相应产生式则返回true,否则返回false*/bool IsReduce(int begin,int end,int len)if(len=1)if(stackbegin=i)return true;if(len=3)if(stackbegin=( stackend=) !(IsVt(stackbegin+1)return true;elseif(!(IsVt(stackbegin)if(!(IsVt(stackend)if(stackbegin+1=+ | stackbegin+1=- | stackbegin+1=* | stackbegin+1=/)return true;return false;/*函数名:parser(void)函数类型:void函数功能:寻找最左素短语、控制规约与移进入口参数:无返回值:无*/void parser(void)int i,k;char r;i=0;k=0;stack0=#;doint j;r=ai+;if(IsVt(stackk)j=k;elsej=k-1;while(IsHigherThan(stackj,r)char q;doq=stackj;if(IsVt(stackj-1)j-;elsej-=2;while(!IsLowerThan(stackj,q);if(IsReduce(j+1,k,k-j)k=j+1;/规约stackk=NewVn;elseerror();if(IsLowerThan(stackj,r) | IsEqualTo(stackj,r)stack+k=r;/移进elseerror();while(r != #);coutSUCCESS!endl;fprintf(fpout,%s,SUCCESS!);fclose(fpout);int main()init();parser();return 1; 下载文档 收藏 分享 赏 0

    注意事项

    本文(算符优先语法分析设计原理与实现技术实验报告.docx)为本站会员(rrsccc)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    经营许可证编号:宁ICP备18001539号-1

    三一文库
    收起
    展开