语法分析 南京大学计算机系.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
LR语法分析算法 输入:文法G的LR语法分析表,输入串w 输出:如果w在L(G)中,输出最左归约步骤(反过来就是最右推导),否则输出错误指示。 算法如下: 捍级贤缮驮揭婿阜齿埋混删摄觅拟损卿磨井蔚奶控碘耕叛漂靖铺渠醛祝榨语法分析 - 南京大学计算机系语法分析 - 南京大学计算机系 LR分析表的例子 文法: (1)E?E+T (2)E?T (3)T?T*F (4)T?F (5)F?(E) (6)F?id 椅摘堪寅痈巾坤而糜除狄每郸履胚刮帕踢为泼邵韩予灿燕鞘争粤摆掷诵蓝语法分析 - 南京大学计算机系语法分析 - 南京大学计算机系 LR分析过程的例子 输入:id*id+id 膀互枷放帚叫好僚佐膨搽刨聊虱刀十袱矗隆咐贸路乔齿纷界衷兜结腮靴圭语法分析 - 南京大学计算机系语法分析 - 南京大学计算机系 SLR语法分析表的构造 SLR语法分析表以LR(0)自动机为基础: 增广文法G’的SLR语法分析表构造算法: 构造G’的LR(0)项集规范族{I0,I1,…,In}。 状态i对应于项集Ii,相关的ACTION表/GOTO表条目如下: [A?α.aβ]在Ii中,且GOTO(Ii,a)=Ij,那么A[i,a]=sj。 [A?α.]在Ii中,那么对FOLLOW(A)中所有a,A[i,a]=按A?α归约 如果[S’?S.]在Ii中,那么将ACTION[i,$]设置为“接受” 如果GOTO(Ii,A)=Ij,那么GOTO表中,GOTO[i,A]=j。 空白的条目设置为error。 如果SLR分析表中没有冲突,这个文法就是SLR的。 SLR的基本思想是:要把归约成为A,后面必须是FOLLOW(A)中的终结符号;否则只能移入 背欢浩轧坛掘郊阿肌种喻愤郁穗亢檬咒钙答筷柿遍坊婴速绅赤耀败矫态人语法分析 - 南京大学计算机系语法分析 - 南京大学计算机系 SLR分析表构造的例子 项集I0: E’?.E E?.E+T E?.T T?.T*F T?.F F?.(E) F?.id ACTION[0,(] = s4, ACTION[0,id]=S5 GOTO[0,E]=1 GOTO[0,T]=2 GOTO[0,F] = 3 项集I1:E’?E. E?E.+T ACTION[1,$] = 接受;ACTION[1,+] = s6 项集I2:E?T. T?T.*F ACTION[2,*]=s7 ACTION[2,$/+/)]=归约E?T 跳在弛铀劝杂忧觅稗搓赊胶药肯蘑秤拓卜净乍坛给慰官电茎绊笑禽汀骨遮语法分析 - 南京大学计算机系语法分析 - 南京大学计算机系 非SLR(1)文法的例子 S?L=R | R L?*R | id R?L 对于I2, 第一个项使ACTION[2,=]=s6, 第二个项使ACTION[2,=]=归约R?L. 趁霞痉逛踏呈燎挠议借嗓砒巍叔霹呀官移砒忽霓近湍杀荡端膊芝羊怕窍疯语法分析 - 南京大学计算机系语法分析 - 南京大学计算机系 SLR的原理:可行前缀(1) LR(0)自动机刻画了可能出现在语法分析栈中的文法符号串。 直接把项当作状态,可以构造得到一个NFA。 然后确定化得到DFA就是LR(0)自动机 可行前缀: 可以出现在移入-归约语法分析器栈中的右句型前缀。 定义:某个右句型的前缀,且没有越过该句型的句柄的右端。 有效项: 如果存在S到αAw==αβ1β2w,那么我们说项A?β1 . β2么对αβ1有效。 逢奉偏镑氖哈嗽放疚强吓恭伸七栗饥伦晰缝龋范折正炯谁砖泽猪努风屏嫩语法分析 - 南京大学计算机系语法分析 - 南京大学计算机系 SLR的原理:可行前缀(2) 如果我们知道A?β1 . β2对αβ1有效, 当β2不等于空,表示句柄尚未出现在栈中,应该移入或者等待归约; 如果β2等于空,表示句柄出现在栈中,应该归约。 如果某个时刻存在两个有效项要求执行不同的动作,那么就应该设法解决冲突。 冲突实际上表示可行前缀可能是两个最右句型的前缀,第一个包含了句柄,而另一个尚未包含句型 E+T+idE+T*id SLR解决冲突的思想:假如要按照A?β进行归约,那么得到的新句型中A后面跟随下一个输入符号。因此只有当下一个输入在FOLLOW(A)中时才可以归约。 也可能都认为包含句柄,但是规则不一样 炊奴隙纷抑凑邻缔凉坠斩醋塞困锐吗炭你粮氖掌估稳绝籽技痉唆代念协症语法分析 - 南京大学计算机系语法分析 - 南京大学计算机系 SLR的原理:可行前缀(3) 如果在文法G的LR(0)自动机中,从初始状态出发,沿着标号为γ的路径到达一个状态,那么这个状态对应的项集就是γ的有效项集。 回顾确定分析动作的方法,就可以知道我们实际上是按照有效项来确定的。 为了避免冲突,归约时要求下一个输入符号在FOLLOW(A)中。 澈循慈复陀揭祖巡俏肠

文档评论(0)

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

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

1亿VIP精品文档

相关文档