第六章 算符优先分析文法
按一定原则求出该文法所有符 号之间的优先关系,并按照这种 之间的优先关系, 优先关系 关系确定规约过程中的句柄,是 一种规范规约 规范规约。 一种规范规约。
?
5
特点:准确、规范,但分析效率底, 特点:准确、规范,但分析效率底, 实际使用价值不大。 实际使用符优先分析法
20
例:已知表达式文法G[E]: 已知表达式文法G[E]: G[E] E→E+E | E*E | (E) | i 证明G[E]不是OPG文法。 G[E]不是OPG文法 证明G[E]不是OPG文法。 证明如下: 证明如下: 因为: →E+ 因为:E→E+E , E ⇒E * E 则有 + < *
a < b当且仅当G中含有形如A→…aB…的产生式, 当且仅当G中含有形如A 的产生式, a 的产生式 且B+ b…或B⇒Cb…; ⇒ 或 + ; 又因为: 又因为:E→E*E, E⇒E+E 则有 + > *
9
算符优先分析法
直观的算符优先分析法 算符优先分析法 区别是什么? 区别是什么?
• 算符优先关系的产生
10
直观算符优先分析法 算符优先关系: 算符优先关系:
a < b a = b a > b 表示a优先级低于b 表示a优先级低于b 表示a优先级相同b 表示a优先级相同b 表示a优先级高于b 表示a优先级高于b
只规定算符( 之间的优先关系。 只规定算符(终结符)之间的优先关系。 算符 在归约过程中只要找到句柄就归约,不必 就归约, 考虑归约到哪个非终结符,因此不是规 范归约。 范归约。 特点:速度快, 特点:速度快,特别适合于表达式的分析
通过算符之间的优先关系来确定句柄
6
先看一个例题: 先看一个例题: 例. 已知文法G[E]: :
• 含b的短语不含有其他元素; 的短语不含有其他元素; • 含b的短语含有它前面的元素。 的短语含有它前面的元素。
的短语不一定含b。 含A的短语不一定含 。 的短语不一定含
17
算符优先关系的定义
• 设G是一个算符文法,a和b是任意两个终结符, 是一个算符文法, 是任意两个终结符, 是非终结符, 如下: A,B,C是非终结符,算符优先关系如下: (1)a= 当且仅当G中含有形如A→ ab…或 A→…ab (1)a=b当且仅当G中含有形如A→ ab 或 A→…aBb 的产生式; aBb…的产生式 A→ aBb 的产生式; a< 当且仅当G中含有形如A→ aB…的 A→…aB (2) a<b当且仅当G中含有形如A→ aB 的 产生式, 产生式,且B⇒b…或B⇒Cb ; 或 Cb…; + + a> 当且仅当G中含有形如A→ A→…B 的 (3) a>b当且仅当G中含有形如A→ Bb…的 产生式, 产生式,且B⇒…a或B⇒…aC 。 a aC
+ firstVT(B)={b firstVT(B)={b|B⇒b… 或 B⇒Cb…} } + lastVT(B)={a + a lastVT(B)={a|B⇒…a 或 B⇒…aC} a +
22
三种算符优先关系的计算: 三种算符优先关系的计算:
1) = 关系 直接看产生式的右部, 直接看产生式的右部,若出现了 →…ab ab…或 →…aBb aBb, A → ab 或A → aBb,则a=b 2) < 关系 求出每个非终结符B 求出每个非终结符B的FIRSTVT(B) A→…aB aB…, ∈FIRSTVT(B), 若A→ aB ,则∀b∈FIRSTVT(B),a<b 3) > 关系 求出每个非终结符B 求出每个非终结符B的LASTVT(B) A→…Bb Bb…, ∈LASTVT(B), 若A→ Bb ,则∀a∈LASTVT(B),a>b
23
已知文法如下, 例:已知文法如下,计算优先关系 E’→#E# →#E# E→E+T|T T→T*F|F F→P↑F|P P→( P→(E)|i 分析: 分析: 计算优先关系实际上是求 #,+,× #,+,×,↑,(,), i ,(,), 之间的优先关系
24
求 = 关系
∵ E’→#E# ∴ # = # →#E# ∵ P→(E) ∵ ( = ) 写入优先关系表 = 关系
16
如果Ab或 如果 或(bA)出现在算符文法的句型γ中, )出现在算符文法的句型γ 其中A∈ , 其中 ∈VN, b ∈ VT,则γ中任何含 的短语必 , 中任何含b的短语必 含有A。 含有 。
* S => γ =abAβ
γ中含b的短语不含有 。 中含 的短语不含有A。 不含有
S a BB AB β b
# > > > > > > > =
14
<
<
算符文法的定义
• 设有一文法G,如果G中没有形如 设有一文法G 如果G A→…BC BC… (…∈V*) A→ BC ∈ 的产生式,其中B 的产生式,其中B和C为非终结符,则称G为 为非终结符,则称G 算符文法(或称OG文法) OG文法 算符文法(或称OG文法)。 即任何一个产生式中都不包含两个非终结 相邻的情况,就是算符文法。 符相邻的情况,就是算符文法。
15
算符文法的性质
性质1 性质1:在算符文法中任何句型都不包含两 个相邻的非终结符。 个相邻的非终结符。 性质2:如果Ab或(bA)出现在算符文法的 性质2 如果Ab或 bA) Ab 句型γ 其中A 句型γ中,其中A∈VN, b ∈ VT,则γ中任 何含b 短语必含有 必含有A 何含b的短语必含有A。 (含b的短语必含A,含A的短语不一定含b) 的短语必含A 的短语不一定含b
13
简单算符优先关系表如下
+ * /
↑
( ) i #
+ > > > > > < > > <
> > > > > < > > <
* < < > > > < > > <
/ < < > > > < > > <
↑
< < < < < < > > <
( < < < < < <
) > > > > > = > >
i < < < < < <
3
回顾-简单优先分析法 回顾-
#
A c B
a b bcde
→ A →b A →Ab B →d S→aAcBe A →Ab A →b
S⇒aAcBe ⇒aAcde ⇒aAbcde ⇒abbcde ⇒
S→aAcBe → B →d
S c
a A b
A b
B
e
d
4
回顾-简单优先分析法 回顾-
简单优先分析算法的基本思想: 简单优先分析算法的基本思想:
+ +
18
(2) a<b当且仅当 中含有形如 当且仅当G中含有形如 当且仅当 中含有形如A→…aB…的产 的产 + 生式, 生式,且B⇒b…或B⇒Cb…; ⇒ 或 + ⇒
A … a B … b …
A … B b … … a
(3) a>b当且仅当 中含有形如 当且仅当G中含有形如 当且仅当 中含有形如A→…Bb…的产 的产 + 生式, 生式,且B⇒…a或B⇒…aC 。 ⇒ 或 + ⇒
E→E+E E→E*E E→ i 输入串i+i*i ,归约过程如下 输入串i+i*i
7
G[E]:E→E+E, E→ E*E, E→ i :
步骤 1) ) 2) ) 3) ) 4) ) 5) ) 6) ) 7) ) 8) ) 9) ) 10) ) 11) ) 符号栈 输入符号串 # i+i*i# #i +i*i# #E +i*i# #E+ i*i# #E+i *i# #E+E *i# #E+E* i# #E+E*i # #E+E*E # #E+E # #E #
E’→#E# E→E+T|T T→T*F|F F→P↑F|P P→(E)|i ( )
直接看产生式的右部, 直接看产生式的右部,若出现了 →…ab ab…或 →…a A → ab 或A → aBb,则a=b
25
求 < 关系
• 求出每个非终结符B的FIRSTVT(B) 求出每个非终结符 的 • 若A→…aB…,则∀b∈FIRSTVT(B),a<b , ∈ , E’→#E# FIRSTVT(E’) ={#} E→E+T|T FIRSTVT(E) ={+,*,↑, ( , i } T→T*F|F FIRSTVT(T) ={*,↑, ( , i } F→P↑F|P FIRSTVT(F) ={↑, ( , i } P→(E)|i ( ) FIRSTVT(P) ={ ( , i } E’→#E#且P→(E)则{#,(}<FIRSTVT(E) → E#且P→(E)则{#,( FIRSTVT(E) # < + , # <* ,#<↑ , #< (,# <I, (< +,( <*, (<↑ , (<( ,( <i
1
第六章 自底向上优先分析
郑先容
本章主要内容及学时安排
6.1 自底向上语法优先分析概述 6.2 简单优先分析法 6.3 算符优先分析法 6.3 算符优先分析法 理论讲授: 理论讲授:4学时 上机: 上机:2学时
2
本次课重点与难点