LR语法分析技术

LR(k)语法分析概念

LR中的:

  • L表示对输入串进行从左到右扫描
  • R表示最右推导的逆过程
  • k表示最多向前看k个符号

当k的数量增大时,语法分析器的规模将急剧增大;

  • k = 0时,向前看符号只有当前输入符
  • k = 1时,向前看符号有当前输入符和FOLLOW(A)

FOLLOW(A):向前看符号。针对文法,而不是针对输入串。

LR语法分析技术:SLR技术

在这里插入图片描述
规约:栈顶的句柄从栈中弹出,然后将对应产生式的头部压入栈中
因此入栈的符号既有终结符id,*,+,(,)
也有非终结符 E,T,F

对每个产生式,跟踪栈中句柄的满足程度。
开始时,栈为空

增广文法

对文法的开始符号E,加一个产生式:E’ → E。 只有发生这个规约,才说进入接受状态。原因 在于出现E并不代表树生成完毕。
为什么E→E+T这个规约并不代表进入接受状态, 因为id+id+id, 就会有两次E→E+T规约,然后 才进入接受状态。

移入-规约决策问题研究的切入点——LR(0)项目

在LR分析中,每一次归约都以一条产生式为依据
就产生式A→XYZ进行规约 ,从时间概念上看,要X,Y,Z依 次进栈,最终紧挨,在栈顶。
为了区分不同的时间点,可在文法G的每个产生式的右部添加 一个圆点,称为文法G的LR(0)项目。
圆点前面代表“历史”(已识别的串),圆点后面代表“期待”
对产生式:A→XYZ,共有四个LR(0)项目:
A → ⋅ X Y Z , A → X ⋅ Y Z , A → X Y ⋅ Z , A → X Y Z ⋅ A→·XYZ, A→X·YZ, A→XY·Z, A→XYZ· AXYZAXYZAXYZAXYZ

LR(0)项目的闭包——项集

项集 I 0 I_0 I0:当前E’ → E归约要发生时,语法分析完成

闭包:直接关系、间接关系、所有可能的情形

E ′ → ⋅ E E'→·E EE:期待E的出现。加进来的这些LR(0)项目,都会助推E的出现。

在这里插入图片描述
期待E的出现。E的出现,又取决于T的出现。T的出现,又取决于F 的出现。F的出现,又要首先出现(或者id。
再倒过来,id出现,就可规约出F。F的出现,就可规约出T。T的 出现,就可规约出E。E的出现,就可能规约出E’.

项集I的GOTO函数: GOTO(I,X)

对一个项集合I,当一个符号X(终结符,或非终结符)进栈 时,该项集发生的变迁
在这里插入图片描述
在这里插入图片描述

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值