编译原理自底向上优先分析法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2020/12/4
3.1 优先关系
优先关系只存在于句型中相邻出现的符号 相邻:算符优先分析法只考虑终结符之间的优先 关系,不考虑非终结符,所以两个终结符相邻指 其中没有其他的终结符(但可以有非终结符) 如:E+T×i,+和×相邻,×和i相邻,
但+和i不相邻 终结符间优先关系表示: 终结符a和b之间的优先关系表示如下:
则a∈FIRSTVT(A); (b)若有产生式A→B…,且a∈FIRSTVT(B),
则a∈FIRSTVT(A) 3) 重复2),直到每个FIRSTVT集合都不发生变化为止
2020/12/4
➢例 文法: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)
2020/12/4
3 算符优先分析法
• 算符优先分析法特别适用于表达式的分析 • 从表达式得到的启发: ➢ 表达式的归约顺序与运算顺序是一样的
通常算术表达式的运算次序是先乘除后加减, 同优先级时服从左结合
E→E+T|T T→T×F|F F→(E)|i
符号串E+T+T×F的归约过程为: E+T+T×F |- E+T×F |- E+T |- E
编译原理自底向上优先分析法
学习目标: • 掌握:构造算符优先关系表,进行算符
优先分析,构造优先函数 • 理解:算符优先文法,最左素短语 • 了解:简单优先分析法
2020/12/4
1 自底向上分析方法概述 2 自底向上优先分析方法概述 3 算符优先分析法
2020/12/4
1 自底向上分析方法概述
1. 基本思想 ➢ 从输入符号串开始,利用文法的产生式逐步进行
2020/12/4
➢ 运算次序只与运算符(优先级,结合性)有关 ,与运算对象无关
➢ 可以根据运算符(终结符)的优先关系指导归 约过程,与运算对象(非终结符)无关
2020/12/4
3.1 优先关系 3.2 算符优先文法的定义 3.3 算符优先关系表的构造 3.4 算符优先分析算法 3.5 优先函数 3.6 算符优先分析法的局限性
终结符。
2020/12/4
2. 如果Ab或bA出现在算符文法的句型r中,其 中A ∈VN,b ∈VT,则r中任何含b的短语 必含有A(含A的短语不一定含有b)
E
句Biblioteka BaiduE+T+T×F
E+ T
短语有: E+T T×F
E + TT × F
E+T+T×F
2020/12/4
2. 算符优先关系的定义
设G是一个不含ε产生式的算符文法,a和b是任意 两个终结符,A,B,C是非终结符,算符优先关系定 义如下:
E
E+ T T F
E T F ( E)
( E)
如:(=),但是)=(不成立, 因为)和(不可能相邻出现 在任何句型中,它们之间 没有优先关系
E+ T
在句型(E)+T中得 ) > +, 在(E+T)中得 + > )
按公认的计算顺序规定优先级和结合性,得到优先关系如下:
➢ ×,/的优先级高,遵循左结合,得×>×, ×>/, />/, />×
包含优先级和结合性的表达式文法是算符优先文法
E→E+T|T T→T×F|F F→(E)|i
2020/12/4
3.3 算符优先关系表的构造
1. 最左终结符集FIRSTVT ➢ FIRSTVT(B)={b|B=>+ b… 或 B=>+ Cb… }
其中b∈VT, B,C∈VN ➢ 直观上说FIRSTVT(B)是由B推导出的最左终结
自底向上分析的过程为:
abbcde|-aAbcde|-aAcde|-aAcBe|-S
2020/12/4
例 文法: (1) S→aAcBe (2) A→b
(3) A→Ab
(4) B→d
判断输入串 abbcde# 是否为该文法的句子
用符号栈对输入符号串自底向上的分析过程为:
步骤 1) 2) 3) 4)
➢ +,-的优先级低,遵循左结合,得+>+, +>-, →-, →+
➢ ‘(’, ‘)’规定括号的优先级大于括号外的运算符,小于括号内的 运算符,如…E + ( E + T )…,有 + < (,( < +
➢ 规定:‘#’<任何与它相邻的运算符,
任何与它相邻的运算符>‘#’
+ × () i #
➢ 运算对象 i 的优先级最高 优先关系表如右图所示:
• 规范归约:
自底向上分析的移进-归约过程是自顶向下最右 推导的逆过程,因为最右推导为规范推导,所以 自左向右的归约称为规范归约。
例 文法: (1) S→aAcBe (2) A→b
(3) A→Ab
(4) B→d
输入串 abbcde#的最右推导的过程为:
S=>aAcBe=>aAcde=>aAbcde=>abbcde
A
文法E→E+T|T
a
B

P
δb…
T→T×F|F F→(E)|i 由E→E+T T=>+ T×F 得+<×
说明:δ为ε或C,a,b不在同一句柄中,b先归约, 所以a的优先级低于b
3) a > b
4) 当且仅当G中有形如 A→…Bb… 的产生式,
5) 且 B=>+ …a 或 B=>+ …aC A
文法E→E+T|T
3. 基本实现方法-“移进-归约”方法
4. 引进一个先进后出的符号栈来存放符号
对输入符号串自左向右进行扫描,并把当前 输入符号下推入栈中(移进),
边移进边分析,一旦栈顶符号串形成某个句 型的句柄(为某产生式的右部)时,就用相 应的非终结符(产生式的左部)替换它(归约 )。
重复这一过程,直到输入符号串的末端,此 时如果栈中只剩文法开始符号,则输入符号 串是文法的句子,否则不是。
1) a = b
2) 当且仅当G中有形如 A→…ab… 或 A→…aBb… 的产生式。
A
例如:有产生式F→(E)
所以( = )
a δb
说明:δ为ε或B,a,b在用一句柄中同时归约所以 优 先级相同
2) a < b 当且仅当G中有形如 A → …aB… 的产生式, 且 B =>+ b… 或 B=>+ Cb…
B
b
T→T×F|F

F→(E)|i
P
由E→E+T
E=>+ T×F
aδ …
得×>+
说明: δ为ε或C ,a,b不在同一句柄中,a先归约,
所以a的优先级大于b
3. 算符优先文法
➢ 定义:
设有一不含ε产生式的算符文法G,如果对任意 两个终结符对a,b之间至多只有一种优先关系 成 立 , 则 称 G 是 一 个 算 符 优 先 文 法 ( Operater Precedence Grammar),即OPG文法。
a<b 表示a的优先级低于b a=b 表示a的优先级等于b a>b 表示a的优先级高于b
2020/12/4
优先关系定义的依据
➢ 在当前句柄中的符号优先于与其相邻的不在句柄 中的符号被归约,其优先关系大
➢ 同一句柄中的相邻符号同时被归约,其优先关系
相同
E
E→E+T|T T→T×F|F F→(E)|i
5) 6) 7) 8) 9) 10) 11)
符号栈 # #a #ab #aA
#aAb #aA #aAc #aAcd #aAcB #aAcBe #S
输入符号串 abbcde# bbcde# bcde# bcde#
cde# cde# de# e# e# # #
动作 移进a 移进b 归约(A→b) 移进b
其中a∈VT, B,C∈VN ➢ 直观上说LASTVT(B)是由B推导出的最右终
结符(允许右边有一非终结符)的集合。 ➢例文法:
E→E+T|T T→T×F|F F→(E)|i
LASTVT(F)={),i} LASTVT(T)={×,),i} LASTVT(E)={+,×,),i}
2020/12/4
构造LASTVT(A)的算法与构造FIRSTVT(A)算 法相似 根据下面两条规则 a) 若产生式A→…a,或A→…aB,则 a∈LASTVT(A) b) 若有产生式A→…B,且a∈LASTVT(B),则 a∈LASTVT(A)
说明:表中为空的元素表示:在该 文法的任何句型中都不会出现这两
+ > < <>< > ×> > < > < > ( < < <=< )>> > >
个终结符相邻,所以他们无优先关 系,如不会有这样的表达式… ) i …
i>> > > #<<< <=
算符优先分析法 1 文法要满足一定的条件,即为算符优先文法 2 根据文法按一定规则计算算符之间的优先关系 3 按优先关系进行算符优先分析
FIRST(F)={(,i } FIRST(T)={(,i } FIRST(E)={(,i}
2020/12/4
构造FIRSTVT(A)的算法 1) 令每个非终结符的FIRSTVT集为空 2) 依次扫描文法中的每条产生式,根据规则(a)(b),
求各非终结符的FIRSTVT集 3) (a)若产生式A→a…,或A→Ba…,
归约(A→Ab) 移进c 移进d 归约(B→d) 移进e 归约(S→aAcBe) 接受
• 关键问题:如何在分析的过程中确定句柄 ➢ 何时移进?栈顶末形成句柄 ➢ 何时归约?栈顶形成句柄 • 常用自底向上分析法:
算符优先分析法(3) LR类分析法(第7章)
2020/12/4
2 自底向上优先分析法概述
➢ 说明:
两个终结符之间的优先关系是有序的,算符优 先 文 法 允 许 a>b,b>a 同 时 存 在 , 而 不 允 许 有 a>b,a<b,a=b三种情况中的任两种同时存在 。
例如:算符优先文法允许 + > ) ,) > +同时存 在,不允许 + > ) 和 + < ) 同时存在
➢ 例 表达式文法 E→E+E|E×E|(E)|i 由E→E+E且E=>+ E×E得+<× 由E→E×E且E=>+ E+E得+>× +和×的优先关系不唯一,所以不是算符优先文法
符(允许左边有一非终结符)的集合。
与FIRST() = { a VT | * a......} 对照 文法符号串的开始符号集是由推导出的开头的 终结符(包括ε)组成
2020/12/4
➢ 例文法: E→E+T|T T→T×F|F F→(E)|i
FIRSTVT(F)={(,i } FIRSTVT(T)={×,(,i } FIRSTVT(E)={+,×,(,i}
初值 第一次 第二次 第三次
E {} {+} {+ ,×} {+, × , (,}i
T {} {×} {× , (,}i {×,(,i}
F {} {(,i} {(,i}
{(,i}
第四次迭代的时候,E、T、F 的FIRSTVT集都不再发生变 换,算法终止
2. 最右终结符集LASTVT
➢ LASTVT(B)={a|B=>+…a 或 B=>+…aC}
E+ T F
T
句型(E)+T的句柄 是(E) , 所以‘)’
>‘+’
‘(’ = ‘)’
( E)
不可能相邻出现在任何句型中的两个符号,无法比 较其归约的先后,故它们之间无优先关系
注意:<,=,>是三种有序关系,与数学中的<,= ,>不同,所以a=b不意味b=a,a>b不意味b<a
E→E+T|T T→T×F|F F→(E)|i
优先分析法两类: • 简单优先分析法
➢基本思想:按一定原则定义文法中所有符号( 终结符和非终结符)之间的优先关系,按照这 种关系确定归约过程中的句柄并实行归约。
➢是一种规范归约。 ➢简单优先分析法准确、规范,但效率低,不实
用,不介绍。
2020/12/4
• 算符优先分析法 ➢基本思想:只定义文法中终结符之间的优先 关系(不考虑非终结符),并由这种关系指 导分析过程 ➢不是规范归约 ➢算符优先分析法分析速度快,特别适用于表 达式的分析。缺点是不规范,常常要采用适 当措施克服其缺点。
2020/12/4
3.2 算符优先文法的定义
1. 算符文法 ➢ 定义:
设有上下文无关文法 G ,如果G中产生式的右部 没有两个非终结符相连,则称G为算符文法( Operater Grammar),也称OG文法 ➢ 例如: 表达式文法 E→E+E|E×E|(E)|i 是算符文法 ➢ 性质: 1. 在算符文法中任何句型都不包含两个相连的非
归约,试图归约到文法开始符 ➢ 从语法树角度看,是以输入符号串作为语法树的
末端结点符号串,自底向上的构造语法树,使文 法开始符正好是该语法树的根。如果最终根结点 是开始符,则输入符号串是语言的一个句子,否 则不是。 ➢ 自底向上分析过程实际上是一个不断进行直接归 约的过程。
2020/12/4
2. 遇到的问题 如何找出进行直接归约的“可归约串”(句柄 )
相关文档
最新文档