目录
前言
本复习笔记基于张老师的课堂PPT,供自己期末复习与学弟学妹参考用。
重点一览
LR与SLR
引言
自下而上分析
从输入串出发,寻找归约序列,逐步进行归约,直至开始符号S
方法:采用栈,移进--归约,在移进的过程中,观察栈顶是否形成某个产生式的一个候选。
1)采用栈,将输入符号移进栈中
2)如果栈顶(一个或多个符号)形成某个非终结符号的候选式
3)则进行归约:
◼ 将候选式出桟
◼ 归约后的非终结符号移进栈
4)重复进行上述过程,直到输入串扫描结束。
5)如果栈内只剩下开始符号S,则输入串是文法合法的句子。
语法分析过程可以用分析树的形成过程来表示
语法分析过程也可以用语法树的修剪过程来表示
两种冲突:
◼ 移进与归约的冲突
◼ 归约与归约的冲突
对可归约串的不同的定义,形成不同的语法
分析方法
算符优先分析法:最左素短语
LR分析法:句柄
规范规约(最左规约,对应最右推导)
算符优先分析法
- 基于终结符号之间的归约顺序进行语法分析
- 其关键在于比较两个相继出现的终结符的优先级而决定采用的动作。
- 在算术表达式中,有运算符号的优先级和结合性的规定
- 算符优先分析法的实质就是仿效表达式的计算过程而设计的
算符优先文法
定义:上下文无关文法G,如果没有形如P→ε 或P→. . .QR. . .的产生式,则称G为算符文法。
说人话:大小写挨着的,大写字母能推出来的小写字母优先级高
算符优先文法:
最左素短语
举个例子
优先关系表的构造
FIRSTVT集求法
LASTVT集求法
矩阵规则(了解就行)
(说白了就是集合里有就打上1)
规范规约与算符优先分析
LR分析法
概述
LR分析法 从左向右 扫描输入串,分析 栈中符号 及 向前搜索 K个输入符号以确定是否已在栈顶形成 句柄, 从而决定应采取的动作。一般只考虑K≦1的情况。“L”是指从左至右扫描输入符号串“R”是指构造一个最右推导的逆过程“k”是指为了作出分析决定而向前看的输入符号的个数有action表和goto表(1)action[s,a]◼ 在状态 s 下, 当前输入符号为 a 时◼ 应采取的分析动作: 移进, 归约,接收, 出错 。a. 移进 s 例如 s3b. 归约 r 例如 r3c. 接受 accd. 出错 error(2) goto[s,A]表◼ 状态及非终结符的二维矩阵◼ 在状态 s 下, 针对归约后的符号 A 的 入栈状态 。
例子:
LR(0)项目集规范族
活前缀与句柄的三种关系
例子:
项目与分类
状态转换图
项目就是把所有的产生式右边挨个加圆点
项目的有效性
有效项目集
闭包函数closure(I)
转换函数goto(I, X)
LR(0)项目集规范族的构造
举个例子:
⭐如果有移进规约冲突,则此文法既不是LR文法也不是SLR文法
SLR(1)分析表的构造
举个例子:
SLR分析表构造步骤
本章小结
重点掌握算符优先分析法、LR与SLR分析法