自底向上优先分析法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
+ 2、有形如 U→…Si W…的产生式,且有 W
Sj…
+ 3、有形如 U→…VSj…的产生式,且有 V …S i + …S 和W + S … 4、有形如 U→…VW…的产生式,且有 V j i
武汉理工大学计算机科学系陈天煌
1、有形如 U→… SiSj…的产生式
+ α Uβ α…S S …β S i j
接受:分析成功。 报错:处理错误。
武汉理工大学计算机科学系陈天煌
6.2 简单优先方法
一、概述
简单优先方法是一种简单直观,广为使用的自底向上的分 析方法。这种方法特别有利于分析表达式。 大家知道,在做算术式的四则运算时,为了保证计算过程 和结果的唯一性,人们作了统一的四则运算法则的规定。 这个法则的主要方面就是规定了运算符之间的优先顺序。 即先乘除后加减,同优先级的运算符先左后右(左结合 律)。还有先括号内后括号外的规定。 简单优先方法就是根据上述算术运算的计算原理而设计的 一种语法分析方法。
动作 归约 移进 归约 归约 移进 移进 归约 归约 归约 接受
E→E +T |T T→T*F | F F→i| (E)
武汉理工大学计算机科学系陈天煌
分析过程图表:
步骤 1 2 3 4 5 6 7 8 9 分析栈 输入串 # (i+i)*i# #( i+i)*i# #(i +i)*i# #(F +i)*i# #(T +i)*i# #(E +i)*i# #(E+ i)*i# #(E+i )*i# #(E+F )*i# 动作 移进 移进 归约 归约 归约 移进 移进 归约 归约 步骤 10 11 12 13 14 15 16 17 18 19 分析栈 输入串 #(E+T )*i# #(E )*i# #(E) *i# #F *i# #T *i# #T* i# #T*i # #T*F # #T # #E # 动作 归约 移进 归约 归约 移进 移进 归约 归约 归约 接受
E→E +T |T T→T*F | F F→i| (E)
武汉理工大学计算机科学系陈天煌
步骤 10 11 12 13 14 15 16 17 18 19
分析栈 #(E+T #(E #(E) #F #T #T* #T*i #T*F #T #E
输入串 )*i# )*i# *i# *i# *i# i# # # # #
=
.
(
L
Ma ) a
武汉理工大学计算机科学系陈天煌
构造优先矩阵的一种简便方法:
STEP 1 对每个非终极符W求下面两种集合: + HEAD(W)= {S︱W S…, S∈(VN∪VT)} + LAST(W)={S︱W …S, S∈(VN∪VT)} STEP 2 对每个符号对Si,Sj填写优先关系矩阵元素(其中W,V∈VN): M[Si,Sj]= ﹒ = ,如果有U→ …SiSj… ﹒ ,如果有U→…SiW…,且有Sj∈HEAD(W) M[Si,Sj]= ﹤ M[Si,Sj]= ﹒ ﹥ ,如果有U→…VW…,且有Si∈LAST(V) 和Sj ∈HEAD(W) ∪ {W}
武汉理工大学计算机科学系陈天煌
3、分析算法的要点: ﹥ Sj+1的Sj; STEP 1:找出第一个使Sj ﹒ ﹒ STEP 2:从Sj开始往回(左)找第一个使Si-1 ﹤ Si的Si; STEP 3: 用SiSi+1…Sj去查产生式表的右部,并用相 应的左部符号代替(归约)句柄Si…Sj,若查不到,则 为出错。 STEP 4:重复上述过程,直至归约完为止。
【重难点】
◇ 通过本章学习后,同学们应该能知道简单优先文法的形式。 ◇ 对一个给定的简单优先文法能构造简单优先关系分析表,并 能判别所给文法是否为简单优先文法。 ◇ 分清规范句型的句柄和最左素短语的区别,进而分清算符优 先归约和规范归约的区别。
武汉理工大学计算机科学系陈天煌
第6章 自底向上优先分析法
+
…Si
α
U
β

V
W …
Sj …
… Si
图6.4 采用U→…VW…的推导
武汉理工大学计算机科学系陈天煌
三、优先关系:
为了把上述条件加以形式化,引进三种优先关系。其定义如下: Si ﹒ = Sj 当且仅当存在形如下面的产生式U→ … SiSj … ﹒Sj 当且仅当存在形如下面的产生式U→…SiW…, Si ﹤ + 且有 W Sj… Si ﹒ ﹥ Sj 当且仅当存在形如下面的产生式U→…VW…,
简单优先文法分析算法的主要思想就是找出当 前句型的句柄并归约之。
武汉理工大学计算机科学系陈天煌
简单优先文法分析算法的主要思想是就是找出当前 句型的并归约之。
而给定一个句型X,寻找它的句柄是这样进行的: 对输入串从左向右进行扫描,每次只查看两个相邻 的文法符号,并由此得知什么时候查到句柄的尾Sj ,然 后再返过头来向句型左端进行加工,仍然只查看相邻的 两个文法符号,找出句柄的头Si。 此时就可以对句柄Si…Sj进行归约了。
武汉理工大学计算机科学系陈天煌
一、自底向上分析的一般过程:
先设置一个寄存符号的栈(寄存句型前端),称为分析栈。 其作用是用来记录分析的历史和指示分析的下一步动作。 分析进行时,把输入符号一个一个地按扫描顺序移进栈中, 当栈顶符号形成一个句柄(即为某产生式的右部)时,就进行 一次归约,即把栈顶构成句柄的那个符号子串用相应的产生式 左部符号来替换。 接着再检查在栈顶是否又出现了新的句柄,则再进行归约, 直至整个输入符号串处理完。 最终如果栈顶为文法的开始符号,则所分析的输入符号串 为合法的符号串,报告分析成功。 否则,是不合格的符号串,报告错误。
需要说明的是分析栈顶形成的候选式不一定是句柄。例 如,在第14步对栈顶为T,它是E的一候选式,但它不是句柄, 不能归约成E。 判定候选式是极为简单的事情,但判定句柄就不那么容 易。 而不同的自底向上方法给出不同的判定方法。
武汉理工大学计算机科学系陈天煌
从上述例子可知,自底向上方法主要包括以下 四个动作: 移进:把输入流的头符读到分析栈中。 归约:把分析栈顶的句柄归约为一非终极符。
武汉理工大学计算机科学系陈天煌
步骤 1 2 3 4 5 6 7 8 9
分析栈 # #( #(i #(F #(T #(E #(E+ #(E+i #(E+F
输入串 (i+i)*i# i+i)*i# +i)*i# +i)*i# +i)*i# +i)*i# i)*i# )*i# )*i#
动作 移进 移进 归约 归约 归约 移进 移进 归约 归约
武汉理工大学计算机科学系陈天煌
【学习目标】
简单优先分析法是自下而上(自底向上)语法分析的一 种,特别适合于表达式的语法分析,由于它的算法简单直观 易于理解,因此,也是学习其它自下而上语法分析的基础。 通过本章学习大家应掌握:
◇ 对给定的文法能够判断该文法是否是简单优先文法 ◇ 对给定的简单优先文法能够判断该文法是否是简单优先文 法 ◇ 对给定的简单优先文法能构造简单优先关系表,并能利用 简单优先优先关系表判断该文法是否是简单优先文法。 ◇ 能应用简单优先分析算法对给定的输入串进行移进-归约 分析,在分析的每一步能确定当前应移进还是归约,并能 判断所给的输入串是否是该文法的句子。 ◇ 了解简单优先分析法的优缺点和实际应用中的局限性。
武汉理工大学计算机科学系陈天煌
2、简单优先文法的句柄
定理:设S1S2…Sn是简单优先文法的规范句型,其子串SiSi+1…Sj 是满足下列条件的最左子串: ﹒Si Si-1 ﹤ ﹒ ﹒ Si ﹒ = Si+1= Si+2 =…=Sj Sj﹒ ﹥ Sj+1

则SiSi+1…Sj定是S1S2…Sn的句柄。 证明:略。 这个定理给我们提供了确定句柄的一种方法。
+ …S 和W * S … 且有 V j i
武汉理工大学计算机科学系陈天煌
在实际使用这些优先关系去识别句子时,我们希望采用一种 简洁的方法去表示这些关系,优先关系矩阵是一种常用的方式。 其定义为: ﹒ ﹒ =, 当 Si = Sj ﹒ 当 Si﹤ ﹒Sj ﹤, ﹒ ﹥, 当 Si ﹒ ﹥Sj 空, 当 Si与Sj无关系(不相邻出现)时 例:设有文法Gz:Z → bMb M→a︱( L L→Ma) 求出其优先关系矩阵。
如对Gz我们有:
Z → bMb M →a ︱ ( L L→Ma) HEAD LAST
Z b b
M ( ,a ) ,L ,a
L M ,( ,a )
武汉理工大学计算机科学系陈天煌
四、简单优先文法的分析方法: 1、简单优先文法的定义: 定义:满足下面两个条件的文法称为简单优先文法: (1)任意两个符号至多成立一种优先关系。 (2)任意两个产生式具有不同右部。 为了处理方便,引进特殊符号#,并定义 ﹒ S, S ﹒ #﹤ ﹥# (S∈VN ∪VT)
第6章 自底向上优先分析法
【预习思考】
◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ 什么是自底向上语法分析的策略? 什么是移进-归约分析? 移进-归约过程和自顶向下最右推导有何关系? 自下而上语法分析成功的标志是什么? 什么是可归约串? 移进-归约过程的关键问题是什么? 如何确定可归约串? 如何决定什么时候移进,什么时候归约? 什么是简单优先文法?什么是算符优先文法? 简单优先分析是如何识别可归约串的? 简单优先分析法的优缺点和局限性有哪些?
α
U … Si Sj …
β
图6.1 采用U→…SiSj…的推导
武汉理工大学计算机科学系陈天煌
+ S j… 2、有形如 U→…Si W…的产生式,且有 W
+ + S αUβ α…Si W…β α…Si Sj…β
α
U
β

Si W… Sj…
图6.2 采用U→…SiW…的推导
武汉理工大学计算机科学系陈天煌
武汉理工大学计算机科学系陈天煌
例:给定文法G(E):E→E +T |T T→T*F | F F→i| (E) 并假定输入串为(i+i)*i,考察自底向上的分析过程。
二、分析过程图表:
为了具体实现上的方便,我们仍统一约定以“#”作为输入 串的左右分界符(开始和结束标志)。作为初始状态,先将符 号串的开始标志“#”压入分析栈中,作为栈底符号,则分析过 程为:
武汉理Βιβλιοθήκη Baidu大学计算机科学系陈天煌
这种方法的基本思想为: 首先规定文法符号之间的优先关系,然后再利用这种关系, 通过比较句型中两个相邻的符号之间的优先关系来确定句型的 “句柄”并进行归约。
二、相邻关系:
设Si和Sj是文法G的任意两个符号,那么它们在句型中可相邻 出现的充要条件是必须满足下列条件之一:
1、有形如 U→… SiSj…的产生式
武汉理工大学计算机科学系陈天煌
M〔Si,Sj〕=
解:根据定义求出其优先关系矩阵(如下):
Z
M
L
b
.
(
a
.
)
Z → bMb M→a︱(L L→Ma)
Z M = =
. > . < . <
Z
. >
L
b (
b M b a
Z bMb Z bM b
=
.
. <
=
.
. <
. < . > . >
(
L
a
)
. > . >
6.1 概述
原理:在采用自左向右扫描,自底向上分析的前提下,该类 分析方法是从输入符号串入手,通过反复查找当前句 型的句柄(最左简单短语),并使用文法的产生式把 句柄归约成相应的非终极符来一步步地进行分析的。 最终把输入串归约成文法的开始符号,表明分析成功。 自底向上分析方法的关键就是要找出当前句型的句柄 (或是它的变型),然后根据产生式判别将它归约成什么 样的非终极符号。 下面,我们结合具体的实现方法,介绍在分析过程中 如何来识别句柄的。我们首先介绍自底向上分析的一般过 程,再介绍两种常用的分析技术:简单优先分析法和LR分 析方法。
3、有形如 U→…VSj…的产生式,且有 V
+ + S αUβ α…VSj…β α…Si Sj…β
+
…Si
α
U …

β
V
Si
Sj …
图6.3 采用U→…VSj…的推导
武汉理工大学计算机科学系陈天煌
4、有形如 U→…VW…的产生式,且有V + S… 和W j
+ + S αUβ α…VW…β α…Si Sj…β
武汉理工大学计算机科学系陈天煌
【学习指南】
简单优先分析法是自下而上语法分析的一种,它的算法简 单、直观、易于理解,所以通常作为学习其它自下而上语法分 析的基础。 为学好本章内容,同学们应复习有关语法分析的知识,如: 什么是语言、文法、句子、句型、短语、简单短语、句柄、最 右推导、规范归约基本概念。
相关文档
最新文档