编译原理第五章——自下而上分析
目录
- 一、复习:语法分析的两种方式
- 二、自下而上分析概述
- 1.🐯核心思想:移进-规约
- 2.⛺️规范规约
- 3.🦁规范规约的两个问题
一、复习:语法分析的两种方式
- 自上而下(Top-down)
- 从文法的开始符号出发,反复使用各种产生式,寻找"匹配"的推导。
- 推导:根据文法的产生式规则,把串中出现的产生式的左部符号替換成右部。
- 从树的根开始,构造语法树。
- 递归下降分析法、预测分析程序。
- 自下而上(Bottom-up)
- 从输入串开始,逐步进行归约,直到文法的开始符号。
- 归约:根据文法的产生式规则,把串中出现的产生式的右部替换成左部符号。
- 从树叶节点开始,构造语法树。
- 算符优先分析法、LR分析法。
二、自下而上分析法概述
1. 🐯核心思想:移进-规约
- 1.基本思想:从输入串开始,逐步归约,直到文法的开始。其中归约即为根据文法的产生式规则,把串中出现式的右部替换成左部符号。从语法树上分析,就是从树叶节点开始,构造语法树。
- 2.归约:利用栈,输入终结符号移进栈,当栈顶形成P的候选式时,就归约为它的左部P符号。
- 3.自下而上分析法就是“移进-规约法”
例5.1 移进-规约示例
文法G2:
S->aAcBe
A->b
A->Ab
B->d
输入串: abbcde
最左归约:abbcde =>aAbcde =>aAcde =>aAcBe =>S
最右推导:S =>aAcBe =>aAcde =>aAbcde =>abbcde
2. ⛺️规范规约
-
基本概念:
-
短语:令G是一个文法,S是文法的开始符号,假定aβδ是文法G的一个句型,如果有S=*>αAδ 且A=+>β,则β称是句型aβ8相对于非终结符A的短语。
-
直接短语:令G是一个文法,S是文法的开始符号,假定αβδ是文法G的一个句型,如果有S=*>αAδ 且A=+>β,则β称是句型αβδ相对于非终结符A的短语。如果有A=>β,则称β是句型αAδ相对于规则A→β的直接短语。
-
句柄:一个句型的最左直接短语。
-
以上基本不用看,看下图(有点丑我服了)
-
红色圆圈圈起来对应的子树是直接短语,红色加蓝色对应的子树是短语,其余都重复了。
-
直接短语:i1,i2,i3.
-
短语:i1,i2,i3,i1 i2,i1 i2 + i3.
-
句柄:i1
-
规律:
-
在一棵句型对应的语法树中,以某非终结符为根的两代以上的子树的所有末端节点从左到右排列就是相对于该非终结符的一个短语,比如i1," * ",i2是以T为根的子树,这棵子树有四层,该子树的末端是i1*i2。
-
如果子树只有两代,则该短语是直接短语,比如以F为根i1为孩子的子树和以F为根i2为孩子的子树以及以F为根i3为孩子的子树。
-
继续基本概念:
-
规范推导:即最右推导;
-
规范句型:由规范推导所得的句型称为规范句型;
-
规范归约:是关于句型a的一个最右推导的逆过程,也称最左归约。
3. 🦁规范规约的两个问题
- 如何在句型中找出句柄?
- 当相同的右部有很多时,选哪一个捏?
- 为了解决上面的两个问题,我们有两种思路:
- 1.不对规范文法进行操作,我们直接用算符优先分析法分析算符优先文法这种简单文法。
- 2.采取LR分析法。
- 下面两部分将依次介绍算符优先分析法和LR分析法。