【编译原理】第6章 自下而上的语法分析——LR分析

本文深入解析LR语法分析方法,涵盖自底向上分析的关键概念,如可归前缀、活前缀,以及构造识别活前缀的有穷自动机。探讨了LR分析器的构造过程,包括分析表的组成和分析过程,重点讲解了活前缀的识别方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

6 自下而上的语法分析——LR分析


一、LR分析器

在这里插入图片描述在这里插入图片描述
分析表的组成
在这里插入图片描述在这里插入图片描述
LR分析过程
在这里插入图片描述
在这里插入图片描述
自底向上分析法的关键问题是在分析过程中如何确定句柄。
LR方法中的句柄是通过求可归前缀而求得。

二、可归前缀与活前缀

在这里插入图片描述  在这里插入图片描述
规范句型的这种前部分符号串称为可归前缀
我们把形成可归前缀之前包括可归前缀在内的所有规范句型的前缀都称为活前缀

在这里插入图片描述
活前缀
在这里插入图片描述
LR分析需要构造识别活前缀的有穷自动机

  • 可以文法的终结符和非终结符都看成有穷自动机的输入符号,每次把一个符号进栈看成已识别过了该符号,同时状态进行转换,当识别到可归前缀时,相当于在栈中形成句柄,认为达到了识别句柄的终态。
    在这里插入图片描述

三、构造识别活前缀的有穷自动机

1、 已有活前缀构造有限自动机

在这里插入图片描述

2、 活前缀及其可归前缀的一般计算方法

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

3、 项目形式

由文法的产生式直接构造识别活前缀和可归前缀的有限自动机
项目:在每个产生式的右部适当位置添加一个圆点构成项目
在这里插入图片描述
项目分类
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述 在这里插入图片描述
构成识别一个文法活前缀的 D F A DFA DFA 项目集(状态)的全体称为这个文法的LR(0)项目集规范族
NFA确定化为DFA的工作量较大,我们考虑直接构造出项目集作为DFA的状态,就可直接构造DFA
通过闭包函数(CLOSURE)来求DFA一个状态的项目集
在这里插入图片描述
一个项目集可能包含多种项目
a) 移进和归约项目同时存在。 移进-归约冲突
b) 归约和归约项目同时存在。 归约-归约冲突

LR(0)文法:若其LR(0)项目集规范族不存在移进-归约,或归约-归约冲突,称为LR(0)文法。
在这里插入图片描述
圆点不在产生式右部最左边的项目称为,唯一的例外是 S ’ → • S S’→ • S SS。因此用 G O T O ( I , X ) GOTO(I,X) GOTOIX转换函数得到的J为转向后状态所含项目集的核

使用闭包函数( C L O S U R E CLOSURE CLOSURE)和转向函数( G O T O ( I , X ) GOTO(I,X) GOTO(I,X))构造文法 G ’ G’ G L R ( 0 ) LR(0) LR(0)的项目集规范族,步骤如下:
a)置项目 S ’ → • S S’→ • S SS为初态集的核,然后对核求闭包 C L O S U R E ( S ’ → • S ) CLOSURE({S’→ • S}) CLOSURESS得到初态的项目集
b)对初态集或其它所构造的项目集应用转换函数 G O T O ( I , X ) = C L O S U R E ( J ) GOTO(I,X)= CLOSURE(J) GOTO(IX)=CLOSURE(J)求出新状态J的项目集
c)重复b)直到不出现新的项目集为止
在这里插入图片描述


LR分析器的构造
①构造识别文法活前缀的确定有限自动机
②根据该自动机构造相应的分析表(ACTION表、GOTO表)
在这里插入图片描述


总结:构造识别文法活前缀DFA的三种方法

  • 根据形式定义求出活前缀的正规表达式,然后由此正规表达式构造 N F A NFA NFA再确定化为 D F A DFA DFA
  • 求出文法的所有项目,按一定规则构造识别活前缀的 N F A NFA NFA再确定化为 D F A DFA DFA
  • 使用闭包函数( C L O S U R E CLOSURE CLOSURE)和转向函数( G O T O ( I , X ) GOTO(I,X) GOTO(I,X))构造文法 G ’ G’ G L R ( 0 ) LR(0) LR(0)的项目集规范族,再由转换函数建立状态之间的连接关系得到识别活前缀的 D F A DFA DFA

bingo~   ✨ 耐心和持久胜过激烈和狂热。不管环境变换到何种地步,只有初衷与希望永不改变的人,才能最终克服困难,达到目的。

——《海底两万里》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值