课程编译原理第5章自顶向下语法分析方法.pptVIP

课程编译原理第5章自顶向下语法分析方法.ppt

  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文档。上传文档
查看更多
课程编译原理第5章自顶向下语法分析方法

总结: 当有两个产生式 A→xi A→xj 并且有 Select(xi)∩ Select(xj)≠Ф 必然会产生回溯问题或会造成无限循环。 5.5.1 递归下降法 例:G(E): E→eBaA A→a|bAcB B→dEd|aC C→e|dc 该文法不含左递归和回溯。 编写自顶向下分析程序,其情况如下: 5.5 确定的自顶向下分析方法 P(E) 入口 Ch=e? ? error = read P(B) Ch=a? ? error = P(A) 出口 E→eBaA P(A) 入口 Ch=a? = read ? Ch=b? ? error = read P(A) Ch=c? ? error = read P(B) 出口 A→a|bAcB 5.5.2 预测分析方法(LL(1)方法) 引入LL(1)文法: 使用递归子程序方法有限制,即对任一非终极符B进行如下操作: 不含左递归 (否则,会出现重复调用) select(B,βi)∩select(B,βj)=Ф (i≠j) (否则,不知选哪个分支) 定义3.12 LL(1)文法:如果对任一非终极符B都有 select(B,βi)∩select(B,βj)=Ф,(i≠j)。 LL(1)的含义: 第1个L表明自顶向下分析是从左到右扫描字符串,第2个L表明分析过程中将用最左推导,1表明只需向右看一个符号便可决定如何推导即选择那个产生式进行推导。 有四种动作: 替换:当X1∈VN时,选相应侯选式β去替换X1。 匹配:当X1∈VT时,与Y1匹配,如成功则去掉X1和Y1,否则报错。 接受:当格局为(空,空)时,分析成功。 报错:不为(空,空)时。 例:设有文法:G[A]:A→aBc B→d|bB 判别符号串abbdc是否文法的句子。 格局的变化过程如下: 首先初始化:(A, abbdc) 因为A→aBc,所以A == aBc 算法中用aBc的逆串cBa替换A 格局的变化过程如下: ( A, abbdc )==( cBa, abbdc ) 格局的变化过程如下: (A, abbdc)==(cBa, abbdc) ==(cB, bbdc) ==(cBb, bbdc) ==(cB, bdc) ==(cBb, bdc) ==(cB, dc) ==(cd, dc) ==(c, c) 格局的控制过程由以下条件确定: 栈顶元素(符号栈或分析栈或语法栈) 输入流第一个符号(终极符,#) 格局的控制过程由LL矩阵来表示: LL[Xi,Yj]=ACTij 其中:Xi∈(VN∪VT∪{#} Yj∈(VT∪{#}) ACTij表示动作序列 预测分析方法是自顶向下分析的另一种方法,一个预测分析器是由三部分组成: 预测分析程序 先进后出栈 预测分析表 被分析的串ω写成ω#,并首先往分析栈中放进符号#,为了描述ACTij,引入下面三个过程: NEXT:删除输入流的第一个字符 PROCESS:不删除输入流的第一个字符 REPL(β):用β的逆串代替栈顶元素 ~ LL矩阵的构造算法: ? 对每一B→ω,求select(B→ω) ?Ⅰ.对每一个a∈VT,a不现于侯选式的首位,令LL[a,a]=(REPL(ε),NEXT) ?Ⅱ.对每一个B∈VN a.若有B∈aω(a∈VT),则令 LL[B,a]=(REPL(ω),NEXT) b.若有B→Aω(A∈VN),则令 LL[B,ai]=(REPL(Aω),PROCESS) ~ ~ 其中select(B→Aω)={a1,a2,…an} ? Ⅲ.对#令:LL[#,#]=ok ? Ⅳ.对其他情形令:LL[X,a]=ERR(k) 处理P,N, R操作: ① 当遇到小写字母时进行N操作,删除小写字母。 ② 当遇到大写字母时进行P操作,保留源大写字母。 ③ 将符号串进行逆序转换。 例子:G(E): E→E+E E→E*E E→(E)|i 1.构造

文档评论(0)

wumanduo11 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档