- 1、本文档共32页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[电脑基础知识]编译原理 - 陈火旺版 - 第四章
* 4.6 LL(1)分析中的错误处理 同步符号集的选择 把FOLLOW(A)中的所有符号作为A的同步符号。跳过输入串中的一些符号直至遇到这些“同步符号”,把A从栈中弹出,可使分析继续 错误处理 若M[A,a]为空,跳过输入符号a 若M[A,a]为同步符号,弹出栈顶的非终结符 栈顶终结符与输入符号不匹配,弹出栈顶的终结符 * 4.6 LL(1)分析中的错误处理 文法G[ E]: (1) E – TE’ (2) E’ – +TE’ (3) E’ – ? (4) T – FT’ (5) T’ – *FT’ (6) T’ – ? (7) F – (E) (8) F – i i + * ( ) # E (1) (1) syn syn E’ (2) (3) (3) T (4) syn (4) syn syn T’ (6) (5) (6) (6) F (8) syn syn (7) syn syn * 小结 语法分析回顾与概述 与词法分析的关系 分类:自上而下,自下而上 自上而下分析方法——LL(1)分析法 LL(1)文法条件 左递归的消除 回朔的消除 FIRST集与FLLOW集的判定 LL(1)预测分析程序 预测分析表的构造 分析算法 错误处理 * * * 编译方法 中国人民大学信息学院 陈文萍 * 第四章 语法分析——自上而下分析 4.1 语法分析器的功能 4.2 自上而下分析面临的问题 4.3 LL(1) 分析法 4.4 递归下降分析程序构造 4.5 预测分析程序 4.6 LL(1) 分析中的错误处理 * 4.1 语法分析器的功能 语法分析器的地位 分类 自上而下分析 自下而上分析 词法分析器 语法分析器 编译程序后续部分 符号表 源程序 单词符号 取下一个单词符号 语法分析树 * 4.2 自上而下分析 定义:也称面向目标的分析方法,从文法的开始符号出发企图推导出与输入的单词串完全相匹配的句子。 主旨:对任何输入串,试图用一切可能的办法,从文法开始符号着手,自上而下地为输入串构造一棵语法树。本质上是一个试探过程,反复使用不同的产生式谋求匹配输入串的过程。 * 自上而下分析的问题(1) 左递归 例:例文法G0[S]: (1) S→Sa (2) S→b 分析baa是不是文法的句子 按照自上而下的分析思想,选用产生式(1)来推导S?Sa, 语法树末端结点最左符号为非终结符,所以选用(1)继续 推导S?Sa?Saa 此时语法树末端结点最左符号为非终结符,选用(1) 继续推导S?Sa?Saa ?Saaa 试图用S匹配输入串时,出现:在没有识别任何输入符号的情况下,又得重新要求S去进行新的匹配,分析过程陷入无限循环 * 自上而下分析的问题(2) 回溯 例:G[S]: S→xAy, A→ab|a 若当前输入串为xay,首先构造的推导S?xAy ? 匹配 ? 进一步推导对A可选择A→ab替换,得S?xAy ?xaby xay xaby ? 匹配 ? xa都已匹配,当前面临输入符为y与b不能匹配,所以将输入串指针退回到a,对A的替换重新选用下一个产生式A→a进行试探, S?xAy ?xay输入串中当前符a得到匹配,指针向前移动到y,与语法树中y匹配,匹配成功。 由于相同左部的产生式的右部开始符号相同而引起回溯。 * 自上而下分析的问题(3) 分析过程中,匹配成功可能是暂时的。 最终分析不成功,很难知道输入串中出错的确切位置。 带回溯,效率低,代价高 * 4.3 LL(1) 分析法 左递归的消除 消除回溯 LL(1) 分析条件 * 直接左递归的消除 左递归:一个文法是含有左递归的,如果存在非终结符P, P =+ Pα 形如:P → Pα|β,其中α不为? ,β不以P打头 消除直接左递归改写为:P →βP’,P’→αP’| ? 一般来说,若P → Pα1|Pα2|…|Pαm|β1|β2|…|βn,αi不为? ,βi不以P打头,消除直接左递归就把规则改写为: P → β1P’|β2P’|…|βnP’ P‘ → α1P’|α2P’|…|αmP’| ? 例:E → E+T|T,T →T*F|F,F →(E)| i 消除直接左递归后变为: E → TE’ E’ → +TE’| ? T → FT’ T’ → *FT’| ? F → (E)|i * 文法左递归的消
文档评论(0)