第6章 自底向上优先分析(10月14日修改)
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第6章 自底向上优先分析
第6章 自底向上优先分析法
学习目标:
掌握:构造算符优先关系表,进行算符 优先分析,构造优先函数 理解:算符优先文法,最左素短语
了解:简单优先分析法
Page 2
第6章 自底向上优先分析
2013-7-5
第6章 自底向上优先分析法
6.1 自底向上分析方法概述
6.2 自底向上优先分析方法概述
2013-7-5
6.1 自底向上分析方法概述
关键问题:如何在分析的过程中确定句柄
何时移进?栈顶未形成句柄 何时归约?栈顶形成句柄
常用自底向上分析法:
算符优先分析法(6.3)
LR类分析法(第7章)
Page 8
第6章 自底向上优先分析
2013-7-5
6.2 自底向上优先分析法概述
3.基本实现方法——“移进-归约”方法
引进一个先进后出的符号栈来存放符号; 对输入符号串自左向右进行扫描,并把当前输入符号下推 入栈中(移进),边移进边分析,一旦栈顶符号串形成某 个句型的句柄(为某产生式的右部)时,就用相应的非终 结符(产生式的左部)替换它(归约)。 重复这一过程,直到输入符号串的末端,此时如果栈中只 剩文法开始符号,则输入符号串是文法的句子,否则不是。
Page 4 第6章 自底向上优先分析 2013-7-5
6.1 自底向上分析方法概述
规范归约:
自底向上分析的移进-归约过程是自顶向下最右 推导的逆过程。而因为最右推导为规范推导,所以自 左向右的归约称为规范归约。
例 文法: (1) S→aAcBe (3) A→Ab (2) A→b (4) B→d
T→T×F|F
F→(E)|i
Page 26 第6章 自底向上优先分析 2013-7-5
6.3.3 算符优先关系表的构造
1.最左终结符集FIRSTVT
FIRSTVT(B)={b|B+ b… 或 B+Cb… },其 中b∈VT, B,C∈VN (ε 不属于FIRSTVT) 直观上说FIRSTVT(B)是由B推导出的最左终结符 (允许左边有一个非终结符)的集合。 与FIRST() = { a பைடு நூலகம்VT | * a......} 对照 文法符号串的开始符号集是由推导出的开头的终 结符(包括ε)组成
2013-7-5
第6章 自底向上优先分析
6.3 算符优先分析法
② 运算次序只与运算符(优先级,结合性)有关, 与运算对象无关
③ 可以根据运算符(终结符)的优先关系指导归 约过程,与运算对象(非终结符)无关
Page 12
第6章 自底向上优先分析
2013-7-5
6.3 算符优先分析法
6.3.1 优先关系
Page 14 第6章 自底向上优先分析 2013-7-5
优先关系定义的依据 在当前句柄中的符号优先于与其相邻的不在句 柄中的符号被归约,其优先关系大
同一句柄中的相邻符号同时被归约,其优先关 E 系相同
E→E+T|T E T F ( E ) + T
T→T×F|F
F→(E)|i
句型(E)+T的句柄 是(E) , 所以‘)’ >‘+’ ‘(’ = ‘)’
所以( = )
a
δ
b
说明:δ 为ε 或B,这样,a和b在同一句柄中同时归 约所以优先级相同。
Page 22 第6章 自底向上优先分析 2013-7-5
2)a < b 当且仅当G中有形如 A → …aB… 的产生式,
且 B + b… 或 B + Cb… A a B … P δ b …
文法E→E+T|T T→T×F|F F→(E)|i 由E→E+T T + T×F
不可能相邻出现在任何句型中的两个符号,无法比 较其归约的先后,故它们之间无优先关系
Page 15 第6章 自底向上优先分析 2013-7-5
注意:<,=,>是三种有序关系,与数学中的<,
= , > 不 同 , 所 以 a=b不 意 味 b=a , a>b不 意 味 b<a E E E→E+T|T T→T×F|F F→(E)|i
Page 7
符号栈 # #a #ab #aA #aAb #aA #aAc #aAcd #aAcB #aAcBe #S
输入符号串 abbcde# bbcde# bcde# bcde# cde# cde# de# e# e# # #
第6章 自底向上优先分析
动作 移进a 移进b 归约(A→b) 移进b 归约(A→Ab) 移进c 移进d 归约(B→d) 移进e 归 约 ( S→aAcBe ) 接受
Page 21
句型 E+T+T×F 短语有: E+T T×F E+T+T×F
第6章 自底向上优先分析 2013-7-5
2. 算符优先关系的定义
设G是一个不含ε产生式的算符文法,a和b是任意 两个终结符,A,B,C是非终结符,算符优先关系定 义如下: 1)a = b 当且仅当G中有形如 A→…ab… 或 A→…aBb… 的产生式。 例如:有产生式F→(E) A
输入串 abbcde#的最右推导的过程为:
S=>aAcBe=>aAcde=>aAbcde=>abbcde 自底向上分析的过程为: abbcde|-aAbcde|-aAcde|-aAcBe|-S
Page 5 第6章 自底向上优先分析 2013-7-5
6.1 自底向上分析方法概述
2. 遇到的问题
如何找出进行直接归约的“可归约串”(句柄)
Page 20
第6章 自底向上优先分析
2013-7-5
6.3.2 算符优先文法的定义
性质
① 在算符文法中任何句型都不包含两个相连的非终结符。
② 如果Ab或bA出现在算符文法的句型r中,其中A ∈VN,b ∈VT,则r中任何含b的短语必含有A(含A的短语不一定 含有b)
E E
+
T
E + TT × F
E
T
+
T (
E
T
F
F
( E )
如:(=),但是)=(不成立
E )
+ T
在句型(E)+T中得 ) > +, 在(E+T)中得 + > )
Page 16
第6章 自底向上优先分析
2013-7-5
按公认的计算顺序规定优先级和结合性,得到优先关系如下: ×,/的优先级高,遵循左结合,得×>×, ×>/, />/, />× +,-的优先级低,遵循左结合,得+>+, +>-, ->-, ->+ ‘(’, ‘)’规定括号的优先级大于括号外的运算符,小于括号内的 运算符,如…E + ( E + T )…,有 + < (,( < + 规定:‘#’<任何与它相邻的运算符, + × () i # 任何与它相邻的运算符>‘#’ + > < < > < > 运算对象 i 的优先级最高 × > > < > < > 优先关系表如右图所示: 说明:表中为空的元素表示:在该 文法的任何句型中都不会出现这两 个终结符相邻,所以他们无优先关 系,如不会有这样的表达式… ) i …
6.3.2 算符优先文法的定义
6.3.3 算符优先关系表的构造
6.3.4 算符优先分析算法
6.3.5 优先函数
6.3.6 算符优先分析法的局限性
Page 13
第6章 自底向上优先分析
2013-7-5
6.3.1 优先关系
优先关系只存在于句型中相邻出现的符号 相邻:算符优先分析法只考虑终结符之间的优先 关系,不考虑非终结符,所以两个终结符相邻指 其中没有其他的终结符(但可以有非终结符) 如:E+T×i,+和×相邻,×和i相邻,但+和i 不相邻 终结符间优先关系表示: 终结符a和b之间的优先关系表示如下: a<b 表示a的优先级低于b a=b 表示a的优先级等于b a>b 表示a的优先级高于b
Page 19
第6章 自底向上优先分析
2013-7-5
6.3.2 算符优先文法的定义
1.算符文法
定义:
设有上下文无关文法 G ,如果G中产生式的右部 没有两个非终结符相连,则称G为算符文法 (Operater Grammar),也称OG文法
例如:
表达式文法 E→E+E|E×E|(E)|i 是算符文法
Page 25 第6章 自底向上优先分析 2013-7-5
6.3.2 算符优先文法的定义
例 表达式文法 E→E+E|E×E|(E)|i 由E→E+E且E+ E×E得+<×
由E→E×E且E+ E+E得+>×
+和×的优先关系不唯一,所以不是算符优先文法 包含优先级和结合性的表达式文法是算符优先文法 E→E+T|T
Page 17
( ) i #
< > > <
< < = < > > > > > > < < < =
2013-7-5
第6章 自底向上优先分析
文法G:(1)EE+E (2)EE*E (3)Ei 步骤 栈 当前输入符 输入串剩余部分 (1) # i1 +i2*i3 # (2) #i1 + i2*i3 # (3) #E + i2*i3 # (4) #E+ i2 *i3 # (5) #E+i2 * i3 # (6) #E+E * i3 # (7) #E+E* i3 # (8) #E+E*i3 # 算符优先 (9) #E+E*E # (10) #E+E # (11) #E #
6.3 算符优先分析法
Page 3
第6章 自底向上优先分析
2013-7-5
6.1 自底向上分析方法概述
1.基本思想
从输入符号串开始,利用文法的产生式逐步进行 归约,试图归约到文法开始符号。
从语法树角度看,是以输入符号串作为语法树的 末端结点符号串,自底向上地构造语法树,使文 法开始符正好是该语法树的根。如果最终根结点 是开始符,则输入符号串是语言的一个句子,否 则不是。 自底向上分析过程实际上是一个不断进行直接归 约的过程。
Page 6 第6章 自底向上优先分析 2013-7-5
(1) S→aAcBe (2) A→b (3) A→Ab (4) B→d 判断输入串 abbcde# 是否为该文法的句子 用符号栈对输入符号串自底向上的分析过程为: 例 文法:
步骤 1) 2) 3) 4) 5) 6) 7) 8) 9) 10) 11)
B
b
T→T×F|F
…
P … a δ
E + T×F
得×>+
说明: δ 为ε 或C ,这样,a和b不在同一句柄中,a 先归约,所以a的优先级大于b
Page 24 第6章 自底向上优先分析 2013-7-5
6.3.2 算符优先文法的定义
3. 算符优先文法
定义: 设有一不含ε产生式的算符文法G,如果对任意两个终结 符对a,b之间至多只有一种优先关系成立,则称G是一个 算符优先文法(Operater Precedence Grammar), 即OPG文法。 说明: 两个终结符之间的优先关系是有序的,算符优先文法允 许a>b,b>a同时存在,而不允许有a>b,a<b,a=b 三种情况中的任两种同时存在。 例如:算符优先文法允许 + > ) ,) > +同时存在,不 允许 + > ) 和 + < ) 同时存在
算符优先分析法特别适用于表达式的分析 从表达式得到的启发:
① 表达式的归约顺序与运算顺序是一样的:通常算术 表达式的运算次序是先乘除后加减,同优先级时 服从左结合 E→E+T|T T→T×F|F F→(E)|i
Page 11
符号串E+T+T×F的归约过程为:
E+T+T×F |- E+T×F |- E+T |- E
(2)算符优先分析法
基本思想:只定义文法中终结符之间的优先关系 (不考虑非终结符),并由这种关系指导分析过 程。
不是规范归约。
优点:算符优先分析法分析速度快,特别适用于 表达式的分析。 缺点:不规范,常常要采用适当措施克服其缺点。
Page 10 第6章 自底向上优先分析 2013-7-5
6.3 算符优先分析法
Page 18 第6章 自底向上优先分析
动作 移近 归约(3) 移近 移近 归约(3) 移近 移近 归约(3) 归约(2) 归约(1) 接受
2013-7-5
6.3.1 优先关系
算符优先分析法
1. 文法要满足一定的条件,即为算符优先 文法 2. 根据文法按一定规则计算算符之间的优 先关系 3. 按优先关系进行算符优先分析
得+<×
说明:δ 为ε 或C,这样,a和b不在同一句柄中,b 先归约,所以a的优先级低于b。
Page 23 第6章 自底向上优先分析 2013-7-5
3)a > b 当且仅当G中有形如 A→…Bb… 的产生式, 且 B + …a 或 B + …aC A
文法E→E+T|T F→(E)|i 由E→E+T
优先分析法两类:
(1)简单优先分析法
基本思想:按一定原则定义文法中所有符号(终 结符和非终结符)之间的优先关系,按照这种关 系确定归约过程中的句柄并实行归约。 是一种规范归约。
优点:准确、规范。
缺点:效率低,不实用。
Page 9 第6章 自底向上优先分析 2013-7-5
6.2 自底向上优先分析法概述
第6章 自底向上优先分析法
学习目标:
掌握:构造算符优先关系表,进行算符 优先分析,构造优先函数 理解:算符优先文法,最左素短语
了解:简单优先分析法
Page 2
第6章 自底向上优先分析
2013-7-5
第6章 自底向上优先分析法
6.1 自底向上分析方法概述
6.2 自底向上优先分析方法概述
2013-7-5
6.1 自底向上分析方法概述
关键问题:如何在分析的过程中确定句柄
何时移进?栈顶未形成句柄 何时归约?栈顶形成句柄
常用自底向上分析法:
算符优先分析法(6.3)
LR类分析法(第7章)
Page 8
第6章 自底向上优先分析
2013-7-5
6.2 自底向上优先分析法概述
3.基本实现方法——“移进-归约”方法
引进一个先进后出的符号栈来存放符号; 对输入符号串自左向右进行扫描,并把当前输入符号下推 入栈中(移进),边移进边分析,一旦栈顶符号串形成某 个句型的句柄(为某产生式的右部)时,就用相应的非终 结符(产生式的左部)替换它(归约)。 重复这一过程,直到输入符号串的末端,此时如果栈中只 剩文法开始符号,则输入符号串是文法的句子,否则不是。
Page 4 第6章 自底向上优先分析 2013-7-5
6.1 自底向上分析方法概述
规范归约:
自底向上分析的移进-归约过程是自顶向下最右 推导的逆过程。而因为最右推导为规范推导,所以自 左向右的归约称为规范归约。
例 文法: (1) S→aAcBe (3) A→Ab (2) A→b (4) B→d
T→T×F|F
F→(E)|i
Page 26 第6章 自底向上优先分析 2013-7-5
6.3.3 算符优先关系表的构造
1.最左终结符集FIRSTVT
FIRSTVT(B)={b|B+ b… 或 B+Cb… },其 中b∈VT, B,C∈VN (ε 不属于FIRSTVT) 直观上说FIRSTVT(B)是由B推导出的最左终结符 (允许左边有一个非终结符)的集合。 与FIRST() = { a பைடு நூலகம்VT | * a......} 对照 文法符号串的开始符号集是由推导出的开头的终 结符(包括ε)组成
2013-7-5
第6章 自底向上优先分析
6.3 算符优先分析法
② 运算次序只与运算符(优先级,结合性)有关, 与运算对象无关
③ 可以根据运算符(终结符)的优先关系指导归 约过程,与运算对象(非终结符)无关
Page 12
第6章 自底向上优先分析
2013-7-5
6.3 算符优先分析法
6.3.1 优先关系
Page 14 第6章 自底向上优先分析 2013-7-5
优先关系定义的依据 在当前句柄中的符号优先于与其相邻的不在句 柄中的符号被归约,其优先关系大
同一句柄中的相邻符号同时被归约,其优先关 E 系相同
E→E+T|T E T F ( E ) + T
T→T×F|F
F→(E)|i
句型(E)+T的句柄 是(E) , 所以‘)’ >‘+’ ‘(’ = ‘)’
所以( = )
a
δ
b
说明:δ 为ε 或B,这样,a和b在同一句柄中同时归 约所以优先级相同。
Page 22 第6章 自底向上优先分析 2013-7-5
2)a < b 当且仅当G中有形如 A → …aB… 的产生式,
且 B + b… 或 B + Cb… A a B … P δ b …
文法E→E+T|T T→T×F|F F→(E)|i 由E→E+T T + T×F
不可能相邻出现在任何句型中的两个符号,无法比 较其归约的先后,故它们之间无优先关系
Page 15 第6章 自底向上优先分析 2013-7-5
注意:<,=,>是三种有序关系,与数学中的<,
= , > 不 同 , 所 以 a=b不 意 味 b=a , a>b不 意 味 b<a E E E→E+T|T T→T×F|F F→(E)|i
Page 7
符号栈 # #a #ab #aA #aAb #aA #aAc #aAcd #aAcB #aAcBe #S
输入符号串 abbcde# bbcde# bcde# bcde# cde# cde# de# e# e# # #
第6章 自底向上优先分析
动作 移进a 移进b 归约(A→b) 移进b 归约(A→Ab) 移进c 移进d 归约(B→d) 移进e 归 约 ( S→aAcBe ) 接受
Page 21
句型 E+T+T×F 短语有: E+T T×F E+T+T×F
第6章 自底向上优先分析 2013-7-5
2. 算符优先关系的定义
设G是一个不含ε产生式的算符文法,a和b是任意 两个终结符,A,B,C是非终结符,算符优先关系定 义如下: 1)a = b 当且仅当G中有形如 A→…ab… 或 A→…aBb… 的产生式。 例如:有产生式F→(E) A
输入串 abbcde#的最右推导的过程为:
S=>aAcBe=>aAcde=>aAbcde=>abbcde 自底向上分析的过程为: abbcde|-aAbcde|-aAcde|-aAcBe|-S
Page 5 第6章 自底向上优先分析 2013-7-5
6.1 自底向上分析方法概述
2. 遇到的问题
如何找出进行直接归约的“可归约串”(句柄)
Page 20
第6章 自底向上优先分析
2013-7-5
6.3.2 算符优先文法的定义
性质
① 在算符文法中任何句型都不包含两个相连的非终结符。
② 如果Ab或bA出现在算符文法的句型r中,其中A ∈VN,b ∈VT,则r中任何含b的短语必含有A(含A的短语不一定 含有b)
E E
+
T
E + TT × F
E
T
+
T (
E
T
F
F
( E )
如:(=),但是)=(不成立
E )
+ T
在句型(E)+T中得 ) > +, 在(E+T)中得 + > )
Page 16
第6章 自底向上优先分析
2013-7-5
按公认的计算顺序规定优先级和结合性,得到优先关系如下: ×,/的优先级高,遵循左结合,得×>×, ×>/, />/, />× +,-的优先级低,遵循左结合,得+>+, +>-, ->-, ->+ ‘(’, ‘)’规定括号的优先级大于括号外的运算符,小于括号内的 运算符,如…E + ( E + T )…,有 + < (,( < + 规定:‘#’<任何与它相邻的运算符, + × () i # 任何与它相邻的运算符>‘#’ + > < < > < > 运算对象 i 的优先级最高 × > > < > < > 优先关系表如右图所示: 说明:表中为空的元素表示:在该 文法的任何句型中都不会出现这两 个终结符相邻,所以他们无优先关 系,如不会有这样的表达式… ) i …
6.3.2 算符优先文法的定义
6.3.3 算符优先关系表的构造
6.3.4 算符优先分析算法
6.3.5 优先函数
6.3.6 算符优先分析法的局限性
Page 13
第6章 自底向上优先分析
2013-7-5
6.3.1 优先关系
优先关系只存在于句型中相邻出现的符号 相邻:算符优先分析法只考虑终结符之间的优先 关系,不考虑非终结符,所以两个终结符相邻指 其中没有其他的终结符(但可以有非终结符) 如:E+T×i,+和×相邻,×和i相邻,但+和i 不相邻 终结符间优先关系表示: 终结符a和b之间的优先关系表示如下: a<b 表示a的优先级低于b a=b 表示a的优先级等于b a>b 表示a的优先级高于b
Page 19
第6章 自底向上优先分析
2013-7-5
6.3.2 算符优先文法的定义
1.算符文法
定义:
设有上下文无关文法 G ,如果G中产生式的右部 没有两个非终结符相连,则称G为算符文法 (Operater Grammar),也称OG文法
例如:
表达式文法 E→E+E|E×E|(E)|i 是算符文法
Page 25 第6章 自底向上优先分析 2013-7-5
6.3.2 算符优先文法的定义
例 表达式文法 E→E+E|E×E|(E)|i 由E→E+E且E+ E×E得+<×
由E→E×E且E+ E+E得+>×
+和×的优先关系不唯一,所以不是算符优先文法 包含优先级和结合性的表达式文法是算符优先文法 E→E+T|T
Page 17
( ) i #
< > > <
< < = < > > > > > > < < < =
2013-7-5
第6章 自底向上优先分析
文法G:(1)EE+E (2)EE*E (3)Ei 步骤 栈 当前输入符 输入串剩余部分 (1) # i1 +i2*i3 # (2) #i1 + i2*i3 # (3) #E + i2*i3 # (4) #E+ i2 *i3 # (5) #E+i2 * i3 # (6) #E+E * i3 # (7) #E+E* i3 # (8) #E+E*i3 # 算符优先 (9) #E+E*E # (10) #E+E # (11) #E #
6.3 算符优先分析法
Page 3
第6章 自底向上优先分析
2013-7-5
6.1 自底向上分析方法概述
1.基本思想
从输入符号串开始,利用文法的产生式逐步进行 归约,试图归约到文法开始符号。
从语法树角度看,是以输入符号串作为语法树的 末端结点符号串,自底向上地构造语法树,使文 法开始符正好是该语法树的根。如果最终根结点 是开始符,则输入符号串是语言的一个句子,否 则不是。 自底向上分析过程实际上是一个不断进行直接归 约的过程。
Page 6 第6章 自底向上优先分析 2013-7-5
(1) S→aAcBe (2) A→b (3) A→Ab (4) B→d 判断输入串 abbcde# 是否为该文法的句子 用符号栈对输入符号串自底向上的分析过程为: 例 文法:
步骤 1) 2) 3) 4) 5) 6) 7) 8) 9) 10) 11)
B
b
T→T×F|F
…
P … a δ
E + T×F
得×>+
说明: δ 为ε 或C ,这样,a和b不在同一句柄中,a 先归约,所以a的优先级大于b
Page 24 第6章 自底向上优先分析 2013-7-5
6.3.2 算符优先文法的定义
3. 算符优先文法
定义: 设有一不含ε产生式的算符文法G,如果对任意两个终结 符对a,b之间至多只有一种优先关系成立,则称G是一个 算符优先文法(Operater Precedence Grammar), 即OPG文法。 说明: 两个终结符之间的优先关系是有序的,算符优先文法允 许a>b,b>a同时存在,而不允许有a>b,a<b,a=b 三种情况中的任两种同时存在。 例如:算符优先文法允许 + > ) ,) > +同时存在,不 允许 + > ) 和 + < ) 同时存在
算符优先分析法特别适用于表达式的分析 从表达式得到的启发:
① 表达式的归约顺序与运算顺序是一样的:通常算术 表达式的运算次序是先乘除后加减,同优先级时 服从左结合 E→E+T|T T→T×F|F F→(E)|i
Page 11
符号串E+T+T×F的归约过程为:
E+T+T×F |- E+T×F |- E+T |- E
(2)算符优先分析法
基本思想:只定义文法中终结符之间的优先关系 (不考虑非终结符),并由这种关系指导分析过 程。
不是规范归约。
优点:算符优先分析法分析速度快,特别适用于 表达式的分析。 缺点:不规范,常常要采用适当措施克服其缺点。
Page 10 第6章 自底向上优先分析 2013-7-5
6.3 算符优先分析法
Page 18 第6章 自底向上优先分析
动作 移近 归约(3) 移近 移近 归约(3) 移近 移近 归约(3) 归约(2) 归约(1) 接受
2013-7-5
6.3.1 优先关系
算符优先分析法
1. 文法要满足一定的条件,即为算符优先 文法 2. 根据文法按一定规则计算算符之间的优 先关系 3. 按优先关系进行算符优先分析
得+<×
说明:δ 为ε 或C,这样,a和b不在同一句柄中,b 先归约,所以a的优先级低于b。
Page 23 第6章 自底向上优先分析 2013-7-5
3)a > b 当且仅当G中有形如 A→…Bb… 的产生式, 且 B + …a 或 B + …aC A
文法E→E+T|T F→(E)|i 由E→E+T
优先分析法两类:
(1)简单优先分析法
基本思想:按一定原则定义文法中所有符号(终 结符和非终结符)之间的优先关系,按照这种关 系确定归约过程中的句柄并实行归约。 是一种规范归约。
优点:准确、规范。
缺点:效率低,不实用。
Page 9 第6章 自底向上优先分析 2013-7-5
6.2 自底向上优先分析法概述