编译原理第六章-自底向上优先分析法PPT课件
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
❖ 由定义直接构造 ❖ 由关系图法构造算符优先关系表
20
(1)由定义直接构造
❖ 首先引入两个概念
FIRSTVT(B)={b|B b…或B Cb...}
❖对于非终结符B,其往下推导所可能出现的首个算符
LASTVT(B)={a|B … a或B ... aC}
>
>
11) #S
>=
#
接受
)
>
>
对输入串b(aa)#的简单优先分析过程
#< <
简单优先关系矩阵
12
❖ 自底向上优先分析法慨述 ❖ 简单优先分析 ❖ 算符优先分析
13
6.3 算符优先分析法
❖ 某些文法具有“算符”特性 表达式运算符(优先级、结合性) 人为地规定其算符的优先顺序,即给出优先级别 和同一级别的结合性
(4)括号‘(’,‘)’的优先级大 / > > > > < < > < >
于括号外的运算符,小于括号 内的运算符,内括号的优先性
>>>><<><>
(<<<<<<=<
)>>>>>
>
>
大于外括号
i>>>>>
>
>
(5)#的优先性低于与其相邻的 # < < < < < < < =
算符
算符优先关系表
15
文法G[E]:E→E+E|E-E|E*E|E/E|EE|(E)|i
10
6.2.3 简单优先分析法
❖ 算法步骤如下:
11
文法G[S]: (1) S → bAb (2) A → (B|a (3) B → Aa)
步骤
1) 2) 3)
4)
符号栈
# #b #b( #b(a
输入符号串
b(aa)b# (aa)b# aa)b# a)b#
动作
#<b,移进 b<(,移进 (<a,移进
16
6.3.2 算符优先文法的定义
❖ 定义 设有一文法G,如果G中没有形如A …BC…的产 生式,其中B和C为非终结符,则称G为算符文法(Operator Grammar)也称0G文法.
❖ 性质1:在算符文法中任何句型都不包含两个相邻的非终结 符.(数学归纳法)
❖ 性质2:如果从Ab或(bA)出现在算符文法的句型γ中,其中 A∈ ,b∈V N ,则γV T中任何含b的短语必含有A。(反证法)
❖ 只考虑算符之间的优先关系来确定句柄
14
6.3.1 直观算符优先分析法
文法G[E]:E→E+E|E-E|E*E|E/E|EE|(E)|i
(1) 优先级最高,右结合 (2)*和/优先级次之,左结合
+ - * / ( ) i# +>><<<<><> ->><<<<><>
(3)+和-优先级最低,左结合 * > > > > < < > < >
+ - * / ( ) i#
+>><<<<><>
->><<<<><>
*>>>><<><>
/>>>><<><>
>>>><<><>
(<<<<<<=<
)>>>>>
>
>
i>>>>>
>
>
#<<<<<<
<=
算符优先关系表
步骤
1) 2) 3) 4)
5)
符号栈
# #i #E #E+
#E+i
输入符号串
i+i*i# +i*i# +i*i#
且B Y... X>Y· 文法G中存在产生式A→...BD...,
且B ...X,D Y*...
❖ 如何确定两个文法符号之间的优先关系?
(按定义求优先关系,P96)
9
6.2.2 简单优先文法的定义
满足以下条件的文法是简单优先文法 (1)在文法符号集V中,任意两个符号之间最
多只有一种优先关系成立。 (2)在文法中任意两个产生式没有相同的右部
第六章 自底向上优先分析法
1
❖ 自底向上优先分析法慨述 ❖ 简单优先分析 ❖ 算符优先分析
2
6.1 自底向上语法分析概述
❖ 如名字如示,自底向上语法分析试图将一个 字符串反向归约至开始符号。
❖ 自底向上语法分析比自上而下语法分析更有 效率,对语法的限制更少
3
❖ 自底向上语法分析的策略:移进-规约分析; ❖ 移进就是将一个终结符推进栈 ❖ 归约就是将0个或多个符号从栈中弹出,根据
产生式将一个非终结符压入栈 ❖ 移进-归约过程是自顶向下最右推导的逆过程
(规范归约)
4
例6.1设文法G[s]为: (1)S aAcBe (2)A b (3)A Ab (4)B d
对输入串abbcde进行分析,检查该符号串是否是G[s]的句子。 分析:容易看出对输入串abbcde的最右推导是:
S=>aAcBe=>aAcde=>aAbcde=>abbcde 由此我们可以构造它的逆过程即归约过程。
18
算符优先文法的定义(续)
❖ 定义 设有一不含 产 生式的算符文法G,如
果对任意两个终结符对a,b之间至多只有<、 >和=三·种关· 系的·一种成立,则称G是一个算 符优先文法(Operator Precedence Grammar) 即OPG文法。(P101)
19
6.3.3 算符优先关系表的构造
a>a,归约A→a
5) #b(A
a)b#
A=a,移进
6) #b(Aa
SbA S
(Ba
)# >
7)
#b(Aa)
b
=<
<
> 8) #b(B
)b# b# b#
a=),移进 )>b,归约B→Aa) B>b,归约A→(B
A
=
=
9) #bA
b#
A=b,移进
(
<<=<
10) #bAb
#
b>#,归约S→bAb
B
>
a
i*i#
*i#
动作
#<i,移进 #<i>+,规约 #<+,移进
+<i,移进
+<i>*,规约
6) #E+E
*i#
+<*,移进
7) #E+E*
i#
*<i,移进
8) #E+E*i
#
*<i>#,规约
9) 10)
11)
#E+E*E #E+E #E
#
+<*>#,规约
#
#<+>#,规约
#
接受
对输入串i+i*i的算符优先分析过程
17
算符优先文法的定义(续)
❖ 设G是一个不含 产生式的算符文法
Hale Waihona Puke ❖ a =·b G中有形如.A…ab…或A
…aBb…
的产生式。
❖ a <·b
❖ a ·> b
G中有形如.A …aB…的产生式,而 B b….或B Cb…
BG 中 有形…如a或.AB
…Bb…的产生式,而 … aC
❖(语法子树可以直观的说明算符的优先关系P101)
5
❖ 自底向上分析的关键问题: 如何确定句柄。
6
❖ 自底向上优先分析法慨述 ❖ 简单优先分析 ❖ 算符优先分析
7
6.2 简单优先分析法
❖ 按照文法符号(包括终结符和非终结符)的 优先关系确定句柄。
8
6.2.1 优先关系
❖ 优先关系
X=Y· 文法G中存在产生式A→...XY... X<Y· 文法G中存在产生式A→...XB...,
20
(1)由定义直接构造
❖ 首先引入两个概念
FIRSTVT(B)={b|B b…或B Cb...}
❖对于非终结符B,其往下推导所可能出现的首个算符
LASTVT(B)={a|B … a或B ... aC}
>
>
11) #S
>=
#
接受
)
>
>
对输入串b(aa)#的简单优先分析过程
#< <
简单优先关系矩阵
12
❖ 自底向上优先分析法慨述 ❖ 简单优先分析 ❖ 算符优先分析
13
6.3 算符优先分析法
❖ 某些文法具有“算符”特性 表达式运算符(优先级、结合性) 人为地规定其算符的优先顺序,即给出优先级别 和同一级别的结合性
(4)括号‘(’,‘)’的优先级大 / > > > > < < > < >
于括号外的运算符,小于括号 内的运算符,内括号的优先性
>>>><<><>
(<<<<<<=<
)>>>>>
>
>
大于外括号
i>>>>>
>
>
(5)#的优先性低于与其相邻的 # < < < < < < < =
算符
算符优先关系表
15
文法G[E]:E→E+E|E-E|E*E|E/E|EE|(E)|i
10
6.2.3 简单优先分析法
❖ 算法步骤如下:
11
文法G[S]: (1) S → bAb (2) A → (B|a (3) B → Aa)
步骤
1) 2) 3)
4)
符号栈
# #b #b( #b(a
输入符号串
b(aa)b# (aa)b# aa)b# a)b#
动作
#<b,移进 b<(,移进 (<a,移进
16
6.3.2 算符优先文法的定义
❖ 定义 设有一文法G,如果G中没有形如A …BC…的产 生式,其中B和C为非终结符,则称G为算符文法(Operator Grammar)也称0G文法.
❖ 性质1:在算符文法中任何句型都不包含两个相邻的非终结 符.(数学归纳法)
❖ 性质2:如果从Ab或(bA)出现在算符文法的句型γ中,其中 A∈ ,b∈V N ,则γV T中任何含b的短语必含有A。(反证法)
❖ 只考虑算符之间的优先关系来确定句柄
14
6.3.1 直观算符优先分析法
文法G[E]:E→E+E|E-E|E*E|E/E|EE|(E)|i
(1) 优先级最高,右结合 (2)*和/优先级次之,左结合
+ - * / ( ) i# +>><<<<><> ->><<<<><>
(3)+和-优先级最低,左结合 * > > > > < < > < >
+ - * / ( ) i#
+>><<<<><>
->><<<<><>
*>>>><<><>
/>>>><<><>
>>>><<><>
(<<<<<<=<
)>>>>>
>
>
i>>>>>
>
>
#<<<<<<
<=
算符优先关系表
步骤
1) 2) 3) 4)
5)
符号栈
# #i #E #E+
#E+i
输入符号串
i+i*i# +i*i# +i*i#
且B Y... X>Y· 文法G中存在产生式A→...BD...,
且B ...X,D Y*...
❖ 如何确定两个文法符号之间的优先关系?
(按定义求优先关系,P96)
9
6.2.2 简单优先文法的定义
满足以下条件的文法是简单优先文法 (1)在文法符号集V中,任意两个符号之间最
多只有一种优先关系成立。 (2)在文法中任意两个产生式没有相同的右部
第六章 自底向上优先分析法
1
❖ 自底向上优先分析法慨述 ❖ 简单优先分析 ❖ 算符优先分析
2
6.1 自底向上语法分析概述
❖ 如名字如示,自底向上语法分析试图将一个 字符串反向归约至开始符号。
❖ 自底向上语法分析比自上而下语法分析更有 效率,对语法的限制更少
3
❖ 自底向上语法分析的策略:移进-规约分析; ❖ 移进就是将一个终结符推进栈 ❖ 归约就是将0个或多个符号从栈中弹出,根据
产生式将一个非终结符压入栈 ❖ 移进-归约过程是自顶向下最右推导的逆过程
(规范归约)
4
例6.1设文法G[s]为: (1)S aAcBe (2)A b (3)A Ab (4)B d
对输入串abbcde进行分析,检查该符号串是否是G[s]的句子。 分析:容易看出对输入串abbcde的最右推导是:
S=>aAcBe=>aAcde=>aAbcde=>abbcde 由此我们可以构造它的逆过程即归约过程。
18
算符优先文法的定义(续)
❖ 定义 设有一不含 产 生式的算符文法G,如
果对任意两个终结符对a,b之间至多只有<、 >和=三·种关· 系的·一种成立,则称G是一个算 符优先文法(Operator Precedence Grammar) 即OPG文法。(P101)
19
6.3.3 算符优先关系表的构造
a>a,归约A→a
5) #b(A
a)b#
A=a,移进
6) #b(Aa
SbA S
(Ba
)# >
7)
#b(Aa)
b
=<
<
> 8) #b(B
)b# b# b#
a=),移进 )>b,归约B→Aa) B>b,归约A→(B
A
=
=
9) #bA
b#
A=b,移进
(
<<=<
10) #bAb
#
b>#,归约S→bAb
B
>
a
i*i#
*i#
动作
#<i,移进 #<i>+,规约 #<+,移进
+<i,移进
+<i>*,规约
6) #E+E
*i#
+<*,移进
7) #E+E*
i#
*<i,移进
8) #E+E*i
#
*<i>#,规约
9) 10)
11)
#E+E*E #E+E #E
#
+<*>#,规约
#
#<+>#,规约
#
接受
对输入串i+i*i的算符优先分析过程
17
算符优先文法的定义(续)
❖ 设G是一个不含 产生式的算符文法
Hale Waihona Puke ❖ a =·b G中有形如.A…ab…或A
…aBb…
的产生式。
❖ a <·b
❖ a ·> b
G中有形如.A …aB…的产生式,而 B b….或B Cb…
BG 中 有形…如a或.AB
…Bb…的产生式,而 … aC
❖(语法子树可以直观的说明算符的优先关系P101)
5
❖ 自底向上分析的关键问题: 如何确定句柄。
6
❖ 自底向上优先分析法慨述 ❖ 简单优先分析 ❖ 算符优先分析
7
6.2 简单优先分析法
❖ 按照文法符号(包括终结符和非终结符)的 优先关系确定句柄。
8
6.2.1 优先关系
❖ 优先关系
X=Y· 文法G中存在产生式A→...XY... X<Y· 文法G中存在产生式A→...XB...,