编译原理第四章语法分析自上而下分析课件.pptxVIP

编译原理第四章语法分析自上而下分析课件.pptx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
语法分析器的功能 自上而下分析面临的问题 LL(1)分析法 递归下降分析程序构造 预测分析程序 LL(1)分析中的错误处理 第四章 语法分析- 自上而下分析 4.1 4.2 4.3 4.4 4.5 4.6 • 功能定义: – 按照文法产生式,识别输入符号串是否为一个句子。 • 技术路线: – 是否能从文法的开始符号出发推导出这个输入串。 或者,建立一颗与输入串相匹配的语法分析树。 • 策略: – 自上而下分析法,自下而上分析法。 4.1 语法分析器的功能 图4.1语法分析器在编译程序中的地位 ä接收词法分析器输出的记号串,检查是否合乎语法。 ä报告语法错误,并恢复语法错误,从而可以继续分析。 ä输出是分析树的某种形式。 ä分析时其它任务:将各种记号的信息收入符号表、类型检 查和其它语义检查、中间代码的生成,这些放在“前端的其 它部分”完成。 (4)调整输入串指示器IP与叶结点进行匹配。 (5)如果为非终结符,用A的下一个产生式构建子树。 (6)如果匹配成功则结束;否则,回溯到步骤(4)。 x A y * x A * * x A y S S S y • 自上而下分析法的缺点: –是文法的左递归性问题。一个文法是含有左递归 的自上而下的分析过程陷入无限循环。如P介P 。 – 由于有回溯,就会产生一大堆麻烦事情。 –在上述的自上而下分析过程中,当一个非终结符 用某一候选匹配成功时,这种成功可能仅是暂时 的。这种虚假现象,我们需要更复杂的回溯技术。 一般说,要消除虚假匹配是很困难的。 – 当最终报告分析不成功时,我们不知道输入串中 出错的确切位置。 4.3.1 左递归的消除 4.3.2 消除回溯、提左因子 4.3.3 LL(1)分析条件 4.3 LL(1)分析法 • 一个反例: – 文法: S个Qc|c ;Q个Rb|b;R个Sa|a虽然不是直接 左递归,但S 、Q 、R都是左递归。 • 消除左递归算法: – 算法的思想是: • 首先构造直接左递归; • 再利用一般转换规则,消除直接左递归 • 化简文法。 • 下面算法在不含P介P ,也不含“在右部产生式时可以消除 左递归。 • 消除一个文法的左递归算法: (1) 把文法 G 的所有非终结符按任一种顺利排列成 P1 …Pn ;按此顺序执行; (2) FOR i:=1 TO n DO BEGIN FOR j:=1 TO i- 1 DO 把形如Pj+1 →Pj 的规则改写成 Pj+1 6 1 |6 1 | …6k | 。 其中Pj 6 1 |6 1 | …6k 是关于Pj 的 所有规则; 消除关于Pi规则的直接左递归性。 END 化简由(2)所得的文法。即去除那些从开始符号出发永 远无法到达的非终结符的产生规则。 • 例子4.3: – 对4.3文法,它的非终结符排序为R,Q,S。把R代入 Q ,Q代入S得到: S Sabc|abc|bc|c – 消除左递归后得到: S abcS’ |bcS’ |cS’ S’ abcS’ | Q Sab|ab|b(化简消去) R Sa|a (化简后消去) – 对不同的排列,会有不同形式的无左递归文法, 但它们等价。 • 提取公共左因子算法: A 6 1 |6 2 | … |6 n | 1 | 2 | … | m(其中每个 不以6开头) 那么可以把这些规则改写成: A 6A’| 1 | 2 | … | m A’ 1 | 2 | … | n • 例4.4 • 上述算法的不足: – 当非终结符A面临输入符号a,且a不属于A的任意候 选首符集,但A的某个候选首符集包c含时,就一定 可以使A自动匹配。这是一种错误。 • 定义FOLLOW(A) 集合: – 假定S是文法G的开始符号,对于G的任何非终结符 A,我们定义 FOLLOW(A)={a|S⇒* …Aa…,a=VT } 若S⇒* …A,则规定# =FOLLOW(A)。 • LL(1)文法的充分必要条件: – 文法不含左递归。 –

文档评论(0)

132****2812 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档