编译原理第4章 语法分析(自下而上分析).ppt

  1. 1、本文档共124页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第四章 语法分析;§4.6 语法分析——自下而上分析;二、移进—归约法;例:设文法G[S]: S→aAcBe A→b | Ab B→d 问abbcde是不是该文法的句子? 步骤 符号栈 输入流 动作 0 # abbcde# 1 #a bbcde# 移进 2 #ab bcde# 移进 3 #aA bcde# 归约,用A→b 4 #aAb cde# 移进 5 #aA cde# 归约,用A→Ab 6 #aAc de# 移进 7 #aAcd e# 移进 8 #aAcB e# 归约,用B→d 9 #aAcBe # 移进 10 #S # 归约,用S →aAcBe 11 #S # 成功;三、关键问题;优先分析法有两种: ①简单优先分析法(规范归约)——求出文法所有符号之间的优先关系,以此确定归约过程中的句柄。 ②算符优先分析法(不规范归约)——求出文法所有终结符之间的优先关系,以此确定归约过程中的可归约串。;4.7.1、简单优先分析法概述;优先关系的定义;优先关系确定;相邻文法符号之间的优先关系 在句型中,句柄内各相邻符号之间具有相同的优先级。相同优先级用“ ”。 由于句柄要先归约,所以规定句柄两端符号的优先级要比位于句柄之外的相邻符号的优先级高。优先级低于表示为“ ”,优先级高于表示为:“ ”。 某句型中:N1…Ni-1 Ni …… Nj N j+1…Nn. ;优先关系的例子;优先关系矩阵;# b ( ( a a ) a ) b #;识别过程(例子续);若有文法G[S] :S ?bAb A ?(B | a B ? Aa) 根据= 关系的定义,由文法产生式可求得各个文法符号之间的优先关系。 1.求=关系:由S ?bAb A ?(B | a B ? Aa)可知:b=A, A=b, (=B, A=a, a=)。// A ?…XY…,X=Y 2.求关系: 由S ?bAb ,且A ?+ (B ,A ?+ a 可知:b (, ba。 由A ? (B 且B ?+ (B … , B ?+ a … , B ?+ A … ,可知:((,(a, (A // A ?…XB… B?+Y XY 3.求关系: 由S ?bAb ,且A ?+ … ) ,A ?+ … B, A ?+a , 可知: )b,ab,Bb ; 由B ? Aa)且A ?+ … ) ,A ?+a ,A ?+ … B ,可知: )a,aa,Ba ; //A ?…BD… B?+…X D?*Y… XY;简单优先文法;§4.7.2 算符优先分析法;2 两个相邻终结符 a , b 之间的优先关系: a b a的优先级??于b a = b a的优先级等于b a b a的优先级高于b ;注意:优先关系与符号出现的左右顺序有关 数学中: a b 可以 b a 但是 a b 不能 b a 例如:E→E+E | E*E | (E) | i ( + 但是 + ( 3 逻辑结构图:;二、算符优先文法和优先表的构造 1 算符优先文法(OPG文法);三种关系的语法树: a=b 其中δ为ε或为B,这样a, b在同一句柄中同时归约所以优先级相同。 a b 其中δ为ε或为C。a,b不在同一句柄中,b先归约,所以a的优先级低于b。 ab 其中δ为ε或为C,a、b不在同一句柄中,a先归约,所以a的优先性大于b。;(3)OPG文法:设有一个OG文法,如果在任意两个终结符号之间,在 、 和 = 中最多只有一种优先关系成立,则该OG文法称为OPG文法。 例如:表达式文法:E→E+E | E*E | (E) | i E→…+E 且 E=E*… 有 + * 又 E→E*… 且 E=…+E 有 + * ∴它是OG文法,但它不是OPG文法。 改写: E→E+T | T T→T*F | F F→(E) | i 是 OPG文法;2 优先关系表的构造方法;(2)构造优先关系表的算法: 输入:算符文法G 输出:关于G的优先关系表 方法: ①为每一个非终结符P计算FirstVT(P)和LastVT(P) ②执行算法: for 每个产生式P→x1x2…xn do for i=1 to n-1 do begin if xi和xi-1都为终结符 then 置 xi=xi-1; if i≤n-2 且xi和xi+2都为VT ,但xi+1为VN then 置 xi=xi+2; if xi为VT 而xi+1为VN then

文档评论(0)

精华文档888 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档