编译原理 下载本文

最右推导:从最右边的飞终结符开始推导(规范推导) E=> rm—E=> rm—(E)=> rm—(E + E) => rm—(E + id)=> rm—(id + id) 3、 分析树(与语法树对比不同):

分析树:叶结点由非终结符或终结符标记,所有这些标记从左到右构成一个句型。

语法树是分析树的浓缩表示:算符和关键字是作为内部结点 语法制导翻译可以基于分析树,也可以基于语法树

二义性:

如果存在某个句子有不止一颗分析树与之对应,那么称这个文法是二义的,二义文法至少存在一个句子有不止一个最左(最右)推导的文法。 文法二义并不代表语言一定是二义。只有当产生一个语言的所有文法都是二义时,这个语言才称为二义的。 4、消除左递归 直接左递归(形式) A→Aα|β 消除直接左递归(方法) A→β A’ A→αA’ | ε

5、提左因子:

6、自上而下分

基本思想:对任何输入串,试图用一切可能的方法,从文法开始符号(根结点)出发,自上而下,从左到右地为输入串建立分析树。 7、LL(1)文法(如何产生回树?)

把满足以上两个条件的文法叫做LL(1)文法,其中的第一个L代表从左向右地扫描输入,第二个L表示产生最左推导,1代表在决定分析器的每步动作时向前搜索一个输入符号。LL(1)文法它不是二义的,也不含左递归。

8、非递归的预测分析算法的大概思想: 输入 串w和文法G的分析表

输出 如果w属于L(G),则输出w在最左推导,否则报告错误。 非递归的预测分析器的模型如下:

9、自上而下分析(如何做归约)

S的归约序列为:abbcde、aAbcde、aAde、aABe、S 这些归约刻画了abbcde的最右推导过程

10、句柄:是和某产生式右部匹配的子串,并且,把它归约成该产生式左部的非终结符代表了最右推导过程的逆过程的一步。 11、LR分析表的三种技术“

简单的LR方法(简称SLR):最容易实现,但功能最弱。 规范的LR方法:功能强大,但代价大

向前看的LR方法(简称LALR):功能和代价处于另外两者之间

LR分析器的模型:

action代表动作,goto代表转移。

12、活前缀:右句型的前缀,该前缀不超过最右句柄的右端 LR分析器的格局是二元组,它的第一个成分是栈的内容,第二个成分是尚未扫描的输入。 13、同心的LR(1)项目集:略去搜索符后它们是相同的集合(同心集的概念)