首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将LR状态合并成LALR语法分析的集合

将LR状态合并成LALR语法分析的集合
EN

Stack Overflow用户
提问于 2014-04-09 14:32:31
回答 1查看 572关注 0票数 1

如果假设我有以下状态:

I1: S->TaV.,$

T -> V.,a

I2: T -> V.,a|$

我会合并这些州吗?

基本上,我想知道I1的核心是什么。是{S->TaV.,T->V} I1的核心,还是说I1包含两个核心-- S->TaV & T->V

Dragonbook说,对于LR(1)项集合中的每个核心,找到所有具有该核心的集合,并将其替换为它们的联合。

现在,如果{S->TaV.,T->V.}是I1的核心,所以我不会合并这些集合。但是,对于核心T->V.,I1和I2都包含核心,因此必须由它们的联合代替。

那么我该不该合并这些场景?

一些可能有用的背景细节:

最初的语法是

G: S->TaV | T

T->V | b

V->Ta | c

EN

回答 1

Stack Overflow用户

发布于 2014-05-13 06:09:07

LALR(1)解析器生成器不按字面意思合并状态。它检查新创建的状态是否已经创建。它通过比较核心项将新状态与所有其他状态进行比较。如果核心项是相同的(相同数量的项和相同的项),那么新创建的状态将被丢弃,并且转换应该转到旧状态。

LALR(1)解析器生成器构建LR(0)状态机,并且在状态构造过程中不关心外观。它只关心项目集。所以答案是否定的,这两种状态不应该合并,因为I1有两个核心项,I2有一个核心项。

合并状态的思想适用于最小LR(1)状态构造,这是一个比LR(0)状态构造更复杂的过程。

这是一个LALR语法分析问题,而不是语法解析问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22965792

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档