编译原理 - 语法分析(自下而上分析)

两种语法分析对比

在这里插入图片描述

自下而上语法分析(Bottom-up)

核心思想 - (移进-规约)

移进 : 移进到栈里,当形成产生式时就弹出(规约)

在这里插入图片描述

规约 : 右部符号替换为左部符

规约:右部符号替换为左部符号
原式:i*i+i 规约后 : E
从下往上合并的过程
右部符号i 替换为 左部符号E
在这里插入图片描述

移进-规约 例题

在这里插入图片描述当规约过程中,有多重选项,这个时候我到底哪个规约哪个不规约 - 核心问题 :识别可规约串

核心问题 - 识别可规约串 (短语)

β可以由非终结符A多步推出
αβ△是一个句型,当β由A替换后,αA△仍然是一个句型 
 此时称呼β是αβ△相对于A的短语

子串能够向上规约成一个非终结符号A
这个非终结符A 和上下文一起 仍然是一个句型
在这里插入图片描述

直接短语

β由A一步推出,那么β是αβ△的直接短语
在这里插入图片描述

句柄 : 一个句型的最左直接短语

在这里插入图片描述
在这里插入图片描述

短语和直接短语的例题

已知文法和句型,写出对应的短语和直接短语

先按照句型格式展开对应文法 ,套定义进行判断

在这里插入图片描述以某结点为根的树,末端从左往右 就是短语
子树只有两代,该短语就是直接短语
在这里插入图片描述

分析过程描述

在这里插入图片描述

分析方法

算符优先分析法

算符优先分析法 - 表达式分析

算符优先分析法: 按照 算符的优先关系 和结合性质进行语法分析

存在问题 : 归约顺序不同,构造出的语法树不同,计算顺序不同,结果不一样

解决: 设定算符的优先顺序,使得归约过程唯一

在这里插入图片描述左侧的文法 : 需要时刻记住先乘除后加减的优先级
右侧的文法: 蕴含了算符的优先级,直接无脑展开即可
自下而上 : 右边的 凑对后 = 文法左边的式子
在这里插入图片描述

优先关系

+<·+ 左边加号的优先级比右边加号的优先级要低
在这里插入图片描述

算符文法 - 不会出现连续的非终结符的文法

算符文法 : E+
不是算符文法:EF
在这里插入图片描述

算符优先文法

a优先级与b相同: ab,或者aQb是一起归约到P上去

  • P-> …ab…
  • P-> …aQb…
    eg : (E) 推导出 左括号和右括号的优先级相等,符合 aQb型
    在这里插入图片描述
    a的优先级低于b :
  • P-> …aR… R=>b…
  • P-> …aR… R=>Qb…
    eg: E->E+E E=>E*E ∴ + <· * 加号优先级低于乘号优先级
    先归约a后面的 ,然后再用这个整体来和a归约在这里插入图片描述

a的优先级高于b:

  • P->…Rb… R=>…a
  • P->…Rb… R=>…aQ
    优先级高的先归约
    eg: E->E × E E=>E+E ∴ + ·> × 推理出加号的优先级高,这与第二个例子推出的相矛盾
    在这里插入图片描述
    算符优先文法 : 推理的关系不存在矛盾的情况
    文法G中任何终结符对(a,b) 只满足优先级相等, a优先级高,a优先级低着三个关系之一 - 称G位算符优先文法

在这里插入图片描述…ab… 相等关系
…aR… + R->b… =>…ab…或者aQb… a<·R(b)
…Rb… + R->…a => …ab… 或者…aQb… R(a)·>b

算符优先文法例题

在这里插入图片描述

构造优先关系表
优先级相等

检查 优先级相等 无需检查推导式,只需检查所有候选式是否满足ab 或者aQb
在这里插入图片描述

优先级低和优先级高 - FIRSTVT集合和LASVT集合

VT :非终结符
P能推理出a…或者Qa… 那么a可以进入这个FIRSTVT§ : a在首位12位置
P能推理出…a或者…aQ,那么a可以进入这个LASVT§ : a在末尾12位置
在这里插入图片描述在这里插入图片描述

构造FIRSTVT§的算法

具体实现 : 栈 + 数组
在这里插入图片描述

构造LASTVT§的算法

在这里插入图片描述

FIRSTVT的计算

划首位两个元素
在这里插入图片描述

LASTVT的计算

划末尾两个元素 不断循环 直到没有新的元素进入集合
在这里插入图片描述

构造优先关系表

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

算符优先分析算法

自下而上的核心 : 识别可归约串 - 素短语

最左素短语

在这里插入图片描述短语 : 任何子树两层或两层以上的末端 连接起来
直接短语 : 两层子树末端
素短语: 包含终结符的短语 , 且 内部没有比他更小的素短语
最左素短语 : 最左边的素短语
在这里插入图片描述可以通过语法树知道最左素短语,但是语法树也是需要推导的最终结果,所以不能依赖语法树

最左素短语定理

最左子串 : 最左的终结符 优先级 比 外面的aj-1要高, 内部的终结符优先级都相等, 最右的终结符 优先级 比 ai+1 要高
这个红色的子串 就是 最左素短语
Njaj…NiaiNi+1 这一串 就是 最左素短语
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

算符优先分析结果 != 语法树

在这里插入图片描述

LR分析法 - 规范归约的过程

规范归约:句柄作为可归约串
L : 从左到右扫描输入串
R : 自下而上进行归约
在这里插入图片描述

句柄和规范归约

在这里插入图片描述在这里插入图片描述

用句柄归约

在这里插入图片描述

规范归约 - 结果是语法树

在这里插入图片描述在这里插入图片描述

规范句型

在这里插入图片描述

  • 5
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值