目录
  1. 1. CFG的分析树
    1. 1.1. (句型的)短语
  2. 2. 自底向上的语法分析
    1. 2.1. 移入-规约分析
    2. 2.2. 移入-规约分析中存在的问题
  3. 3. 算符优先分析
    1. 3.1. 算符文法
    2. 3.2. 算符优先表
      1. 3.2.1. FirstVT和LastVT集
      2. 3.2.2. 算符优先表的构造
    3. 3.3. 算符优先分析过程
  4. 4. LR分析法
    1. 4.1. LR文法
    2. 4.2. LR分析法的基本原理
    3. 4.3. LR分析器(自动机)的总体结构
编译原理复习整理(三)

参考课程为自哈尔滨工业大学的 《编译原理》,参考教材为《编译原理及实践教程》(第三版)。

本文划分仅考虑本人每日复习量,没有章节划分参考价值。

CFG的分析树

CFG的分析树

根节点对应文法开始符号。

内部节点表示对一个产生式的应用,该节点的标号是此产生式的左部。该节点的子节点的标号从左到右构成了产生式的右部。

叶节点的标号既可以是非终结符,也可以是终结符。从左到右排列叶节点得到的符号串称为这棵树的产出或者边缘

分析树是推导的图形化表示

给定一个推导$S\Rightarrow a_1\Rightarrow a_2 \Rightarrow \dots \Rightarrow a_n$,对于推导过程中的每一个句型$a_i$,都可以构造出一个边缘为$a_i$的分析树。

(句型的)短语

给定一个句型,其分析树中的每一棵子树的边缘称为该句型的短语。

如果子树只有父子两代节点,那么这棵子树的边缘称为该句型的一个直接短语

短语

自底向上的语法分析

从分析树的底部(叶节点)向顶部(根节点)方向构造分析树。可以看成是输入串$w$规约为文法开始符号$S$的过程。

自底向上的语法分析采用最左规约方式(反向构造最右推导)。自底向上语法分析的通用框架是移入-规约分析

移入-规约分析

移入-规约分析

  • 每次规约的符号串称为句柄
  • 站内符号串+剩余输入=规范句型

移入-规约分析中存在的问题

句型实际上是当前句型的最左直接短语。

算符优先分析

算符文法

一个文法,如果它的任何产生式的右部都不含两个相继(并列)的非终结符结构,即不含如下形式的产生式:

则称该文法是算符文法

假定$G$是不含$ε$产生式的算符文法,终结符对a、b之间的优先关系定义如下。

  • $a \dot= b$当且仅当文法G中含有形如$P \rightarrow ab$或者$P \rightarrow aQb$的产生式。
  • $a \dot< b$当且仅当文法G中含有形如$P \rightarrow aR$的产生式,且$R\Rightarrow^+b\dots$或$R\Rightarrow^+Qb\dots$。
  • $a \dot> b$当且仅当文法G中含有形如$P \rightarrow Rb$的产生式,且$R\Rightarrow^+a\dots$或$R\Rightarrow^+aQ\dots$。

算符优先文法:若G是一个不含空产生式的算符文法,任何终结符对(a, b)只满足下述三种优先关系之一:

则称G为一个算符优先文法,简称OPG文法。算符优先文法是无二义性的。

算符优先表

FirstVT和LastVT集

对于文法G的任一非终结符P,定义两个集合:

FirstVT(P):P能推倒的第一个终结符构成的集合。

LastVT(P):P能推导的最后一个终结符构成的集合。

算符优先表的构造

  • $\dot=$关系:若有形如$P \rightarrow \dots ab\dots$或$P \rightarrow \dots aQb\dots$的产生式,则$a\dot= b$。可以直接看产生式得到。
  • $\dot<$关系:若有形如$Q\rightarrow\dots aP\dots$的产生式,对任何$b\in FirstVT(P)$,有$a\dot<b$。
  • $\dot>$关系:若有形如$Q\rightarrow\dots Pb\dots$的产生式,对任何$a\in LastVT(P)$,有$a\dot>b$。

算符优先分析过程

和移进-规约过程基本相同。只是在满足$\dot<$或者$\dot=$时移入,在$\dot>$时规约。

算符优先分析中,句型可以用一般形式(N)表示,在规约过程中,只需终结符相同,非终结符位置相同即可。

LR分析法

LR文法

可以运用LR分析法的文法称为LR文法。LR文法是最大的、可以构造出相应移入-规约语法分析器的文法类。

  • L:对输入进行从左到右的扫描
  • R:反向构造出一个最右推导序列

LR(k)分析:需要向前查看k个输入符号的LR分析。当k=0和k=1这两种情况时具有实际意义。当省略(k)时,表示k=1。

LR分析法的基本原理

句柄是逐步形成的,用“状态”表示句柄识别的进展程度。

LR分析器(自动机)的总体结构

Ex: 文法$S\rightarrow BB \\ B\rightarrow aB \\ B\rightarrow b$对应的LR分析表为:

在上表中,每一行对应一个状态,一共有7个状态;Action表中的每一列分别对应文法中的终结符,以及结束符号#;Action表中的每一项表示对应的语法分析动作,sn表示将当前符号移入到分析栈中,并且进入状态n。rn表示用第n个产生式进行规约;GOTO表的每一列对应着文法中的非终结符;GOTO表中的每一项表示在某一状态遇到某一非终结符遇到的后继状态。

假设输入为b a b,则会有以下的分析过程:

文章作者: QF
文章链接: http://blog.logan-qiu.cn/posts/c9ecfa8b/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 QF的个人博客
打赏
  • 微信
  • 支付宝

评论