第6章 自底向上分析思想
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
算符优先关系的定义
定义2 设G是一个不含ε产生式的算符文 法,a和b是任意两个终结符,A、B、C 是非终结符,算符优先关系=.、<.、.> 定义如下: (1)a=.b 当且仅当G中含有形如 A → …ab… 或 A → …aBb…的产生式
算符优先关系的定义
(2)a<.b当且仅当G中含有形如 A → …aB… 的产生式且
+i2*i3# i2*i3#
动作
移进 归约(3)
i1 +
3
4 5
#E
#E+ #E+i2
+
i2 *
i2*i3#
*i3# i3#
移进
移进 归约(3)
6
7 8
#E+E
#E+E* #E+E*i3
*
i3 #
i3#
#
移进
移进 归约(3)
9
10 11
#E+E*E
#E+E #E
#
# #
归约(2)
归约(1) 接受
6.3.1 直观算符优先分析法
6.2.2 简单优先文法的定义
简单优先文法必须满足以下条件: (1)在文法符号集V中,任意两个符 号之间最多只有一种优先关系成立。 (2)在文法中任意两个产生式没有相 同的右部。(若不满足会出现规约不 唯一。)
6.2.3 简单优先分析法
算法:首先构造优先关系矩阵。 (1)将输入符号串a1a2..an#依次逐个存入符号 栈S中,直到遇到栈顶符号ai的优先性.>下一个待 输入符号aj时为止。 (2)栈顶当前符号ai为句柄尾,由此向左在栈中 找句柄的头符号ak,即找到ak-1<. ak为止。 (3)由句柄akak+1…ai在文法的产生式中查找右 部为akak+1…ai的产生式,若找到,则用相应左部 代替句柄,若找不到则为出错,这时可断定输入 串不是该文法的句子。 (4)重复(1)(2)(3)直到归约完输入符号 串,栈中只剩文法的开始符号为止。
算符间的优先关系的表示: a<.b 表示a的优先性低于b a=.b 表示a的优先性等于b a>.b 表示a的优先性高于b 我们可以对表达式的文法按公认的计算 顺序规定优先级和结合性如下:
算符优先分析法
表达式:
E → E+E| E-E| E*E| E/E| E^E| (E)| i (1)^优先级最高,遵循右结合。相当 ^ <.^ (2) *, /优先级其次,服从左结合。相当 *>.* *>./ />./ />.* (3) +,- 优先级最低,服从左结合。相当 +>.+ +>.- ->.- ->.+ (4)对‘(’,‘)’规定括号的优先性大于 括号外 的运算符,小于括号内的运算符,内括号的 优先性大于外括号。
算符优先关系表
+
+ * / ^ ( ) > > > > > > > > > > > > < > > < < > =. > > > > > > >.
>.
*
/
^
(
)
>.
i
< < < < < <
#
>. >. >. >. >. >.
i
#
>
<
>
<
>
<
>
<
>
< <
>
<
>.
=.
6.3.2 算符优先文法的定义
6.1 自底向上优先分析法概述
优先分析法可分为: 简单优先分析法 算符优先分析法
简单优先分析法
基本思想: 对一个文法按一定原则求出该文法所有 符号之间的优先关系。按照这种关系确 定规约过程中的句柄。 这种规约实际上是一种规范规约。
算符优先分析法
基本思想: 只规定算符之间的优先关系,即只考虑 终极符之间的优先关系。 由于不考虑非终极符之间的关系,在规 约过程中只要找到句柄就规约,并不考 虑规约到哪个非终极符,所以不是规范 规约。
6.2 简单优先分析法
6.2.1 优先关系
X=Y 表示X和Y的优先关系相等。 (iff G中存在产生式 A → …XY…) X <. Y 表示X的优先性比Y的优先性小。 (iff G中存在产生式 A → …XB…, 且 B =>+ Y …) X .> Y 表示X的优先性比Y的优先性大。 (iff G中存在产生式 A → …BD…, 且 B =>+ …X 和 D =>* Y)
Precedence Grammar)即OPG文法。
6.3.3 算符优先关系表的构造
S
S b A ( B a ) #
b
A 1
(
B
a
)
# .> .>
1 <. <. 1
1 <. 1 =.
简单优先关系矩阵
从上表可看出: 矩阵中元素要么只有一种关系,要么 为空,元素为空时表示该文法的任何句 型中不会出现该符号对的相邻关系。若 出现,则为出错。 ‘#’表示语句括号,‘#’的优先级<.所 有符号的优先级,仅对所有与‘#’有相 邻关系的文法符号而言。
B =>+ b…或 B =>+ Cb… (3)a>.b当且仅当G中含有形如 A → …Bb…的产生式且
B =>+ …a或 B =>+ …aC
算符优先文法的定义
定义3: 设G是一个不含ε产生式的算符文法,如 果对任意两个终结符对a,b之间,至多 只有=.、<.、.>三种关系的一种成立, 则称G是一个算符优先文法。(Operator
定义1 算符文法 : 设有一文法G,如果G中没有形如 A→ …BC…的产生式,其中B和C为非终 结符,则称G为算符文法(Operater Grammar)也称OG文法。
算符文法的性质
性质1 在算符文法中任何句型都不包含 两个相邻的非终结符。
性质2 如果Ab或(bA)出现在算符文法 的句型中,其中A∈VN, b∈VT, 则该句型 中任何含b的短语必含有A。
6.3 算符优先分析法
算符优先分析法只考虑算符(广义为终 结符)之间的优先关系,例如:
(1)E → E+E (2) E → E-E
(3) E → I 对输入串i1+i2*i3的归约过程可表示如下:
表6.3 对输入串i1+i2*i3的归约过程
步骤
1 2 # #i1
栈S
当前输入符
输入串剩余部分
6.2.1 优先关系
例:若有文法G[S]
1.S → bAb
2.A →(B|a
3.B → Aa) 根据定义,可求得文法符号之间的优先关 系:
Biblioteka Baidu
优先关系实例
S S S S b A ( ) B b
b
A
b
b A a
b
b A ( A B a
b
(
B
A
a
a
)
( A
B a )
表6.2 文法的简单优先关系矩阵