第4章+自顶向下语法分析方法.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第4章自顶向下语法分析方法

2. 消除左递归 直接左递归 A→Aβ A?VN, β ?V* 间接左递归 A→Bβ B→Aα A,B?VN, α,β ?V* 例4.10 G5[S]: S→Sa S→b 考虑对输入串baaaa#的分析 例4.11 G6[A]: A→aB A→Bb B→Ac B→d 考虑对输入串adbcbcbc#的分析 S→bS S→aS|ε B→aBc B→Bbc B→d B→aBcB | dB B→bcB| ε 消除直接左递归 A→Aα1| Aα2|…| Aαm|β1|β2|…|βn 其中: αi 不等于ε , βj不以A开头。 改为: A→ β1A| β2A |…| βnA A→ α1A | α2A |…| αmA |ε 消除间接左递归 将间接左递归变为直接左递归,然后消除直接左递归。 消除文法中一切左递归的算法 1. 以某种顺序将文法非终结符排列A1 ,A2 …An 2. for i:=1 to n do begin for j:=1 to i-1 do 用Aj--?1| ?2 |…|? k关于Aj的全部产生式替代 形如Ai-- Ajr的产生式为: Ai-- ?1r| ?2r|…|?kr; end; 消除Ai的直接左递归; 3.化简由2得到的文法 例 文法G[S]: S→Qc|c Q→Rb|b R→Sa|a R→ Qca|ca|a R→ Rbca|bca|ca|a R→ (bca|ca|a)R R → bcaR|ε 将非终结符排序为S、Q、R 4.5 LL(1)分析的实现 递归下降LL(1)分析程序 表驱动LL(1)分析程序 4.5.2表驱动LL(1)分析程序 一个预测分析器是由三个部分组成 预测分析程序 符号栈 预测分析表 预测分析程序 预测分析表 输入单词流 符号栈 ip top 输出 预测分析表 预测分析表可用一个矩阵M表示。矩阵的元素M[A, a]中的内容为一条关于A的产生式,表明当用非终结符A向下推导且面临输入符a时,所应采取的候选产生式,当元素内容无产生式时,则出错。 一个文法的预测分析表不含有多重入口,当且仅当该文法是LL(1)的。 预测分析表的构造算法 若a?SELECT(A??),则把A??放入M[A, a]中。 把所有无定义的M[A,a]标上出错标记。 例 文法G[E]: E →TE’ E’ →+TE’| ε T →FT’ T’ →*FT’| ε F → i | ( E ) 构造过程: 1.判断文法是否为LL(1)文法 2.构造预测分析表 预测分析程序算法 分析栈 #E #ET #ETF #ETi #ET #E #ET+ #ET #ETF #ETi #ET #ETF* #ETF #ETi #ET #E # 剩余串 i+i*i# i+i*i# i+i*i# i+i*i# +i*i# +i*i# +i*i# i*i# i*i# i*i# *i# *i# i# i# # # # 产生式 E→TE T→FT F → i i 匹配 T → ε E → +TE + 匹配 T →FT F → i i 匹配 T → *FT * 匹配 F → i i 匹配 T → ε E → ε 接受 例 对输入串 i+i*i的分析 4.5.1递归下降LL(1)分析程序(自学) 实现思想 对文法中每个非终结符编写一个递归过程,每个过程的功能是识别由该非终结符推出的串,当某非终结符的产生式有多个候选时能够按LL(1)形式可唯一地确定选择某个候选进行推导。 限制 对文法要求高,必须满足LL(1)文法; 速度慢,占用空间多。 * 自顶向下语法分析方法 第4章 4.1 确定的自顶向下分析思想 确定的自顶向下分析方法,首先要解决从文法的开始符号出发,如何根据当前的输入符号(单词符号)唯一地确定选用哪个产生式替换相应非终结符往下推导,或构造一棵相应的语法树。 例4.1 设文法G1[S]: S ? pA | qB A ? cAd | a B ? dB | b 考虑对输入串w=pccadd的分析。 这个文法有以下两个特点: 每个产生式的右部都由终结符号开始。 如果两个产生式有相同的左部,那么它们的右部由不同的终结符开始。 例4.2 设文法G2[S]: S ? Ap S ? Bq A ? a A ? cA B ? b B ? db 考虑对输入串w= ccap的分析。 这个文法有以下两个特点: 产生式的右部不全是由终结符开始 如果两个产生式有相同的左部,它们的右部是由不同的终结符或非终结符开始。 文法中无空产生式 定义4.1 设G=(VT,VN,P,S)是上下文无关文法 FIRST(?)={a|? a?,a∈VT, ?,?∈V*} 若? ε,则规定ε

文档评论(0)

shuwkb + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档