[理学]第四章-语法分析和语法分析程序.ppt

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

试求下述例子的LR(0)或SLR(1)分析表 S’?S S?CbBA A?Aab | ab B?C | Db C?a D?a SLR(1)的局限性 利用Follow集确定归约可能产生的问题 Follow集不考虑上下文 归约需要考虑上下文(有状态的历史) 所以,可能归约出“死前缀”(非活前缀) 所以,需要明确的考察下一个字符可能或应该是什么 加了“?” ,再加“,a”表示后续可能是什么字符 [A????, a] LR(1)的分析表 先求出First集,在LR(0)的基础上 从S’ ? ?S, #产生 S? ?CbBA, #,再产生 C? ?a, b,为什么从#变成b? S ? Cb?BA, #, B ? ?C, ?1 B ? ?Db, ?2 C ? ?a, ?3 D? ?a, ?4 ?1-?4分别是什么? 由LR(1)的DFA到分析表 根据 “,a”逗号后面的a确定action 该移近,还是归约 Goto内容与LR(0)类似 对前部相同的项目, 合并“,a”逗号后面的内容,得到LALR(1) 一个例子 对A?X1X2…Xn,用有历史的状态表示归约到哪! S?A | B A?aAb | c B?aBb | d 若w是文法的句子,则w应可归约为S。 又因为S?A | B,则w应可归约为A或B。 又因为A?aAb | c B?aBb | d,则w应可归约为aAb或c或aBb或d 综合起来,若w是文法的句子,则其应可归约为S、A、B、aAb、c、aBb或d。 因为尚无已归约出的符号,记为?S、?A、?B、?aAb、?c、 ?aBb和?d。(记为起始状态S0) 若w=w1 ? w2 进一步分析,若w=w1?w2且w1?VN?VT 若w1已归约为S,记为S?,状态S1;若w2为#则w是句子,否则不是。 若w1已归约为A,记为A?;状态S2,则应将A归约为S, 若w1已归约为B,记为B?;状态S3,则应将B归约为S, 若w1为a,记为a?Ab或a?Bb;状态S4,则应先分析w2能否归约为Ab或Bb(分析到aAb ?或aBb?时再归约为A或B) 若w1 为c,记为c?;状态S5,则应将c归约为A 若w1为d,记为d?;状态S6,则应将d归约为B 若w2=w21 ? w22 若w1为a,记为a?Ab或a?Bb;状态S4,则应先分析w2能否归约为Ab或Bb(分析到aAb ?或aBb?时再归约为A或B) 若w21已归约为A,记为aA?b;状态S7,则需先分析w22是否为b (分析到aAb ?时再归约为A) 若w221为b,记为aAb?;状态S8,则应将aAb归约为A 若w21已归约为B,记为aB?b;状态S9,则需先分析w22是否为b, (分析到aBb ?时再归约为B) 若w221为b,记为aBb?;状态S10,则应将aBb归约为B 因为A?aAb | c B?aBb | d,所以w21可能为aAb或c或aBb或d 若w211为a,记为a?Ab或a?Bb;则应先分析w212能否归约为Ab或Bb(分析到aAb ?或aBb?时再归约为A或B);状态S4! 若w211为c,记为c?;则应将c归约为A;状态S5! 若w211为d,记为d?;则应将d归约为B;状态S6! LR(0)分析表1/2 为了预防开始符号S出现在产生式右部导致分析复杂化,引入新的开始符号S‘和S’?S, G’称为G的拓广文法。显然L(G’)=L(G), 加入圆点,分隔已识别部分,得到LR(0)项目 S’?S产生S’??S和S’?S?两个项目 …… 对LR(0)项目,对应刚才的分析过程,建立DFA I0={S’??S,S??A, S??B,A??aAb, A??c,B??aBb,B??d}也称为基本项目集{S’??S}的闭包。 闭包如何计算? LR(0)分析表2/2 DFA与活前缀 规范句型不含句柄右部符号的前缀称为活前缀 LR(0)项目的分类 归约项目:?在产生式最右端 移近项目:紧跟在?后的符号为终结符 待约项目:紧跟在?后的符号为非终结符 LR(0)的限制 不允许移近和归约项目并存 不允许多个归约项目并存 回顾LR分析中的“历史”、“现在”与“未来” 总控程序 分析表 分 析 栈 a1 a2 … ai …an# Sm Xm … S1 X1 S0 # top 记住“历史” 展望“未来” 把握“现在” 根据“现在”状态+输入V+分析表 决定 (移进、归约、接受、报错) LR(0)分析表1/3 为了预防开始符号S出现在产生式右部导致分析复杂化,引入新的开始符号S‘和S’?S, G’称为G的拓广文法。显然L(G’)=L(G), 加入圆点,分隔已识别部分,得到LR(0)项目 S’?S产生S’??S和S’?S?两个项目 …… 对LR(0)项目,

文档评论(0)

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

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

1亿VIP精品文档

相关文档