1 / 36

第 6 章 自底向上优先分析法

第 6 章 自底向上优先分析法. 主要内容. 6.1 自底向上优先分析概述 6.3 算符优先分析法. 第 十二 讲. 课题: 自底向上分析方法、算符优先文法 目的要求: 1. 理解自底向上的语法分析方法的基本思想; 2. 掌握算符文法、算符优先文法的定义和性质 教学重点: 1. 优先分析法的基本思想和术语; 2. 算符文法、算符优先文法的定义和性质 教学难点 : 算符优先关系的定义 教学课时: 2 教学方法: 多媒体教学 教学内容和步骤 : (如下). 自底向上分析方法的基本思想. 自底向上分析方法,也称移进归约分析法

oakley
Download Presentation

第 6 章 自底向上优先分析法

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第6章 自底向上优先分析法

  2. 主要内容 6.1 自底向上优先分析概述 6.3 算符优先分析法

  3. 第 十二 讲 课题:自底向上分析方法、算符优先文法 目的要求: 1.理解自底向上的语法分析方法的基本思想; 2.掌握算符文法、算符优先文法的定义和性质 教学重点: 1.优先分析法的基本思想和术语; 2.算符文法、算符优先文法的定义和性质 教学难点 : 算符优先关系的定义 教学课时:2 教学方法:多媒体教学 教学内容和步骤 :(如下)

  4. 自底向上分析方法的基本思想 自底向上分析方法,也称移进归约分析法 实现思想(是推导的逆过程): 对输入符号串自左向右进行扫描,并将输入符逐个移入一个后进先出栈中,边移入边分析,一旦栈顶符号串形成某个句型的句柄时,就用该产生式的左部非终结符代替相应右部的文法符号串,称为归约。重复这一过程,直到归约到栈中只剩下文法的开始符号时,则分析成功。

  5. 例1:文法: SaAcBe A b A Ab B d 输入串abbcde#分析 最右推导: SaAcBe aAcde aAbcde abbcde 规约分析过程如下:

  6. S A A B B a c e A A A b d d b b b b 上述的每一步规约可以构造一颗语法树:

  7. 问题的提出: ①在构造语法树的过程中,何时规约? 当句柄出现在栈顶符号串中就可以规约。 ②如何知道在栈顶符号串中已经形成句柄? 通过自底向上的分析算法来解释(优先关系)

  8. 6.1 自底向上优先分析法概述 优先分析法又可分简单优先分析法和算符优先分析法。 ①简单优先分析法(规范归约)-对文法按一定原则求出所有文法符号间的优先关系; ②算法优先分析法(不规范归约)-规定算符之间的优先关系)

  9. 6.3 算符优先分析法 • 算符优先优先分析法 • 只规定算符(终结符)之间的优先关系。在归约过程中只要找到句柄就归约,不必考虑归约到哪个非终结符,因此不是规范归约。 • 特点:速度快,特别适合于表达式的分析 • 通过算符之间的优先关系来确定句柄

  10. 先看一个例题: 例. 已知文法G[E]: E→E+E E→ E*E E→ i 输入串i+i*i ,归约过程如下

  11. 步骤 符号栈 输入符号串 优先关系 动作 1) # i+i*i# #<i 移进 2) #i +i*i# #<i>+ 规约 3) #E +i*i# #<+ 移进 4) #E+ i*i# +<i 移进 5) #E+i *i# +<i>* 规约 6) #E+E *i# +<* 移进 7) #E+E* i# *<i 移进 8) #E+E*i # *<i># 规约 9) #E+E*E # +<*># 规约 10) #E+E # #<+># 规约 11) #E # 接受

  12. 分析可知:若只从移进—归约的角度来考虑, 在第6步时栈顶已出现了句柄E+E,可以进行 归约了,但是明显是错误的,因为这样就不 符合算术运算规律 。 所以对于表达式,我们可以人为地规定其算 符的优先顺序,即给出优先级别和同一级别 的结合性。

  13. 算符文法定义: • 设有一文法G,如果G中没有形如A→…BC… • 的产生式,其中B和C为非终结符,则称G为 • 算符文法(或称OG文法)。 • 即任何一个产生式中都不包含两个非终结 • 符相邻的情况,就是算符文法。

  14. 性质1:在算符文法中任何句型都不包含两个相邻的非终结符。性质1:在算符文法中任何句型都不包含两个相邻的非终结符。 性质2:如果Ab或(bA)出现在算符文法的句型中,其中AVN, b  VT,则中任何含b的短语必含有A。 (含b的短语必含A,含A的短语不一定含b)

  15. 算符优先关系的定义: • 设G是一个算符文法,a和b是任意两个终结符,A,B,C是非终结符,算符优先关系如下: • (1)a=b当且仅当G中含有形如A→…ab…或A→…aBb…的产生式; • (2) a <b当且仅当G中含有形如A→…aB…的产生式,且Bb…或BCb…; • (3) a > b当且仅当G中含有形如A→…Bb…的产生式,且B…a或B…aC 。 + + + +

  16. 算符优先文法的定义: 设有一不含产生式的算符文法G,如果对任意两个终结符a,b之间至多只有= ,<和>三种关系的一种成立,则称G是一个算符优先文法(也称OPG文法)。 即a b,ab,a b只有一种成立,但允许 a b,b a同时存在。

  17. 例:已知表达式文法G[E]: E→E+E | E*E | (E) | i 证明G[E]不是OPG文法。 证明如下: 因为:E→E+E , EE*E 则有 + < * 又因为:E→E*E, EE+E 则有 + > * 所以不是算符优先文法。 + +

  18. 教学总结 自底向上分析方法,也称移进归约分析法,是推导的逆过程。 算法优先分析法(不规范归约)-规定算符之间的优先关系) 文法符号之间的优先关系有三种:大于、小于和等于。 算符优先文法(也称OPG文法),它是一个算符文法,不含产生式,且对任意两个终结符a,b之间至多只有= ,<和>三种关系的一种成立。

  19. 作 业 教材P122练习: 2(1),3(1)

  20. 第 十三 讲 课题:算符优先关系表和算符优先分析法 目的要求: 1.掌握算符优先关系表的构造方法; 3.掌握算符优先分析法及其局限性 教学重点: 1.符优先关系表的构造 2.算符优先分析法的实现; 教学难点 : 算符优先关系表的构造 教学课时:2 教学方法:多媒体教学 教学内容和步骤 :(如下)

  21. 三、 算符优先关系表 用表格形式来表示各终结符号的优先关系,这种表称为优先关系表。 构造优先关系表的方法:①按照定义来构造 ②按关系图来构造 • 首先引入两个概念: • firstVT集合lastVT集合 • first(B)={b|Bb… 或 BCb…} • lastVT(B)={a|B…a 或 B…aC} + + + +

  22. 三种算符优先关系的计算: • 1) = 关系 • 直接看产生式的右部,若出现了A →…ab…或A →…aBb,则a=b • 2) < 关系 • 求出每个非终结符B的FIRSTVT(B) • 若A→…aB…,则b∈FIRSTVT(B),a<b • 3) > 关系 • 求出每个非终结符B的LASTVT(B) • 若A→…Bb…,则a∈LASTVT(B),a>b

  23. 例:已知文法如下,计算优先关系 E’→#E# E→E+T E→T T→T*F T→F F→P↑F F→P P→(E ) P→i

  24. 解: (1)先求firstVT和lastVT集 first(E’)={#} first(E)={+,*,↑, ( , i } first(T)={*,↑, ( , i } first(F)={↑, ( , i } first(P)={ ( , i } lastVT(E’)={#} lastVT(E)={+,*,↑, ) , i } lastVT(T)={*,↑, ) , i } lastVT(F)={ ) ,↑, i } lastVT(P)={ i , ) }

  25. (2) 求 = 关系 E’→#E# # = # P→(E) ( = ) (3) 求 <关系 E’ → #E# 则 # <first(E) 所以 # <+, # <*, # <↑, # < ( , # <i

  26. E’ →E+T 则 + < first(T) 所以 + < *, + <↑, + < ( , + < i T→T*F 则 * < first(F) 所以 * <↑, * < ( , * < i F→P↑F 则↑< first(F) 所以 ↑<↑, ↑< ( , ↑<i P→(E ) 则(<first(E) 所以 ( < +, ( < *, ( <↑, ( < ( , ( < i

  27. (4) 求 >关系 E’ →#E# 则 lastVT(E) ># 所以 + > #, * > # ,↑># , ) >#, i > # E→E+T 则lastVT(E) >+ 所以 + >+, * > +, ↑>+ , ) >+, i > + T→T*F 则lastVT(T) >* 所以 *>*, ↑> *, i > *, ) > * F→P↑F 则lastVT(P) >↑ 所以 i >↑, ) >↑ P→(E) 则lastVT(E) >) 所以 + >) , *>) , ↑>) , i >) , ) >)

  28. 算符优先关系表

  29. 算符优先分析算法: • 归约过程中,只考虑终结符之间的优先关系来确定句柄,而与非终结符无关。这样去掉了单非终结符的归约,所以用算符优先分析法的规约过程与规范归约是不同的. • 为解决在算符优先分析过程中如何寻找句柄,引进最左素短语的概念

  30. 算符文法的任一句型有如下形式:#N1a1N2a2......NnanNn+1#,若Niai......NjajNj+1为句柄,则有ai-1<ai=ai=...= aj-1 = aj> ai+1 • 对于算符优先文法,若句型r中含有aNb(或ab) • 若a<b,则在r中必有含b而不含a的短语存在 • 若a>b,则在r中必有含a而不含b的短语存在 • 若a=b,则在r中含有a的短语必含有b,反之亦然

  31. 最左素短语: 定义:设有文法G[S],其中句型的素短语是一个短语,它至少包含一个终结符,并除自身外不包含其它素短语,最左边的素短语称最左素短语。 例:文法G[E]: E→E+T|T T→T*F|F F→P↑F|P P→(E)|i 句型#T+T*F+i#的语法树如下:

  32. E E + T E + T F P T T * F i 根据语法树可知: 句型#T+T*F+i#的短语有: T ; T*F ; T+T*F ; i; T+T*F+i .

  33. 根据素短语的定义可知: i和T*F为素短语。 其中:T+T*F (含其他T*F素短语)和 T+T*F+i 不是素短语。 T*F为最左素短语。 六、算符优先分析法的局限性

  34. 教学总结 算符优先关系表是指用表格形式来表示各终结符号的优先关系的表。 为分析算符之间的优先关系,引入两个概念:firstVT集合和lastVT集合:对于非终结符B,有 firstVT (B)={b|Bb… 或 BCb…} lastVT(B)={a|B…a 或 B…aC} 为解决在算符优先分析过程中如何寻找句柄,引进最左素短语的概念。 算符优先分析法只适用于对表达式的分析,其特点是分析速度快。

  35. 作 业 教材P122练习: 4

More Related