- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[工学]第5章 自顶向下语法分析方法
* * * * * * * * 第5章 自顶向下语法分析 为了构造递归子程序,有如下的约定和要注意的问题: (5) 如果非终极符A的右部只有一个候选式,则按从左向右的顺序依次构造A的识别过程。 如果遇到终极符,判断是否与输入的符号匹配。若匹配,则读取下一个待匹配符号;如果匹配失败,则意味着有语法错误。 如果遇到非终极符,则直接调用该非终极符对应的子程序。 (6)如果非终极符A的右部有多个候选式,则根据每个候选式的第一个符号确定识别非终极符A的流程控制转向。 * 例:文法Z→(U)| aUb ,U → dZ|e,为其构造递归下降分析子程序。并对输入串aeb进行语法分析 。 第5章 自顶向下语法分析 解: 文法中有两个非终结符号Z和U,需要分别编两个函数来完成Z和U规则的识别。 对于规则Z→(U)|aUb,右部有两个候选式,因此,U的识别过程有两个分支,分别根据符号( 和 a 来判别。 同理对规则U→dZ|e 设计的过程也分为两个分支。见图(a)和(b)所示。 * Z →(U)|aUb 图(a) 非终结符号Z的分析程序 过程Z sym= getsym() U 出口 语法错误: 输入串少‘)’ sym =‘a’ Y N N N N Y Y 语法错误: 输入串少‘(’、‘a’ 语法错误: 输入串少‘b’ sym =‘(’ sym =‘)’ sym =‘b’ sym= getsym() sym= getsym() U Y 对输入串aeb进行语法分析 * U → dZ|e 过程U sym= getsym() Z 出口 sym =‘e’ Y N N Y 语法错误: 输入串少‘d’、‘e’ sym= getsym() Y 图(b) 非终结符号U的分析程序 sym =‘d’ 对输入串aeb进行语法分析 * U → dZ|e 每个非终结符对应的函数设计好后,就可以对输入串进行语法分析。 假设输入串为aeb, 从Z函数开始识别,由于sym不等于(,等于a,所以选择Z函数的右边分支,表示选择了Z→aUb规则。读下一个符号,使sym=e; 调U函数,因sym=e,表示使用U→e 规则, 读下一个符号,使sym=b,并返回调用程序Z函数右边分支U的下方,接着判断sym=b,读下一个符号,并退出Z. 在主函数中判断:若sym=#,则分析过程结束,从而判定输入串aeb语法分析成功。 这个过程相当于构造了如下推导过程:Z=aUb=aeb Z →(U)|aUb 对输入串aeb#进行语法分析 * 例:为下列文法的每个非终极符构造相应的递归函数 文法G[Z]: Z?(U) | aUb U?dZ | e 解: main( ) { sym=getsym( ); //读取当前输入串的第一个符号 Z(); //从文法开始符号对应的子程序开始识别 if (sym==’#’) OK; //”#”是程序结束的标志 else error (“error in main”); } 对输入串aeb#进行语法分析 * Z() // Z?(U) | aUb { if(sym==?(? ) { sym=getsym(); U(); if (sym ? ?)? ) {error ( “缺 )” ) ; exit(0);} else sym=getsym( ); } else if(sym==’a’) { sym=getsym( ); U(); if (sym ?‘b’ ) {error ( “缺b” ) ; exit(0);} else sym=getsym(); } else {error ( “缺 ( 或 a” ) ; exit(0);} } 对输入串aeb#进行语法分析 * U() // U?dZ | e { if(sym==?d?) { sym=getsym(); Z(); } else if(sym==’e’) sym=getsym( ); else {error ( “缺 d 或 e” ) ; exit(0);} } ? 对输入串aeb#进行语法分析 * 例: 为下列文法的每个非终极符构造相应的递归函数. 文法G[E]: E?TE? E??+TE?|? T?FT? T??*FT?|? F ? i |(E
您可能关注的文档
最近下载
- (PPT)考勤管理制度.ppt VIP
- 安顺西秀富民村镇银行招聘考试真题及答案2022.pdf VIP
- 2021年青岛市临床营养质控中心年终考核暨下半年工作检查.docx VIP
- 2025年压力容器考试题库3带答案.doc VIP
- 2024贵州安顺普定富民村镇银行招聘笔试备考题库及答案解析.docx VIP
- 昆明元朔建设有限公司高速收费岗位笔试题.docx VIP
- 2021年安徽高考政治试卷.pdf VIP
- 九年级化学演示实验通知单(全册)资料.doc VIP
- 提高基建档案规范化管理——[ 获奖QC 成果发布 ].pdf VIP
- 2025贵州望谟富民村镇银行股份有限公司招聘考试参考题库附答案解析.docx VIP
文档评论(0)