欢迎来到冰豆网! | 帮助中心 分享价值,成长自我!
冰豆网
全部分类
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • 党团工作>
  • ImageVerifierCode 换一换
    首页 冰豆网 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    递归下降分析程序Word格式.docx

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

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

    递归下降分析程序Word格式.docx

    1、当输入一串字符串后,就对该字符串进行分析,首先从开始符号分析,所以首先调用E()函数,在E()函数中会调用T()和G(),就是每个非终结符的候选式中出现了哪个非终结符就调用哪个函数。所以,将字符串的第一个字符和E中的每个候选式匹配,如果成功就匹配输入字符串的下一个字符,当最后剩下的字符为#时,匹配成功。其实这个工程就是构造一个语法树。程序总流程图如下:图1 程序总流程图三、关键性代码这个工程的主要工作用五个非终结符生成的句子是否和输入字符串匹配,所以主要的工作是函数E(),G(),T(),S()和F()的编写。1. 对非终结符E处理的函数E()这个函数主要是根据文法中的E-TG,在E()中调用

    2、了T()和G()来进行递归分析,这个就是构造生成树的一个分支。int E() int f,t;/变量 printf(E-TGt);/输出根据的文法 flag=1; outDeduce ();/输出字符串 outputRemain ();/输出剩余字符 f=T(); if (f=0) return(0); /表示当前分析字符可由非终结符T推导出 t=G(); if (t=0) return(0); /表示当前分析字符可由非终结符G推导出 else return(1);2. 对非终结符G处理的函数G()这个函数主要是根据文法中G-+TG|-TG|,在函数中调用了T()和G()函数。将当前字符和候选

    3、式的第一个字符进行匹配,如果匹配成功,就调用该候选式中涉及到得第一个非终结符对应的函数,一次递归嵌套调用。如果不是由第一个候选式推出然后依次匹配剩下的候选式。int G() int f; if(ch=+) /当前字符式+ bi1=ch;G-+TGt/说明用的是第一个候选式e0=G;e1=e2=e3=e4=Te5=e6=# Compute ();/计算推导式 flag=0;outDeduce (); ch=a+i1;/读取当前字符的下一个字符 t=G(); /表示当前分析字符可由非终结符G推导出 if(ch=-) /当前字符是-/说明用的是第二个候选式 Compute();/输出推导式 G();

    4、/判断当前分析字符是否是非终结符G的一个产生式 return(1); t e0=/推导式计算 return(1);3.对非终结符T处理的函数T()函数主要是根据文法中的T-FS,在函数中调用F()和S(),进行递归分析,也是构造语法树的一个分支。int T() int f,t;T-FSt/说明所用的推导式是T-FS outDeduce (); outputRemain (); f=F();/表示当前分析字符可由非终结符F推导出 t=S();/表示当前分析字符可由非终结符S推导出 if (t=0) return(0); else return(1);4. 对非终结符S处理的函数S()函数的主要是

    5、文法要求S-*FS|/FS|,在函数中调用F()和S()函数。其实这个过程和对非终结符G的处理很类似,将当然字符与该非终结符的每个候选式的第一个字符进行匹配。比如当然字符为*,说明使用第一个候选式,然后调用F()和S()函数进行递归分析。如果当前字符为/,就使用第二个候选式,然后也调用F()和S()函数进行递归分析。如果当前字符是在和G中的任何一个候选式的第一个字符都不匹配,就返回1,说明当然字符不能由非终结符G推出。int S() int f,t;*) /当前字符是*printf(S-*FSt/说明使用的是第一个候选式 Compute (); flag=0; ch=a+i1;/取出当前字符的

    6、下一个字符 f=F(); if (f=0) return(0); /如果当然分析字符可由非终结符F推出 t=S(); /如果当然分析字符可由非终结符S推出 else return(1);if(ch=/) /当前字符是/ bi1=ch;/说明使用的是第二个候选式 /取出当前字符的下一个字符/如果当然分析字符可由非终结符F推出/如果当然分析字符可由非终结符S推出 printf( e0= flag=1; ai1=ch; output();5.对非终结符F处理的函数F()函数主要是根据文法中给出的F-(E)|i ,在函数中调用E()。这个过程和前面对其他非终结符的处理差不多,都是根据候选式中涉及的非终

    7、结符调用相应的函数。将当前字符和每一个候选式的第一个字符进行匹配,比如如果当然字符是(,就使用第一个候选式,然后调用E()进行递归向下分析。如果当前字符是i,就使用第二个候选式。int F()() /当前字符是(F-(E)tE)/读取下一个字符 f=E(); /如果当然分析字符可由非终结符E推出) /当前字符是) flag=0; input1(); else errorn return(0); else if(ch=i) /当前字符是iit else printf(return(0);四、测试结果这个程序测试时是往命令行中输入一串字符串,来判断该字符串是否是给出文法的一个句型,测试过程窗口中都详细给了出来。这次我测试的字符串是“i+i*i#”。截图如下:如果输入的字符串不是文法的一个句型,窗口中会显示error,说明输入的字符串不正确。这里我测试的字符串是“i+E”,截图如


    注意事项

    本文(递归下降分析程序Word格式.docx)为本站会员主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(点击联系客服),我们立即给予删除!

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




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2022 冰点文档网站版权所有

    经营许可证编号:鄂ICP备2022015515号-1

    收起
    展开