第五章语法分析—自下而上分析
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
■ 例:考虑文法G(E):E T | E+T T F | T*F F (E) | i
输入串为i1*i2+i3 ,分析步骤为:
步骤 0 1 2 3 4
符号栈 # #i1 #F #T #T*
输入串 i1*i2+i3#
*i2+i3# *i2+i3# *i2+i3#
i2+i3#
动作 预备 进 归,用F→i 归,用T→F 进
设Q代表OPTR栈顶的当前符号,a代表新的输入符号, 则直观算符优先算法为:
1.Read next symbol to a; 2.If a=i then push a into OPND,GOTO 1; 3.If Q ·> a then Call E(1)QE(2);GOTO 3;
(注:E(1)QE(2)指pop E(1);pop E(2); t:=E(1),&,E(2)进行Q运算;push t;pop Q);
第五章 语法分析—自下而上分析
主要内容:
第五章 语法分析-自下而上分析
5.1 自下而上分析基本问题
5.2 算符优先分析
5.3 LR分析概述
5.4 LR(0)分析
5.5 SLR(1)分析
5.6 LR(1)分析
5.7 LALR (1)分析
5.8 二义文法的应用
2019/10/17
先乘除后加减,同级从左到右
考虑二义文法文法G(E): G(E): E i| E+E|E-E|E*E|E/E|(E) 它的句子有几种不同的规范规约。
归约即计算表达式的值。归约顺序不同, 则计算的顺序也不同,结果也不一样。
如果规定算符的优先次序,并按这种规定 进行归约,则归约过程是唯一的。
2019/10/17
中南大学软件学院 陈志刚
14
S
a A c Be
A
bd
b S
第五章 语法分析-自下而上分析
S
a A c Be
Ab
d
S
aA
2019/10/17
c Bea A d
中南大学软件学院 陈志刚
c Be
15
四、 符号栈的使用
第五章 语法分析-自下而上分析
栈是语法分析的一种基本数据结构。’#’作为栈 底符号。
2019/10/17
中南大学软件学院 陈志刚
24
第五章 语法分析-自下而上分析
二、算符优先文法及优先表构造
一个文法,如果它的任一产生式的右部都 不含两个相继(并列)的非终结符,即不含
如下形式的产生式右部:
…QR…
则我们称该文法为算符文法。
约定:
a、b代表任意终结符; P、Q、R代表任意非终结符; ‘…’代表由终结符和非终结符组成的任意序
2019/10/17
中南大学软件学院 陈志刚
27
第五章 语法分析-自下而上分析
LASTVT
LASTVT(P) {a | P a,或P aQ, a VT而Q VN }
构造集合LASTVT(P)的算法。
按其定义,可用下面两条规则来构造集合 LASTVT(P):
1. 若有产生式P→… a或P→ … aQ,则a LASTVT(P);
中南大学软件学院 陈志刚
8
第五章 语法分析-自下而上分析
三、 规范归约
定义:令G是一个文法,S是文法的开始符号,假
定是文法G的一个句型,如果有
S
*
A
且
A
则称是句型相对于非终结符A的短语。
特别地,如果有A,则称是句型相对于规 则A 的直接短语。
一个句型的最左直接短语称为该句型的句柄。
产生式, 而R b…或R Qb…;
3. a ·> b 当且仅当G中含有形如
P→…Rb…的产生式,而 R
…a或R …aQ。
如果一个算符文法G中的任何终结符对(a,b)至 多只满足下述三关系之一: a <· b,a b, a ·> b 则称G是一个算符优先文法。
2019/10/17
短语: i1,i2,i3, i1*i2, i1*i2+i3
直接短语: i1,i2,i3
句柄: i1
2019/10/17
中南大学软件学院 陈志刚
10
第五章 语法分析-自下而上分析
E
在一个句型对应的
E+ T
语法树中,以某非 终结符为根的两代
T
F
以上的子树的所有
T * F i3
末端结点从左到右 排列就是相对于该
中南大学软件学院 陈志刚
26
FIRSTVT
第五章 语法分析-自下而上分析
构造集合FIRSTVT(P)的算法。 按其定义,可用下面两条规则来构造集合
FIRSTVT(P):
1. 若有产生式P→a…或P→Ra…, 则a FIRSTVT(P);
2. 若a FIRSTVT(R),且有产生式P→R… , 则a FIRSTVT(P)。
2019/10/17
中南大学软件学院 陈志刚
21
第五章 语法分析-自下而上分析
一、直观算符优先分析法
首先必须定义任何两个可能相继出现的终结 符a与b的优先关系 三种关系
a<·b a的优先级低于b a b a的优先级等于b a·>b a的优先级高于b
注意:与数学上的<,>,=不同
a <· b并不意味着b·>a
初始状态:栈#
输入串 ω#
自左至右把输入符号一一进栈,一旦栈顶形成句 柄,就把其归约,直至栈顶不再形成句柄为止。 然后继续移进,重复上述过程,直至形成 栈# S,输入串#。
若达到上述状态,则表示分析成功,否则输入串 不是句子。
2019/10/17
中南大学软件学院 陈志刚
16
第五章 语法分析-自下而上分析
S
2019/10/17
中南大学软件学院 陈志刚
12
第五章 语法分析-自下而上分析
定义:假定是文法G的一个句子,我们称 序列n, n-1, ,0 是的一个规范归 约,如果此序列满足: 1、 n= 2、 0为文法的开始符号,即0=S 3、 对任何i,0 i n, i-1是从i经把句 柄替换成为相应产生式左部符号而得到的。
2019/10/17
中南大学软件学院 陈志刚
22
第五章 语法分析-自下而上分析
直观算符优先分析法使用两个工作栈。 OPTR--寄存操作符及#,初值为#,(输
入串末尾也加#) OPND--寄存操作数及结果,初值为空,最
后为运算结果。
2019/10/17
中南大学软件学院 陈志刚
23
第五章 语法分析-自下而上分析
F
i2
i1
非终结符的一个短 语,如果子树只有 两代,则该短语就
是直接短语。
2019/10/17
中南大学软件学院 陈志刚
11
第五章 语法分析-自下而上分析
可用句柄来对句子进行归约
句型
归约规则
abbcde (2) A b
aAbcde (3) A Ab
aAcde (4) B d
aAcBe (1) S aAcBe
2019/10/17
中南大学软件学院 陈志刚
20
第五章 语法分析-自下而上分析
算符优先分析过程是自下而上的归约过程, 但未必是严格的最左归约。也就是说,算 符优先分析法不是一种规范归约法。
所谓算符优先分析法就是定义算符之间的 某种优先关系,借助于这种关系寻找“可 归约串” 进行归约的一种方法。
2019/10/17
中南大学软件学院 陈志刚
9
第五章 语法分析-自下而上分析
例:考虑文法G(E): E T | E+T
T F | T*F
F (E) | i
和句型i1*i2+i3:
E E+T E+F E+i3 T+i3 T*F+i3 T*i2+i3 F*i2+i3 i1*i2+i3
中南大学软件学院 陈志刚
2
第五章 语法分析-自下而上分析
5.1 自下而上分析基本问题
自下而上分析法(Bottom-up)
基本思想:从输入串开始,逐步进行“归 约”,直到文法的开始符号。即从树末端
开始,构造语法树。所谓归约,是指根据文 法的产生式规则,把产生式的右部替换成左 部符号。
算符优先分析法:按照算符的优先关系和结 合性质进行语法分析。适合分析表达式。
LR分析法:规范归约
2019/10/17
中南大学软件学院 陈志刚
3
第五章 语法分析-自下而上分析
例:G(E):Ei|E+E|E-E|E*E|E/E|(E)
i*i+i E*i+i E*E+i E+i E+E E
E
E+ E E*E i
i
i
2019/10/17
中南大学软件学院 陈志刚
4
第五章 语法分析-自下而上分析
步骤 9 10 11 12 13 14
符号栈 #E+ #E+i3 #E+F #E+T #E #E
输入串 i3# # # # # #
动作 进 进 归,用F→i 归,用T→F 归,用E→E+T 接受
2019/10/17
中南大学软件学院 陈志刚
19
第五章 语法分析-自下而上分析
5.2 算符优先分析
四则运算的优先规则:
输入串 i2+i3# +i3# +i3# +i3# +i3#
i3#
中南大学软件学院 陈志刚
动作 进 进 归,用F→i 归,用T→T*F 归,用E→T 进
18
第五章 语法分析-自下而上分析
■ 例:考虑文法G(E):E T | E+T T F | T*F F (E) | i
输入串为i1*i2+i3 ,分析步骤为:
二、分析树
语法分析过程可用一棵语
法分析树表示出来。
自下而上分析过程:边输
S
入单词符号,边归约。即,
在都自可下画而出一上棵分子析树的,每随一着步,a A c
归约的完成,便最终形成
一棵分析树。
A
b
如果文法无二义,分析树
恰好等同于语法树。 核心问题:识别可归约串
b
Be d
2019/10/17
列,包括空字。
2019/10/17
中南大学软件学院 陈志刚
25
第五章 语法分析-自下而上分析
假定G是一个不含-产生式的算符文法。对于任 何一对终结符a、b,我们说:
1. a b 当且仅当文法G中含有形如 P→…ab…或P→…aQb…的产生式;
2. a <·b 当且仅当G中含有形如P→…aR…的
4.If Q a then
If Q=’(‘ and a=‘)’ then pop Q;GOTO 1; If Q=a=‘#’ then success; halt. 5.If Q <· a then push a into OPTR;GOTO 1; 6.If (Q,a)=Err. Then Call ERROR.
一、归约
采用“移进-归约”思想进行自下而上分析。 基本思想:设计一个堆栈,把符号串从左至
右压入栈中,判别栈顶符号是否为某一个产 生式的右部,若是则把栈顶的这一部分替换
成(归约为)该产生式的左部符号。
可归约串在算符优先分析法中即为最左素短 语,在规范归约中是句柄。
最左归约是最右推导的逆过程,最左归约称 为规范。
2019/10/17
中南大学软件学院 陈志刚
13
第五章 语法分析-自下而上分析
把上例倒过来写,则得到:
S aAcBe aAcde aAbcde abbcde
■ 显然这是一个最右推导。最右推导常被称 为规范推导。容易看到,规范归约是关于 的一个最右推导 的逆过程。因些,规范归 约也称最左归约。 ■ 由规范推导推出的句型称为规范句型。
2019/10/17
中南大学软件学院 陈志刚
5
第五章 语法分析-自下而上分析
例:设文法G(S): (1) S aAcBe (2) A b (3) A Ab (4) B d
试对abbcde进行“移进-归约”分析。
2019ቤተ መጻሕፍቲ ባይዱ10/17
e
BBd
abbbbcccdddeee
bcc
Ab
Saa
2. 若a LASTVT(Q),且有产生式P→… Q , 则a LASTVT(P)。
2019/10/17
中南大学软件学院 陈志刚
28
优先关系表的构造
2019/10/17
中南大学软件学院 陈志刚
17
第五章 语法分析-自下而上分析
■ 例:考虑文法G(E):E T | E+T T F | T*F F (E) | i
输入串为i1*i2+i3 ,分析步骤为:
步骤 4 5 6 7 8 9
2019/10/17
符号栈 #T* #T*i2 #T*F #T #E #E+
中南大学软件学院 陈志刚
6
第五章 语法分析-自下而上分析
步骤: 1 2 3 4 5 6 7 8 9 10 动作: 进a 进b 归(2) 进b 归(3) 进c 进d 归(4) 进e 归(1)
e
dBB
b
cccc
bAAAAAAA
aaaaaaaaaS
2019/10/17
中南大学软件学院 陈志刚
7
第五章 语法分析-自下而上分析
输入串为i1*i2+i3 ,分析步骤为:
步骤 0 1 2 3 4
符号栈 # #i1 #F #T #T*
输入串 i1*i2+i3#
*i2+i3# *i2+i3# *i2+i3#
i2+i3#
动作 预备 进 归,用F→i 归,用T→F 进
设Q代表OPTR栈顶的当前符号,a代表新的输入符号, 则直观算符优先算法为:
1.Read next symbol to a; 2.If a=i then push a into OPND,GOTO 1; 3.If Q ·> a then Call E(1)QE(2);GOTO 3;
(注:E(1)QE(2)指pop E(1);pop E(2); t:=E(1),&,E(2)进行Q运算;push t;pop Q);
第五章 语法分析—自下而上分析
主要内容:
第五章 语法分析-自下而上分析
5.1 自下而上分析基本问题
5.2 算符优先分析
5.3 LR分析概述
5.4 LR(0)分析
5.5 SLR(1)分析
5.6 LR(1)分析
5.7 LALR (1)分析
5.8 二义文法的应用
2019/10/17
先乘除后加减,同级从左到右
考虑二义文法文法G(E): G(E): E i| E+E|E-E|E*E|E/E|(E) 它的句子有几种不同的规范规约。
归约即计算表达式的值。归约顺序不同, 则计算的顺序也不同,结果也不一样。
如果规定算符的优先次序,并按这种规定 进行归约,则归约过程是唯一的。
2019/10/17
中南大学软件学院 陈志刚
14
S
a A c Be
A
bd
b S
第五章 语法分析-自下而上分析
S
a A c Be
Ab
d
S
aA
2019/10/17
c Bea A d
中南大学软件学院 陈志刚
c Be
15
四、 符号栈的使用
第五章 语法分析-自下而上分析
栈是语法分析的一种基本数据结构。’#’作为栈 底符号。
2019/10/17
中南大学软件学院 陈志刚
24
第五章 语法分析-自下而上分析
二、算符优先文法及优先表构造
一个文法,如果它的任一产生式的右部都 不含两个相继(并列)的非终结符,即不含
如下形式的产生式右部:
…QR…
则我们称该文法为算符文法。
约定:
a、b代表任意终结符; P、Q、R代表任意非终结符; ‘…’代表由终结符和非终结符组成的任意序
2019/10/17
中南大学软件学院 陈志刚
27
第五章 语法分析-自下而上分析
LASTVT
LASTVT(P) {a | P a,或P aQ, a VT而Q VN }
构造集合LASTVT(P)的算法。
按其定义,可用下面两条规则来构造集合 LASTVT(P):
1. 若有产生式P→… a或P→ … aQ,则a LASTVT(P);
中南大学软件学院 陈志刚
8
第五章 语法分析-自下而上分析
三、 规范归约
定义:令G是一个文法,S是文法的开始符号,假
定是文法G的一个句型,如果有
S
*
A
且
A
则称是句型相对于非终结符A的短语。
特别地,如果有A,则称是句型相对于规 则A 的直接短语。
一个句型的最左直接短语称为该句型的句柄。
产生式, 而R b…或R Qb…;
3. a ·> b 当且仅当G中含有形如
P→…Rb…的产生式,而 R
…a或R …aQ。
如果一个算符文法G中的任何终结符对(a,b)至 多只满足下述三关系之一: a <· b,a b, a ·> b 则称G是一个算符优先文法。
2019/10/17
短语: i1,i2,i3, i1*i2, i1*i2+i3
直接短语: i1,i2,i3
句柄: i1
2019/10/17
中南大学软件学院 陈志刚
10
第五章 语法分析-自下而上分析
E
在一个句型对应的
E+ T
语法树中,以某非 终结符为根的两代
T
F
以上的子树的所有
T * F i3
末端结点从左到右 排列就是相对于该
中南大学软件学院 陈志刚
26
FIRSTVT
第五章 语法分析-自下而上分析
构造集合FIRSTVT(P)的算法。 按其定义,可用下面两条规则来构造集合
FIRSTVT(P):
1. 若有产生式P→a…或P→Ra…, 则a FIRSTVT(P);
2. 若a FIRSTVT(R),且有产生式P→R… , 则a FIRSTVT(P)。
2019/10/17
中南大学软件学院 陈志刚
21
第五章 语法分析-自下而上分析
一、直观算符优先分析法
首先必须定义任何两个可能相继出现的终结 符a与b的优先关系 三种关系
a<·b a的优先级低于b a b a的优先级等于b a·>b a的优先级高于b
注意:与数学上的<,>,=不同
a <· b并不意味着b·>a
初始状态:栈#
输入串 ω#
自左至右把输入符号一一进栈,一旦栈顶形成句 柄,就把其归约,直至栈顶不再形成句柄为止。 然后继续移进,重复上述过程,直至形成 栈# S,输入串#。
若达到上述状态,则表示分析成功,否则输入串 不是句子。
2019/10/17
中南大学软件学院 陈志刚
16
第五章 语法分析-自下而上分析
S
2019/10/17
中南大学软件学院 陈志刚
12
第五章 语法分析-自下而上分析
定义:假定是文法G的一个句子,我们称 序列n, n-1, ,0 是的一个规范归 约,如果此序列满足: 1、 n= 2、 0为文法的开始符号,即0=S 3、 对任何i,0 i n, i-1是从i经把句 柄替换成为相应产生式左部符号而得到的。
2019/10/17
中南大学软件学院 陈志刚
22
第五章 语法分析-自下而上分析
直观算符优先分析法使用两个工作栈。 OPTR--寄存操作符及#,初值为#,(输
入串末尾也加#) OPND--寄存操作数及结果,初值为空,最
后为运算结果。
2019/10/17
中南大学软件学院 陈志刚
23
第五章 语法分析-自下而上分析
F
i2
i1
非终结符的一个短 语,如果子树只有 两代,则该短语就
是直接短语。
2019/10/17
中南大学软件学院 陈志刚
11
第五章 语法分析-自下而上分析
可用句柄来对句子进行归约
句型
归约规则
abbcde (2) A b
aAbcde (3) A Ab
aAcde (4) B d
aAcBe (1) S aAcBe
2019/10/17
中南大学软件学院 陈志刚
20
第五章 语法分析-自下而上分析
算符优先分析过程是自下而上的归约过程, 但未必是严格的最左归约。也就是说,算 符优先分析法不是一种规范归约法。
所谓算符优先分析法就是定义算符之间的 某种优先关系,借助于这种关系寻找“可 归约串” 进行归约的一种方法。
2019/10/17
中南大学软件学院 陈志刚
9
第五章 语法分析-自下而上分析
例:考虑文法G(E): E T | E+T
T F | T*F
F (E) | i
和句型i1*i2+i3:
E E+T E+F E+i3 T+i3 T*F+i3 T*i2+i3 F*i2+i3 i1*i2+i3
中南大学软件学院 陈志刚
2
第五章 语法分析-自下而上分析
5.1 自下而上分析基本问题
自下而上分析法(Bottom-up)
基本思想:从输入串开始,逐步进行“归 约”,直到文法的开始符号。即从树末端
开始,构造语法树。所谓归约,是指根据文 法的产生式规则,把产生式的右部替换成左 部符号。
算符优先分析法:按照算符的优先关系和结 合性质进行语法分析。适合分析表达式。
LR分析法:规范归约
2019/10/17
中南大学软件学院 陈志刚
3
第五章 语法分析-自下而上分析
例:G(E):Ei|E+E|E-E|E*E|E/E|(E)
i*i+i E*i+i E*E+i E+i E+E E
E
E+ E E*E i
i
i
2019/10/17
中南大学软件学院 陈志刚
4
第五章 语法分析-自下而上分析
步骤 9 10 11 12 13 14
符号栈 #E+ #E+i3 #E+F #E+T #E #E
输入串 i3# # # # # #
动作 进 进 归,用F→i 归,用T→F 归,用E→E+T 接受
2019/10/17
中南大学软件学院 陈志刚
19
第五章 语法分析-自下而上分析
5.2 算符优先分析
四则运算的优先规则:
输入串 i2+i3# +i3# +i3# +i3# +i3#
i3#
中南大学软件学院 陈志刚
动作 进 进 归,用F→i 归,用T→T*F 归,用E→T 进
18
第五章 语法分析-自下而上分析
■ 例:考虑文法G(E):E T | E+T T F | T*F F (E) | i
输入串为i1*i2+i3 ,分析步骤为:
二、分析树
语法分析过程可用一棵语
法分析树表示出来。
自下而上分析过程:边输
S
入单词符号,边归约。即,
在都自可下画而出一上棵分子析树的,每随一着步,a A c
归约的完成,便最终形成
一棵分析树。
A
b
如果文法无二义,分析树
恰好等同于语法树。 核心问题:识别可归约串
b
Be d
2019/10/17
列,包括空字。
2019/10/17
中南大学软件学院 陈志刚
25
第五章 语法分析-自下而上分析
假定G是一个不含-产生式的算符文法。对于任 何一对终结符a、b,我们说:
1. a b 当且仅当文法G中含有形如 P→…ab…或P→…aQb…的产生式;
2. a <·b 当且仅当G中含有形如P→…aR…的
4.If Q a then
If Q=’(‘ and a=‘)’ then pop Q;GOTO 1; If Q=a=‘#’ then success; halt. 5.If Q <· a then push a into OPTR;GOTO 1; 6.If (Q,a)=Err. Then Call ERROR.
一、归约
采用“移进-归约”思想进行自下而上分析。 基本思想:设计一个堆栈,把符号串从左至
右压入栈中,判别栈顶符号是否为某一个产 生式的右部,若是则把栈顶的这一部分替换
成(归约为)该产生式的左部符号。
可归约串在算符优先分析法中即为最左素短 语,在规范归约中是句柄。
最左归约是最右推导的逆过程,最左归约称 为规范。
2019/10/17
中南大学软件学院 陈志刚
13
第五章 语法分析-自下而上分析
把上例倒过来写,则得到:
S aAcBe aAcde aAbcde abbcde
■ 显然这是一个最右推导。最右推导常被称 为规范推导。容易看到,规范归约是关于 的一个最右推导 的逆过程。因些,规范归 约也称最左归约。 ■ 由规范推导推出的句型称为规范句型。
2019/10/17
中南大学软件学院 陈志刚
5
第五章 语法分析-自下而上分析
例:设文法G(S): (1) S aAcBe (2) A b (3) A Ab (4) B d
试对abbcde进行“移进-归约”分析。
2019ቤተ መጻሕፍቲ ባይዱ10/17
e
BBd
abbbbcccdddeee
bcc
Ab
Saa
2. 若a LASTVT(Q),且有产生式P→… Q , 则a LASTVT(P)。
2019/10/17
中南大学软件学院 陈志刚
28
优先关系表的构造
2019/10/17
中南大学软件学院 陈志刚
17
第五章 语法分析-自下而上分析
■ 例:考虑文法G(E):E T | E+T T F | T*F F (E) | i
输入串为i1*i2+i3 ,分析步骤为:
步骤 4 5 6 7 8 9
2019/10/17
符号栈 #T* #T*i2 #T*F #T #E #E+
中南大学软件学院 陈志刚
6
第五章 语法分析-自下而上分析
步骤: 1 2 3 4 5 6 7 8 9 10 动作: 进a 进b 归(2) 进b 归(3) 进c 进d 归(4) 进e 归(1)
e
dBB
b
cccc
bAAAAAAA
aaaaaaaaaS
2019/10/17
中南大学软件学院 陈志刚
7
第五章 语法分析-自下而上分析