第五章-自下而上分析


一、自下而上分析基本问题

1、归约(其实就是上一章自上而下的分析的逆向)

定义:是指根据文法的产生式规则,把产生式的右部替换成左部符号。

2、规范规约

推出了短语、直接短语、句柄的概念。一个句型的最左直接短语称为该句型的句柄。

规范归约(最左规约)是关于是一个最右推导(规范推导)的逆过程。由于规范句型由最右推导推出的句型,故该句型的句柄右边只含有终结符号。

语法树有五个特征:①每个句型都有一棵语法树与之对应; ②每棵语法树的叶结点自左至右排列就组成一个句型; ③每棵子树的叶结点自左至右排列就组成一个短语; ④每棵简单子树的叶结点自左至右排列就组成一个直接短语; ⑤每棵最左简单子树的叶结点自左至右排列就组成一个句柄。

3、符号栈的使用与语法树的表示

有四类操作:“移进”、“归约”、“接受”、“出错处理”。

任何可归约串的出现必在栈顶,不会在栈的内部。

二、算符优先分析

算符优先分析法不是一种规范归约法。算符优先关系有三种:<. >. =.

1、算符优先文法及优先表构造

怎么构造优先表?首先需要对G的每一个非终结符P构造两个集合FIRSTVT(P)和LASTVT(P)。构造这两个集合的目的其实就是方便比较优先级。

2、算符优先分析算法

首先引入“素短语”的概念:至少含有一个终结符,并且除它自身之外不再含有任何更小的素短语。需要注意的是,出现在左端或者右端的非终结符一定属于这个素短语。

三、LR分析法

这里的L表示从左到右扫描输入串,R表示构造一个最右推导的逆过程。

能用LR分析器分析的文法类,包含能用LL(1)分析器分析的全部文法类。

1、LR分析器

核心部分是一张分析表。ACTION[s,a]规定了当状态s面临输入符号a时应采取什么动作。GOTO[s,X]规定了状态s面对文法符号X(终结符或非终结符)时下一个状态是什么。

2、LR文法

LR(k)文法:最多向前看K个的符号就可以决定动作的LR分析器所分析的文法成为LR(k)文法。

非LR结构:存在移进、归约冲突的文法。LR文法肯定是无二义的,一个二义文法决不会是LR的。

3、LR(0)项目集族和LR(0)分析表的构造

活前缀是指规范句型的一个前缀,这种前缀不含句柄之后的任何符号。在右边增添一些终结符号之后,就可以使它成为一个规范句型。

构造识别一个文法活前缀的DFA的项目集(状态)的全体称为这个文法的LR(0)项目集规范族。

4、LR(0)项目集规范族的构造

通过闭包函数(CLOSURE)来求DFA一个状态的项目集。

5、LR(0)分析表的构造

LR(0)项目集规范族不存在移进-归约,或归约-归约冲突,称为LR(0)文法。
只有是LR(0)文法,才能构造相应的LR(0)分析表,才能用LR(0)分析法对句子进行分析。


作业:(不知道怎么调过来了....)

第五章-自下而上分析                

第五章-自下而上分析

第五章-自下而上分析

第五章-自下而上分析

第五章-自下而上分析