第六章 自底向上优先分析(编译原理)
编译原理(清华)第六章自底向上优先分析
按公认的计算顺序规定优先级和结合性,得到优先关系如下:
×,/的优先级高,遵循左结合,得×>×, ×>/, />/, />×
+,-的优先级低,遵循左结合,得+>+, +>-, - >-, - >+ ‘(’, ‘)’规定括号的优先级大于括号外的运算符,小于括号内的 运算符,如…E + ( E + T )…,有 + < (,( < + 规定:‘#’<任何与它相邻的运算符,
… 说明: δ 为ε 或C ,a,b不在同一句柄中,a先归约, 所以a的优先级大于b
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 求各非终结符的FIRSTVT集
(a)若产生式A→a…,或A→Ba…,则a∈FIRSTVT(A);
(b)若有产生式A→B…,且a∈FIRSTVT(B),则a∈FIRSTVT(A)
初值 E T F {} {} {}
第一次 第二次 {+} {×} {+ ,× }
编译原理第6章-自底向上语法分析
a b bcd e
S aP编c译Q原e理
aPcde
aPbcde 2022年3月22日
abbcd6e
基本思想
从输入符号串开始,通过重复查找当前句型的 “可归约串”并利用有关规则进行规约
若能规约为文法的识别符号,则表示分析成功,输 入符号串是文法的合法句子,否则有语法错误.
更关
1. 要求明确语法分析在编译过程所处的阶段和作用。 2. 明确语法分析的基本分析方法。 3. 掌握算符优先分析的方法。 4. 掌握构造算符优先分析表的方法,会使用算符优先分
析表分析句子。
编译原理
2022年3月22日
2
教学内容
6.1 自底向上分析法 6.2 算符优先分析法
编译原理
2022年3月22日
编译原理
2022年3月22日
21
• 性质1:在OG中任何句型都不含有两个相邻 的非终结符;
• 性质2:若Ab(bA)出现在OG的句型γ中, 其中A ∈ VN,b ∈ VT,则γ中任何含此b的 短语都必含有A。
编译原理
2022年3月22日
22
优先关系的定义
设G是一个算符文法,A、B、C是非终结符,a、b是终结符, 则算符优先关系定义为:
的顾客心 理特征 ,把握 他们的 消费需 求,在 美容院 为顾客 做服务 的时候 有针对 性
的沟通, 是做好 销售和 服务的 保障, 下面美 文网网 就跟大 家一起 分析一 下不同 年
龄段应该用什么样的话术和他们沟通 。
第一年龄段:18~25周岁的顾客
这
是一个年 轻的消 费群体 ,她们 多为冲 动型消 费,品 牌观念 很强。 只要他 们认定 了
第六章 自底向上优先分析法
练习:若有句型#abAbEcaEc#,则以下哪些可能是句柄() ab abA bAb bAbE ca caE aEc
定义6.2 设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 A A A …B b… … a B… …a δ b… P P δ b … … a δ
优先分析方法 简单优先分析方法 算符优分析方法 1、简单优先分析方法:对一个文法按一定原则求出该文 法所有符号即终结符和非终结符之间的优先关系,按 照这种关系确定归约过程中的句柄,它的归约过程实 际上是一种规范归约。 2、算符优先分析方法:只规定算符之间的优先关系,也 就是只考虑终结符之间的优先关系,由于算答优先分 析不考虑非终结符之间的优先关系,在归约过程中只 要找到句柄就归约,并不考虑归约到哪个非终结符名, 因而算符优先归约不是规范归约。
第六章 自底向上优先分析法
• 实现思想:对输入符号串自左向右进行扫描,并将输 入符逐个移入一个后进先出栈中,边移入边分析,一 旦栈顶符号串形成某个句型的句柄时,(该句柄对应 某产生式的右部),就用该产生式的左部非终结符代 替相应右部的文法符号串,这称为一步归约。重复这 一过程直到归约到栈中只剩文法的开始符号时则为分 析成功。 • 自底向上分析的移进—归约过程是自顶向下最右推导 的逆过程,也称为规范归约。
第6章自底向上优先分析法
6.1 概述
原理:在采用自左向右扫描,自底向上分析的前提下,该类 分析方法是从输入符号串入手,通过反复查找当前句 型的句柄(最左简单短语),并使用文法的产生式把 句柄归约成相应的非终结符来一步步地进行分析的。 最终把输入串归约成文法的开始符号,表明分析成功。 所以,任何自底向上分析方法的关键就是要找出当前 句型的句柄,然后根据产生式判别将它归约成什么样的非 终结符号。
解:归约过程见分析过程串为E+E,若只从移进-归 约的角度讲,栈顶已出现了产生式(1)的右部,可以进行归约, 但从通常四则运算的习惯来看应先乘后加,所以应移进,这就 提出了算符优先的问题。
例6.5:下面给出一个表达式的文法为: E→E+E|E-E|E*E|E/E|E↑E|(E)|i
(
a )
. <
=
. < . <
. >
. >
. >
. >
=
.
Z bM b
( L Ma )
构造优先矩阵的一种简便方法:
STEP 1 对每个非终极符W求下面两种集合: + HEAD(W)= {S︱W S…,S∈(VNUVT)} + LAST(W)={S︱W …S,S∈(VNUVT)} STEP 2 对每个符号对Si,Sj填写优先关系矩阵元素(其中W,V∈VN): M[Si,Sj]= ﹒ = ,如果有U→ … SiSj …
这种方法的基本思想为: 首先规定文法符号之间的优先关系,然后再利用这种关系, 通过比较句型中两个相邻的符号之间的优先关系来确定句型的 “句柄”并进行归约。
二、相邻关系:
设Si和Sj是文法G的任意两个符号,那么它们在句型中可相 邻出现的充要条件是必须满足下列条件之一:
编译原理课件第5讲自底向上优先分析法
自底向上分析法中的关键概念
项目集
具有相同前缀的项目集合,用 于处理同一状态的LR分析表规 约/移进决策。
项目
由产生式的左部和右部和一 个·组成的表达式,表示在推导 过程中的一个状态。
SLR(1)文法
在LR(0)文法的基础上增加了一 些限制,保证文法正确性和SLR 语法分析表可构建性。
构建LR(0)自动机
提供错误的正常处理方法,使得编译系统在实现 上更加稳定性和健壮性。
LR(0)自动机的优化
项目集家族
在LR分析表构造中,由相同前缀的LR(0)项目序列可以合 并,这样可以大大减少分析表的大小。
闭包和转移函数
可以通过特定的算法实现自动机状态图中的闭合和函数 构建,获得更好的可读性和便于维护性。
总结
自底向上分析法是比自顶向下分析更加高效,是编译器中不可或缺的分析工具。本课件详细介绍了自底向上分析中 的关键概念、LR(0)自动机的构建方法及SLR(1)分析表的构建方法,并对LR(0)自动机进行了优化。希望本课件能对编 译原理相关领域的初学者和从业人员有所帮助。
从自顶向下到自底向上— —编译原理课件第5讲
本课件介绍从自顶向下到自底向上优先分析法,探索两种分析法的优缺点、 自底向上分析法中的核心概念、构建LR(0)自动机及SLR(1)分析表和使用LR(0)自 动机分析的过程。
自底向上优先分析法概述
从上到下
从下到上
自顶向下分析是按照语言的文法规则,从语言符号的总 自底向上分析是由输入符号串尽可能多地向文法符号字 称开始,通过不断扩展,直到构造出整个输入串的过程。 符串的总称转化的过程,直到最后转化为起始符号。
1
状态
用一个状态编号来表示从文法的某个符号推导到某一句柄的解析过程。
第06章、自底向上优先分析法
移进 归约 e aAcBe (1)
e B c A a #
归约产生式: 符号栈:
a #
b a #
A a #
b A a #
A a #
c A a #
7
S #
上述自下而上分析法就是对栈的“移进-归
约”法,更进一步的,也就是对句子的一个
规范归约过程——何为规范归约呢?
(回顾短语、句柄、推导、归约)
8
算法应考虑的问题
• 何时移进?
• 在每一步中如何选择子串进行归约?
• 算法是否能够终止?
• 算法是否快速? • 算法是否能够处理所有的情况?
11
自底向上的分析算法
• 优先分析法
-简单优先分析法 -算符优先分析法
• LR分析
-LR(0) -SLR(1) -LR(1)
14
6.2 简单优先分析法
• 对一个文法按一定原则求出该文 法所有符号(终结符和非终结符) 之间的优先关系,按照这种关系 确定归约过程中的句柄。
i*i#
*i# *i# i# # # # #
+<i,移进
+<i>*,归约 +<*,移进 *<i,移进 *<i>#,归约 +<*>#,归约 #<+>#,归约 接受
28
二、算符文法(OG)的定义
• 定义: 设有一文法G,如果G中没有形如 A…BC…的产生式,其中B和C为非终结符,则 称G 为算符文法(也称OG—Operator Grammar)。
+ * /
+ - * /
根据FIRSTVT(P)的定义,按下面的规 则来构造: (1) 若有产生式P a…或P Qa… ,则 a FIRSTVT(P) (2) 若a FIRSTVT(Q),且有产生式 P Q…,则 a FIRSTVT(P)
编译原理第六章-自底向上优先分析法
(E’, #)
39
40
+*^ i ( )#
E’
1
E11111
T
1111
F
111
P
11
FIRSTVT(E’) = {#} FIRSTVT(E) = {+, *, ^, i,(} FIRSTVT(T) = {*, ^, i,(} FIRSTVT(F) = { ^, i,(} FIRSTVT(P) = { i,(}
13
6.3 算符优先分析法
某些文法具有“算符”特性 表达式运算符(优先级、结合性) 人为地规定其算符的优先顺序,即给出优先级别 和同一级别的结合性
只考虑算符之间的优先关系来确定句柄
14
6.3.1 直观算符优先分析法
文法G[E]:E→E+E|E-E|E*E|E/E|EE|(E)|i
(1) 优先级最高,右结合
24
(P, i) (P, () (F, ^) (T, *) (E, +) (E’, #)
25
(F, i) (P, () (F, ^) (T, *) (E, +) (E’, #)
26
(T, i) (P, () (F, ^) (T, *) (E, +) (E’, #)
27
(E, i) (P, () (F, ^) (T, *) (E, +) (E’, #)
S=>aAcBe=>aAcde=>aAbcde=>abbcde 由此我们可以构造它的逆过程即归约过程。
5
自底向上分析的关键问题: 如何确定句柄。
6
自底向上优先分析法慨述 简单优先分析 算符优先分析
7
6.2 简单优先分析法
自底向上优先分析法
例如:E+T*F。只需要知道*的优先级高于+,就可以知道T*F时句柄。
02
在一般的文法中,终结符的地位相当于操作符。
03
算符优先分析技术基本思想
01
定义6.4:如果文法中没有形状如
03
的规则,则该文法称为算符文法。
02
U::= VW
04
其中, U,V和W均为非终结符。
算符文法
定理6.6 如果TU出现在句型中,其中T为终结符,U为非终结符,那么包含T的短语也必然包含U.
简单优先技术只适应于简单优先文法。实际上,一般的程序设计语言的文法都不是简单优先文法。比如四则运算表达式的文法。
01
应用优先技术的困难与克服
识别过程:从左到右地扫描输入符号。已经扫描或归约得到的符号被存放在一个栈中。
01
每次扫描的时候,将当前符号a和栈顶符号S相比较。如果S ► a表示已经碰到了一个句柄的尾。然后在栈里面向前(下)找,直到找到句柄的头。此时找到右部为该句柄的规则进行归约。
b A b
a
S
b◄a a►b
b A b
S
( B
b◄ ( ( 〓B B►b
优先矩阵
可以将优先关系填写到一个矩阵,得到优先矩阵。(将矩阵作为关系的表示形式)
S
A
B
a
b
(
)
S
A
=
=
B
►
►
a
►
►
(
◄
=
◄
◄
b
=
◄
◄
)
►
►
=
# b ( ( a a ) a ) b #
◄ ◄ ◄ ◄ ►
定理6.4的证明
第6章自底向上优先分析法
第6章⾃底向上优先分析法⾃底向上分析⽅法,也称移进-归约分析法,粗略地说它的实现思想是对输⼊符号串⾃左向右进⾏扫描,并将输⼊符逐个移⼊⼀个后进先出栈中,边移⼊边分析,⼀旦栈顶符号串形成某个句型的句柄时,(该句柄对应某产⽣式的右部),就⽤该产⽣式的左部⾮终结符代替相应右部的⽂法符号串,这称为归约。
重复这⼀过程直到归约到栈顶中只剩⽂法的开始符号时则为分析成功,也就确认输⼊串是⽂法的句⼦。
本章将在介绍⾃底向上分析思想基础上,着重介绍算符优先分析法。
例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由此我们可以构造它的逆过程即归约过程。
先设⼀个后进先出的符号栈,并把句⼦左括号”#”号放⼊栈底。
对上述分析过程也可看成⾃底向上构造语法树的过程,每步归约都是构造⼀棵⼦树,最后当输⼊串结束时刚好构造出整个语法树。
在上述移进-归约或⾃底向上构造语法树的过程中,考虑⼏个问题:u 何时移进?u 何时归约?u 将哪个字符串归约?当⼀个⽂法⽆⼆义性时,那么它对⼀个句⼦的规范推导是唯⼀的,规范规约也必然是唯⼀的。
因⽽每次归约时要找当前句型的句柄,也就是说,任何时候栈中的符号串和剩余的输⼊串组成⼀个句型,当句柄出现在栈顶符号串中时,则可⽤句柄归约,这样⼀直归约到输⼊串只剩结束符,⽂法符号栈中只剩开始符号。
由此可见,⾃底向上分析的关键问题是在分析过程中如何确定句柄,即如何知道何时在栈顶符号串中已形成某句型的句柄。
然⽽⾃底向上的分析算法很多,我们仅在本章和第7章介绍⽬前常⽤的算符优先分析和LR类分析法。
6.1 ⾃底向上优先分析法概述优先分析法⼜可分简单优先法和算符优先分析法。
编译原理自底向上优先分析课件
CHAPTER 02
自底向上优先分析基础
文法和语言
定义
文法是描述语言的语法结构的形式化工具,由一组产生式构成。语言是文法产生的所有句 子的集合。
上下文无关文法
在编译原理中,常用上下文无关文法来描述程序设计语言的语法结构。这种文法的产生式 形式为A→β,其中A是非终结符,β是终结符和非终结符组成的字符串。
随着量子计算的快速发展, 如何设计适用于量子计算环 境的编译器成为一项迫切需 求。自底向上的优先分析方 法有望在量子计算环境下的 编译器设计中发挥重要作用。
跨平台和跨语言 支持
为了满足不同平台和语言的 需求,未来研究可以关注如 何使自底向上优先分析方法 更好地支持跨平台和跨语言 编译。
THANKS
CHAPTER 04
LALR分析算法
LALR分析表的构建
01
02
03
步骤一
步骤二
步骤三
构造文法的LR(1)分析表。LALR分析 算法首先会为给定的上下文无关文法 构造LR(1)分析表。该分析表包含了所 有可能的状态和对应的动作(移进、 规约或接受)。
合并同心集。在LR(1)分析表的基础上, LALR分析算法会识别并合并所谓的“ 同心集”(即具有相同闭包和goto函 数的项集)。这一步骤有效地减少了 状态的数量,从而使得分析表更小、 更简洁。
结构。该表根据当前分析状态和输入符号,指导归约操作的进行,提高
了分析效率。
本课件的内容和结构
主要内容
本课件将详细介绍自底向上优先分析方法的基本原理、归约过程、分析表的使用 以及相关的优化技术。通过实例和案例,展示这种方法在编译器设计中的应用。
结构安排
首先介绍编译原理概述和自底向上优先分析方法的基本原理,然后深入讲解归约 过程和分析表的使用,最后探讨相关的优化技术和应用案例。课件将结合理论和 实践,使读者更好地理解和掌握自底向上优先分析方法。
《编译原理》第6章自下而上语法分析
编译原理武汉大学计算机学院编译原理课程组自上而下语法分析·基本思想·存在的问题·解决方法·LL(1)方法·递归子程序法消除左递归FIRST集、FOLLOW集·LL(1)文法递归子程序的构造LL(1)分析表的构造6.1 自下而上语法分析1.自下而上语法分析的基本思想从输入的符号串开始,利用文法的产生式步步向上归约,试图归约到文法的识别符号。
如果从语法树的角度看,自下而上分析的过程是以输入符号串作为末端结点符号串,向着根结点的方向往上构造语法树,使识别符号正好是该语法树的根结点。
相应于高级语言的编译过程,自下而上语法分析就是从该高级语言文法的源程序或与其等价的单词串出发,试图归约得到该文法的开始符号——<程序>。
6.1 自下而上语法分析3.自下而上语法分析遇到的基本问题例如,对文法G[S]:S→aAcBeA→bA→AbB→d分析符号串abbcde。
1.短语、直接短语与句柄6.2 短语和句柄则称句型xuy 中的子串u 为句型xuy (相对于非终结符号U )的短语。
设有文法G[Z],w=xuy 是它的一个句型,如果有Z *⇒xUy +⇒且U u U ⇒u则称u为句型xuy的直接(简单)短语。
特别地,如果前述条件中U +⇒u为句型的最左直接(简单)短语称为句柄。
6.2 短语和句柄例:设有文法G[S]:S→ABA→Aa|bBB→a|Sb请给出句型baabaab的所有短语、直接短语和句柄。
6.2 短语和句柄2.短语、简单(直接)短语、句柄与语法树的关系语法树子树的末端结点符号串即是语法树所描述句型(相对于子树的根)的短语;简单子树(只有父子两代)的末端结点符号串即是直接短语。
最左简单子树的末端结点符号串即是句柄。
6.2 短语和句柄例:设有文法G[S]:S→ABA→Aa|bBB→a|Sb请给出句型baabaab的所有短语、直接短语和句柄。
第 6 章自学内容第 6 章作业P100 6.8求下列句型的所有短语、简单(直接)短语和句柄。
06 第六章 自底向上分析-优先分析法
de# 规约(A→Abc)
de# 移进 e# 规约(B→d) e# 移进 # 规约(S→aABe) # 接收
6.1 自底向上分析法的概述
分析过程:
(1)符号栈:我们建立的这个符号栈是一个后进先出的栈,即 每次检查的都是位于栈顶的符号,通过观察栈顶的符号来判 断输入串分析过程中采取的动作。
符号进栈时每次只能移进一个符号;
6.3.1 优先关系的判断
1.优先关系符号及其含义
首先,我们给出优先关系的表示符号及其含义,如表6-2所示。 假设a和b是文法中任意的两个文法符号(可以为终结符号,也 可以为非终结符号),a和b是在文法的句型中可能会处在相邻 位置上的两个文法符号。下面我们给出三种优先关系的表示 符号:· >,<· (注意:· 和= >,<· 和=符号的含义和数学中的>, <和=符号的含义是不同的)。
(5)重复上述步骤(2)、(3)、(4)直到归约完输入符号串,栈中只 剩下文法的开始符号为止。
6.3.3 简单优先分析法
例6-1 设文法G为: S→aABe 步骤 A→Abc (1) A→b (2) B→d (3)
(4) (5) (6) (7) (8) (9) (10) (11)
表6-1 用移进-规约方法对输入串abbcde# 的分析过程
且B=>+Y…。
(3)若有X=Y,当且仅当G中存在产生式规则A→…XY…。 (4)增加语句括号“#”的优先级规则:“#”的优先级要<· 所有的 文法符号;而所有的文法符号·>“#”;但是在构造文法的符号优 先关系的时候只需要考虑与句子括号“#”可能相邻的文法符号。
6.3.1 优先关系的判断
例6-3 考虑文法G[S], 求该文法的优先关系。 →bAb (1) =关系 S b = A = b b = A A = b (= B A ( = B A=a a=) B A= a = ) A→(B A→a B→Aa)
编译原理自底向上优先分析
(E: 则有(<FIRSTVT(E)
(4)求>关系
E#: 则有LASTVT(E)>#
E+:则有LASTVT(E)>+
T*: 则有LASTVT(T)>*
P^:则有LASTVT(P)>^
E): 则有LASTVT(E)>)
23
(0)E’#E# (1) EE+T (2)ET
(3)TT*F
(4)TF (5)FP^F|P (6)P(E) (7)Pi
➢ 性质1:在算符文法中,任何句型都不包含两个 相邻的非终结符。
➢ 性质2:如果Ab或(bA)出现在算符文法的句型 中。其中,A为非终结符, b为终结符, 则句型中 任何含b的短语必含有A.
17
6.3.2 算符优先文法的定义
定义3 设有一个不含产生式的算符文法G,如果对任意两
个终结符对a、b之间至多只存在<、>、=三种关系中的
( (, ( a, ( A
(3)求 关系
由SbAb, A=>…), A=>…B, A=>a, 可得:
) b, a b, B b
由BAa), A=>…), A=>a, A=>…B,可得:
) a, a a, B a
8
增:S’#S#
例:文法G[S]:SbAb A(B|a BAa)
文法的简单优先关系矩阵
S b A(B a)#
B=+=>Y… (3)X Y:当且仅当存在规则A…BY…,且
B=+=>…X *
7
例:文法G[S]:SbAb A(B|a BAa)
分析优先关系:
(1)求 关系
b A, A b, ( B, A a, a )
(完整word版)编译原理第六章答案
第6章自底向上优先分析第1题已知文法G[S]为:S T a|A |(T)T,S|S(1)计算 G[S]的 FIRSTVT 和 LASTVT。
(2)构造G[S]的算符优先关系表并说明G[S]是否为算符优先文法。
⑶计算G[S]的优先函数。
(4)给出输入串(a,a)#和(a,(a,a))#的算符优先分析过程。
答案:文法展开为:S^aS T AS T (T)T T T,ST T S猱符优先关系表:友情提示:记得增加拓广文法S' T#S#,所以# FIRSTVT(S) , LASTVT(S) # 。
Success!对输入串(a,(a,a) ) #的算符优先分析过程为:栈〔STACK) 为询字符WH恋)剩余输入笊(INPUT_STRING)动作〔ACTION)岸n a.(a.a))# e ill * a 伽)># itove iiima{aa)> Reduce: S—q <a.a)># Move iii( a.a))# Move iiia 讪Move iiia))# Reduce: S—日#(N,(N i a))# \tove iii#(N.(N a Move m粼屈)Reduce: S—R粼N(N.N)Reduce; T—丁占)h【ovE iii)#Reduce: S—*(T) #(N,N )#Reduce: T—*T,S #(N )Move iiiKN) ##Reduce: S—"(T) Success!第2题已知文法G[S]为:S T a|A |(T)T,S|S(1)给出(a,(a,a))和(a,a)的最右推导,和规范归约过程。
⑵ 将⑴和题1中的⑷进行比较给出算符优先归约和规范归约的区另叽答案:(1 ) (n・a)的授右推导过程为: sn(T) =(T.S)=^(T.a)=>(S.a)=>(a.a)(a.(a.a))的最右推导过程为:S=>(T)O(T.S)=(T.(T))=>(r.(r.s))=>(T.(T.a))=>(T.(S.a))=>(T-(a.a))=>(S.(a.a))=>(a.(a.a))(a.(a.a))的规范归约过程:(冇)的规范!H约过阻(2)非终结符无关,只需知道把当前可归约串归约为某一个非终结符,不必知道该非终结符的名字是什么,因此去掉了单非终结符的归约。
《编译原理》第6章 (1)
…a
a >b
24
由定义直接构造:
预备知识:
定义两个集合:
+ + FIRSTVT(B)={b|B b…或B Cb…},
+ + LASTVT(B)={b|B …b或B …bC}
即最后一个终结符 即第一个终结符
25
三种优先关系的计算为: a)≡关系 条件:A…ab... A…aBb… b) <关系 条件:A…aB… bFIRSTVT(B) 结论:a<b c) >关系 条件:A…Bb… aLASTVT(B) 结论:a>b
20
定义:设G是不含产生式的算符文法,若G中任何两个终 结符号之间至多有一种优先关系存在,则G是一个算符 优先文法OPG。 注:不允许有ab、 a≡b、 ab 中的两种同时存在 要完成运算符间优先级的比较,最简单的办法是先定义 各种可能相继出现的运算符的优先级,并将其表示成矩 阵形式,即得到一个算符优先关系表。在分析过程中通 过查询矩阵元素而获得算符间的优先关系。
了解算符优先分析法的优缺点和实际应用中的局限性
2
【学习指南】
算符优先分析法是自下而上语法分析的一种,它的算
法简单、直观、易于理解,故通常作为学习其它自下 而上语法分析的基础。在学习前,应复习有关语法分 析的知识,如:什么是语言、文法、句子、句型、短 语、简单短语、句柄、最右推导、规范归约基本概念
S
A
A→Ab
最右推导 句型
abbcde
句柄 归约用规则 b A→b
S→aAcBe
aAbcde
Ab
d
A→Ab
B→d
A
A→b
B
B→d
aAcde
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
6
移进- 2.实现方式-“移进-归约”方式 实现方式- 移进 归约”
a+b……#
盛 威 网 : 专 业 的 计 算 机 学 习 网 站
【注】初态时栈内仅有栈底符“#”, 初态时栈内仅有栈底符“ 读头指在最左边的单词符号上。 读头指在最左边的单词符号上。
#
语法分析程序 语法表
输出带
自左至右把输入串的符号一个一个移进栈 自左至右把输入串的符号一个一个移进栈,在移 移进 进过程中不断查看栈顶符号串, 进过程中不断查看栈顶符号串,一旦形成某个句型的 句柄时,就将此句柄用相应的产生式左部替换( 句柄时,就将此句柄用相应的产生式左部替换(归 ),若再形成句柄 就继续替换, 若再形成句柄, 约),若再形成句柄,就继续替换,直到栈顶不再形 成句柄为止。然后继续移进符号, 成句柄为止。然后继续移进符号,重复上面的过程直 到栈顶只剩下#和文法的开始符号,输入串读完为止, 到栈顶只剩下#和文法的开始符号,输入串读完为止, 这样就认为识别了一个句子。 这样就认为识别了一个句子。
7
3.语法分析程序执行的动作
移进 读入下一个输入符号并压入栈内,读头后移;
盛 威 网 : 专 业 的 计 算 机 学 习 网 站
归约 检查栈顶若干个符号能否进行归约,若能,就 以产生式左部替代该符号串,同时输出产生式; 接受 移进-归约的结局是栈内只剩下栈底符号和文 法开始符号,读头也指向语句的结束符; 报错 当识别程序察觉一个错误,因此输入符号串不 是句子而无法继续识别工作时,调用一个出错处理 子G[S]: : 文法 (1) S → bAb (2) A → (B|a (3) B → Aa)
盛 威 网 : 专 业 的 计 算 机 学 习 网 站
如何确定优先关系? 如何确定优先关系? 1.求 . 关系: 1.求=关系: (1): 由(1):b=A A=b (2): 由(2):(=B (3): 由(3):A=a a=)
15
§6.2 简单优先分析法
6.2.1 优先关系
盛 威 网 : 专 业 的 计 算 机 学 习 网 站
一.优先关系的符号表示
. 表示X X=Y表示X和Y的优先关系相等
X . Y表示X的优先性比Y的优先性大 > 表示X的优先性比Y
. 表示X的优先性比Y X < Y表示X的优先性比Y的优先性小
16
二.优先级别定义
盛 威 网 : 专 业 的 计 算 机 学 习 网 站
进行一次归约
输入串扫描完否? Y 栈中仅有开始符号? 输入串合法,报告分析报告 出口
no no
error
移进移进-归约过程
10
说明: 说明: 例子的分析过程是一步步地归约当前句型 当前句型的句柄 (1)例子的分析过程是一步步地归约当前句型的句柄
12
§6.1 自底向上优先分析概述
一.优先分析法的类别
盛 威 网 : 专 业 的 计 算 机 学 习 网 站
1.优先分析器( Parser) 1.优先分析器(Precedence Parser 优先分析器 •简单优先分析法 简单优先分析法 •算符优先分析法 算符优先分析法 2.LR分析器 2.LR分析器
8
例1:文法 :文法G[S]: : (1) S → aAcBe (2) A → b (3) A → Ab (4) B → d
盛 威 网 : 专 业 的 计 算 机 学 习 网 站
步骤 符号栈
1) ) 2) ) 3) ) 4) ) 5) ) 6) ) 7) ) 8) 8) # #a #ab #aA #aAb #aA #aAc #aAcd
盛 威 网 : 专 业 的 计 算 机 学 习 网 站
A … … s t ...
A … … s t … ...
A … … s t … ...
1.s 1.s在句柄 中 ,而 t不 在句柄中
2.s 2.s与t均 在句柄中
3.s 3.s不在句柄 中,而t在句 柄中
对于上述情况,我们规定: 对于上述情况,我们规定: 情况1 s>t;情况2 s=t;情况3 情况1:s>t;情况2:s=t;情况3:s<t
5
分析过程是重复以下步骤: 分析过程是重复以下步骤:
盛 威 网 : 专 业 的 计 算 机 学 习 网 站
1、找出当前句型的句柄 x (或句柄的变形) 或句柄的变形) 2、找出以x为右部的规则X→x 找出以x为右部的规则X 3、把x规约为X,产生语法树的一枝 规约为X
关键:找出当前句型的句柄x 或其变形),这不是很容易。 关键:找出当前句型的句柄x(或其变形),这不是很容易。 ),这不是很容易
a < = < > > > ) # > >
S S b A ( B a ) #
18
盛 威 网 : 专 业 的 计 算 机 学 习 网 站
另外,还有一种情况,就是s 另外,还有一种情况,就是s和t均不在句柄中,那 均不在句柄中, 么一定存在某句型使得它们进入上述三种情况之一。 么一定存在某句型使得它们进入上述三种情况之一。 在任何句型中都不可能相邻出现, 若s和t在任何句型中都不可能相邻出现,则我们 规定二者无关系 无关系。 规定二者无关系。 注意,这种优先关系是不对称 注意,这种优先关系是不对称的! 不对称的
11
(2)未真正解决句柄的识别
上述分析过程是怎样识别句柄 上述分析过程是怎样识别句柄的,主要看栈顶符号串 识别句柄的 是否形成规则的右部。 是否形成规则的右部。
盛 威 网 : 专 业 的 计 算 机 学 习 网 站
这种做法形式上是正确的,但在实际上不一定正确。 这种做法形式上是正确的,但在实际上不一定正确。 举例的分析过程可以说是一种巧合。 举例的分析过程可以说是一种巧合。 因为不能认为: 因为不能认为: 对句型 xuy 而言 若有U→u, 就断定u是简单短语, 若有U→u,即U⇒u 就断定u是简单短语, * u 就是句柄,而是要同时满足 Z⇒ xUy 就是句柄,
20
盛 威 网 : 专 业 的 计 算 机 学 习 网 站
我们可以通过两个相邻符号S 我们可以通过两个相邻符号SiSi+1之间的关系 来找到句柄: 来找到句柄:
–SiSi+1在句柄内:必然有规则U→ SiSi+1… S 在句柄内:必然有规则U→ U→…S –Si在句柄内部,但是Si+1在句柄之后,必然有规则 S 在句柄内部,但是S 在句柄之后, U→…S 且存在规范句型…US …。 U→…Si,且存在规范句型…USi+1…。 –如果Si+1在句柄内,而Si在句柄外,那么必然存在 如果S 在句柄内, 在句柄外, 如果 规范句型…S 规范句型 SiU…,且有U→Si+1…。 ,且有U→S 。
14
三.算符优先分析法 基本思想: 基本思想:只定义文法中终结符之间的优先 关系(不考虑非终结符), ),并由这种关系指 关系(不考虑非终结符),并由这种关系指 导分析过程
盛 威 网 : 专 业 的 计 算 机 学 习 网 站
不是规范归约 算符优先分析法分析速度快, 算符优先分析法分析速度快,特别适用于表 达式的分析。缺点是不规范, 达式的分析。缺点是不规范,常常要采用适 当措施克服其缺点。 当措施克服其缺点。
. 对任何X 若文法开始符号S (4)对任何X,若文法开始符号S + X…,则#< X; ,
若有S 若有S + …X,则X . #。 X >
17
三.从语法树判别优先性
• 设G是已化简的文法,s,t∈V,若G中存在规范句型 是已化简的文法,s,t∈ st…, s,t与 α=…st , 则s,t与α的句柄之间的关系必有下述情况 st 之一: 之一:
4
引言
注意:输入串在这里是指从词法分析器送 来的单词符号组成的二元式的有限序列。
1.基本思想
盛 威 网 : 专 业 的 计 算 机 学 习 网 站
自下而上的语法分析过程是一个最左归约的过程, 自下而上的语法分析过程是一个最左归约的过程 , 从输入串开始, 朝着文法的开始符号进行归约, 从输入串开始 , 朝着文法的开始符号进行归约 , 直到到达文法的开始符号为止的过程。 直到到达文法的开始符号为止的过程。 从语法树角度看, 从语法树角度看 , 是以输入符号串作为语法树的 末端结点符号串, 自底向上地构造语法树, 末端结点符号串 , 自底向上地构造语法树 , 使文 法开始符号正好是该语法树的根。 法开始符号正好是该语法树的根 。 如果最终根结 点是开始符号, 则输入符号串是语言的一个句子, 点是开始符号 , 则输入符号串是语言的一个句子 , 否则不是。 否则不是。 自底向上分析过程实际上是一个不断进行直接归 约的过程。 约的过程。
对输入串abbcde#的移进 归约分析过程 的移进-归约分析过程 对输入串 的移进
a b b c d e 符号串abbcde是否是G[S]的句子 符号串abbcde是否是G[S] abbcde是否是G[S]的句子 S⇒ aAcBe ⇒ aAcde ⇒ aAbcde ⇒ abbcde ⇒
9
顺序扫描输入符号并依次移进 栈 栈顶部的符号串是否构成一句 柄? Y N
输入符号串
abbcde# bbcde# bcde# bcde# cde# cde# de# e# e# # #
动作
移进 移进 归约(A→ 归约 →b) 移进 归约(A→ 归约 →Ab) 移进 移进 归约(B→ 归约(B→d) 移进 归约(S →aAcBe) 接受
S A A B
9) #aAcB ) 10) #aAcBe ) 11) #S )
2
教学内容
盛 威 网 : 专 业 的 计 算 机 学 习 网 站
第一节 第二节
自底向上优先分析概述 简单优先分析法
3
盛 威 网 : 专 业 的 计 算 机 学 习 网 站