电子科技大学编译原理复习笔记(七):自下而上语法分析

目录

前言

重点一览

引言

自下而上分析

分析方法

规范规约(最左规约,对应最右推导) 

算符优先分析法

算符优先文法

最左素短语

举个例子

优先关系表的构造 

规范规约与算符优先分析

LR分析法

概述

LR(0)项目集规范族

项目与分类 

状态转换图 

项目的有效性

有效项目集

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

SLR(1)分析表的构造

本章小结


前言

本复习笔记基于张老师的课堂PPT,供自己期末复习与学弟学妹参考用。


重点一览

LR与SLR 


引言

自下而上分析

输入串出发,寻找归约序列,逐步进行归约,直至开始符号S

方法:采用栈,移进--归约,在移进的过程中,观察栈顶是否形成某个产生式的一个候选。

         1)采用栈,将输入符号移进栈中

         2)如果栈顶(一个或多个符号)形成某个非终结符号的候选式

         3)则进行归约:

                ◼ 将候选式出桟

                ◼ 归约后的非终结符号移进栈

         4)重复进行上述过程,直到输入串扫描结束。

         5)如果栈内只剩下开始符号S,则输入串是文法合法的句子。

语法分析过程可以用分析树形成过程来表示

语法分析过程也可以用语法树修剪过程来表示 

两种冲突:

        ◼ 移进与归约的冲突

        ◼ 归约与归约的冲突

可归约串的不同的定义,形成不同的语法

分析方法

算符优先分析法最左素短语

LR分析法:句柄

规范规约(最左规约,对应最右推导) 

α是文法G的一个句子序列αn,αn-1,…,α0 满足下述条件时称为 规范归约 :
(1)αn = α
(2)α0为文法的开始符, 即α0=S
(3)对 i, 0<i n,将 i 句柄 归约 得αi-1
例子:

 

注意:按 最左素短语 归约是 结构归约
处于栈顶待归约的最左素短语与对应的产生
式在 结构上一致
即长度一致, 对应的终结符一致
非终结符 可以 不一致

最左素短语归约 的优缺点
优点:
        ◼ 按照最左素短语进行的归约 省略了 A →α的产生式的使用。
        ◼ 其中:α∈V N + (非终结符号串)
缺点:
        ◼ 并不是任何文法都可以按照最左素短语进行归约。
        ◼ 例如:S →AB; A →a; B →b
部分文法可以进行算符优先分析;
所有文法可以进行LR分析。

算符优先分析法

  • 基于终结符号之间的归约顺序进行语法分析
  • 其关键在于比较两个相继出现的终结符的优先级而决定采用的动作。
  • 在算术表达式中,有运算符号的优先级和结合性的规定
  • 算符优先分析法的实质就是仿效表达式的计算过程而设计的

算符优先文法

定义:上下文无关文法G,如果没有形如P→ε 或P→. . .QR. . .的产生式,则称G为算符文法

相邻的2个终结符 之间的优先关系:
(1) a=b
G有P→…ab… 或 P→…aQb…
(2) a<b
G有P→ …aQ… 且Q=> +b… 或 Q=>+Rb …
(3) a>b
G有P→ …Qb… 且Q=>+ …a 或 Q=>+…aR

说人话:大小写挨着的,大写字母能推出来的小写字母优先级高

算符优先文法:

 

 

若算符文法G的任何终结符a、b之间的优先关系 至多只有 = 、>、<中的 一个
或者终结符a、b之间没有优先关系
则G称为 算符优先文法
注意
(1)相同终结符的优先关系未必是=
(2)有a<b,未必有 b>a
(3)a、b之间未必一定有优先关系
故= 、<、>不同于关系运算符“等于”、“小于”、“大于”

最左素短语

 

举个例子

 

 

优先关系表的构造 

FIRSTVT集求法

 

LASTVT集求法

 

矩阵规则(了解就行)

 

(说白了就是集合里有就打上1) 

规范规约与算符优先分析

1)规范归约
严格按照句柄进行归约, 终结符和非终结符一起考虑
只要栈顶形成句柄,不管句柄内是否包含终结符都要进行归约。
2)算符优先分析
仅研究终结符之间的优先关系,而 不考虑非终结符之间的优先关系
但句柄是由终结符和非终结符一起构成的,所以算符优先分析相对来说是非规范的分析。


LR分析法

概述

LR分析法 从左向右 扫描输入串,分析 栈中符号 向前搜索 K个输入符号以确定是否已在栈顶形成 句柄, 从而决定应采取的动作。一般只考虑K≦1的情况。
“L”是指从左至右扫描输入符号串
“R”是指构造一个最右推导的逆过程
“k”是指为了作出分析决定而向前看的输入符号的个数
 
有action表和goto表
(1)action[s,a]
在状态 s 下, 当前输入符号为 a
应采取的分析动作:  移进, 归约,接收, 出错
a. 移进 s 例如 s3
b. 归约 r 例如 r3
c. 接受 acc
d. 出错 error
(2) goto[s,A]表
状态及非终结符的二维矩阵
在状态 s 下, 针对归约后的符号 A 入栈状态

例子:

LR(0)项目集规范族

活前缀的概念: 规范句型 中的不含句柄之后任何符号的一个 前缀

活前缀与句柄的三种关系 

 

例子:

 

项目与分类 

 

 

状态转换图 

项目就是把所有的产生式右边挨个加圆点

 

项目的有效性

 

有效项目集

 

闭包函数closure(I)

 

转换函数goto(I, X) 

 

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

 

 

举个例子:

 

 

 

 

 

 

⭐如果有移进规约冲突,则此文法既不是LR文法也不是SLR文法

SLR(1)分析表的构造

 

 

 

举个例子:

 

 

SLR分析表构造步骤 

 

 

 

 


本章小结

重点掌握算符优先分析法、LR与SLR分析法

猜你喜欢

转载自blog.csdn.net/m0_59180666/article/details/130938715