第六章 自底向上优先分析(编译原理)

合集下载

编译原理(清华)第六章自底向上优先分析

编译原理(清华)第六章自底向上优先分析

按公认的计算顺序规定优先级和结合性,得到优先关系如下:
×,/的优先级高,遵循左结合,得×>×, ×>/, />/, />×
+,-的优先级低,遵循左结合,得+>+, +>-, - >-, - >+ ‘(’, ‘)’规定括号的优先级大于括号外的运算符,小于括号内的 运算符,如…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章-自底向上语法分析

编译原理第6章-自底向上语法分析
移进 移进 归约(P→b) 移进 归约(P→Pb) 移进 移进 归约(Q→d) 移进 归约 接受
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章自底向上优先分析法
第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讲自底向上优先分析法

编译原理课件第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章、自底向上优先分析法

第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)

编译原理第六章-自底向上优先分析法

编译原理第六章-自底向上优先分析法
38
(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 简单优先分析法

自底向上优先分析法

自底向上优先分析法
01
例如: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的证明
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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
盛 威 网 : 专 业 的 计 算 机 学 习 网 站
相关文档
最新文档