- 1、本文档共80页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
编译原理第五章自顶向下语法分析
* 5.6 递归下降分析技术 前提 LL(1)文法 实现思想: 识别程序由一组函数组成。每个函数对应于一个非终结符号。 每一个函数的功能是:选择正确的右部,扫描完相应的字。在右部中有非终结符号时,调用该非终结符号对应的函数来完成。 * 产生式类型(1)-“或”运算 对于非终结符号U→u1|u2|…|un处理的方法如下: U( ) { //ch=当前符号; if(ch可能是u1字的开头) 处理u1的程序部分; else if(ch可能是u2字的开头) 处理u2的程序部分; … else error( ) } 当有某个右部的开头是非终结符号时,需要用LL(K)方法判断什么时候使用这个右部。 当存在空规则的时候,可以把error( )替换为{return;},这样处理使发现错误的时间比较晚。 return; /*U-?*/ 约定:进入这个过程时,对于U的第一个符号已经被读到当前符号。离开这个程序的时候,下一个符号已经被读到当前符号。 * 产生式类型(2)-“连接”运算 对于非终结符号u1→x1x2…xn的处理方法如下: 处理x1的程序; 处理x2的程序; … … … 处理xn的程序; 如果右部为空,则不处理。 * 说明: 对于右部中的每个符号xi: 如果xi为终结符:判断是否与向前看符号匹配 if(x= =向前看符号) { NextChar( );//前进一个字符 return; } else 出错处理 如果xi为非终结符:直接调用相应的过程xi() 说明:NextChar( )为前进一个字符函数。 * 递归下降技术(实例) 文法G[E]: E-E+T|T T-T*F F-(E)|i 消除左递归后得到: E-TE’ E’-+TE’|? T-FT’ T’-*FT’|? F-(E)|i * 对应于改写后的文法中的每个非终结符,都有一个函数。 对于产生式 E-TE’ 用E1表示E’ E( ) { if(当前符号是T的开始符号) { T(); E1(); } else error(); } 一般,当只有一个右部的时候,可以不作出错处理。 * 对于产生式 E’-+TE’|? 用E1表示E’ E1( ) { if(ch=‘+’) { NextChar( );//前进一个字符 T( ) ; E1( ) ; } else return; } E’-+TE’ E’-? 因为E1对应有空规则,所以其处理中,不做错误处理,而是直接return。实际表示它没有读入任何字符。 * 递归分析程序的主程序 假设识别符号对应的过程为Z( ),那么相应的主程序为 { GetSymbol( );/*首先需要读入一个符号,以 满足约定。*/ Z( ); } * 递归分析程序的运行 栈底 E() T() 输入:i * i + i F() 过程调用栈: T’ E’ a * a E T F T’ + F E’ ? T a F ? 调用 进入 返回 * 递归下降分析程序是一种适合手工编写分析程序的方式 优点: 实现思想简单明了。程序结构和语法规则有直接的对应关系。 因为每个过程表示一个非终结符号的处理,添加语义加工工作比较方便。 需要书写程序的语言支持递归调用。如果递归调用机制是高效的,那么分析程序也是高效的。 缺点: 递归算法的实现效率低 处理能力相对有限 通用性差,难以自动生成 递归子程序法总结 1)编写文法,消除二义性; 2)消除左递归、提取左因子; 3)求FIRST集、FOLLOW集和SELECT集; 4)检查是不是 LL(1) 文法 若不是 LL(1),说明文法的复杂性超过自顶向下方法的分析能力 5)直接根据每个语法变量的产生式设计相应的程序 * 自顶向下分析的问题: 对于某些语言现象,难以用 LL(1) 文法来描述 消除左递归和提取左因子影响文法的可读性,造成语义处理的困难 * 词法分析和语法分析都是对字符串进行识别的,两者有何区别? 1、在词法分析和语法分析都是对字符串进行识别的。但词法分析程序的输入字符串是单词序列,语法分析程序的输入字符串是一个程序,词法分析的终结符表示组成单词的字符,语法分析的终结符表示组成程序的一个单词。 2、识别方法不同,词法分析程序采用的为DFA,语法分析程序采用的为下推自动机。 * [例1]试构造与下列文法G[S]等价的无左递归文法。 G[S]: S?Sa|Nb|c (1) N?Sd|Ne|f (2) 本章典型题型 解:
您可能关注的文档
- 系统各项技术应遵循大数据相关规范要求.docx
- 系统分裂运行时备自投误投隐患分析及对策研究.pdf
- 系统词汇版3.pdf
- 系统联调测试报告(视频会议).doc
- 系统集成项目管理继续教育推荐课程7课后练习.pdf
- 红外对射方案2.doc
- 紧致融合模糊集和故障树的变压器故障诊断_谷凯凯.pdf
- 红外标准辐亮度计的研制及定标_徐骏.pdf
- 红外相机CASCAM光学设计_季春宏.pdf
- 红外薄膜中热应力的研究.pdf
- springbooot+vue基于java的房屋维修系统毕业论文.doc
- 中国消防救援学院《单片机系统实验》2023-2024学年第一学期期末试卷.doc
- 2025年溧阳纺织化学品项目申请.pptx
- 景区门票包销合同模板(3篇).docx
- 【股票技术指标学习指南】第七章第三节货币需要量的测算.doc
- 2025春 _ 人教版七年级英语下册【unit4】看音标写单词.doc
- 2025春 _ 人教版七年级英语下册【unit5】看音标写单词.doc
- 2025春 _ 人教版七年级英语下册【unit6】看音标写单词.doc
- 2025春 _ 人教版七年级英语下册【unit7】看音标写单词.doc
- 2025春 _ 人教版七年级英语下册【unit8】看音标写单词.doc
最近下载
- 《中国利用外资情况》课件.ppt VIP
- 花艺空间装置课件.pptx VIP
- 2024年巴东县选调县外在职在编教师真题.docx VIP
- 2025年广州市中考语文试题卷(含答案及解析).docx
- 农村生态环境保护与可持续发展.pptx VIP
- GB50243-2016通风与空调工程施工质量验收规范附条文.docx VIP
- 合伙公司章程丶教育咨询管理有限公司章程丶劳动合同范本.doc(doc21页).docx VIP
- 三级眼镜验光员理论考试题库(下部分).pdf VIP
- 2025湖北恩施州巴东县选调县外在职在编教师35人笔试备考题库及答案解析.docx VIP
- GBT5836.1-2018 建筑排水用硬聚氯乙烯(PVC-U)管材.pdf VIP
文档评论(0)