- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
ch6-new自底向上优先分析方法
第四章 语法分析——自上而下分析 【例】文法G[S]对输入串 abbcde# 进行语法分析,检查该符号串是否是该文法的正确句子。 再无右部以E开始的产生式,所以弹出后变成(5) (5)(P,() (4)(F,) (3)(T,*) (2)(E,+) (1)(E’,#) 由产生式F-P,T-F,E-T (5)栈顶改变成(F,(),(T,(),(E,() 再无右部以E开始的产生式,所以弹出后变成(4) (4)(F, ↑) (3)(T,*) (2)(E,+) (1)(E’,#) 由产生式T-F,E-T (5)栈顶改变成(T, ↑),(E, ↑) 得出相应数组值为1,即FIRSTVT(A) 【例】已知优先关系分析表,构造函数f和g 【例】设有文法G[S]: S→a|b|(T) T→T,S|S 优先关系分析表对应的bell有向图 串 (a,(a,a)) 的分析过程 算符优先分析中的出错处理 文法的优先关系表对应的优先函数不唯一 对优先函数每个元素的值都增加一个常数,仍为原优先关系表的优先函数。不会影响终结符之间的关系。 0 5 5 3 1 g 4 0 4 4 2 f ) ( id * + =? ? ? ? ? # ? ? ? ? ) =? ? ? ? ? ( ? ? ? ? id ? ? ? ? ? ? * ? ? ? ? ? ? + # ) ( id * + 2 7 7 5 3 g 6 2 6 6 4 f ) ( id * + +2 也有一些优先关系表不存在对应的优先函数 =? ? b ? =? a b a 若假定它存在优先函数 f 和 g, 则应有 f(a)=g(a) f(a)g(b) f(b)g(a) f(b)=g(b) 从而 f(a)g(b)=f(b)g(a)=f(a) f(a)f(a) 矛盾 因而不存在对应的优先函数。 第一步,置初值 0 0 g 0 0 f b a 第二步,迭代1次 第三步,迭代2次 =? ? b ? =? a b a 1 0 g 1 1 f b a 2 1 g 2 2 f b a 3 2 g 3 3 f b a … 第四步,迭代3次 N N-1 g N N f b a 第N+1步,迭代N次 永远不能收敛 对于每个终结符 a(包括#)令其对应两个符号 fa 和ga,画一张以所有符号 fa 和 ga 为节点的方向图:如果 a ? b 或 a =? b,则从 fa画一箭弧至 gb;如果 a ? b 或 a =? b,则从 gb画一箭弧至 fa; 对每个节点赋一个值,该数等于从该节点出发所能达到节点(包括出发节点自身在内)的个数。 检查所构造出来的函数 f 和 g 与原优先关系表是否矛盾。若无矛盾,则所求即为优先函数,反之,则不存在优先函数。 2.构造优先函数的方法方法二、Bell 有向图法 输入关系表输出优先函数 2 7 7 5 3 g 6 2 6 6 4 f ) ( id * + 使用优先函数表对符号串的分析过程类似于优先关 系表的过程,另外对“#”符号有如下规定: f(#)g(x) f(x)g(#) 其中x?(VN?VT). (1)计算每个非终结符的 FIRSTVT 和 LASTVT。 (2)构造算符优先关系分析表。 (3)文法G[S] 是算符优先文法吗?如果是,给出优先函数,并给出串 (a,(a,a)) 的算符优先分析过程。 (1)FIRSTVT(S)={a,b,?}, LASTVT(S)={a,b,?} (2)FIRSTVT(T)={,,a,b,?}, LASTVT(T)={,,a,b,?} = # , ) = ( b a # , ) ( b a 算符优先关系分析表 文法G[S]是算符优先文法。 6.3.3 算符优先关系表的构造 对任意的文法非终结符 A,给出集合FIRSTVT(A)和LASTVT(A)的定义: FIRSTVT(A)={a︱A?a… 或 A?Ba…,a∈VT 而B∈VN} LASTVT(A)={a∣A?…a 或 A?…aB,a∈VT 而B∈VN} + + + + 若产生式右部是 …aA…,且?b∈FIRSTVT(A),则必有优先关系: a · b 若产生式右部是 …Ab…, 且?a∈LASTVT(A),则必有优先关系: a · b 由上述定义,我们有: 构造优先关系表的算法 输入:算符优先文法 G输出:关于文法 G 的优先关系表 方法: 为每一个非终结符 A 构造集合 FIRSTVT(A)和LASTVT(A); 由 FIRSTVT(A)和LASTVT(A)集合出发构造分析表; 对 FIRSTVT(S)中的所有 b, 置 # ?
文档评论(0)