我最近遇到了一篇描述标题中提到的解析技术的论文。不幸的是,上述论文中使用的术语超出了我的理解范围,因此我一直在尝试更直观地理解构造算法。我相信我成功了(本次演讲是啊哈时刻的源头),但是不胜感激的是,无论是熟悉该技术还是其中所包含的术语的人,都可以对其进行验证。
我将描述我对解决方案的看法(如果正确的话,我相信它可能会对尝试理解该技术的其他人有所帮助),然后再提出其他问题。为了确保有没有误会,我将使用下列标准符号:,甲,乙,Ç ,。。。∈ Ñ,。。。X ,ÿ ,ž ∈ Ñ ∪ Ť,α ,β和,如在造纸,甲我 →交通 ω表示规则号我。但是,对于概念,我可能会使用与原始论文不同的名称。
此外,在整个说明书中,等价关系被使用。
施工
解析自动机内部有两种类型的项目:形式的简单LR(0)项目(我称之为移位项目) 和A i → α ∙ β ,m ,n形式的我称为解决项目项目 ; 这些命令告诉解析器将n个符号推回输入流,然后对第一个β符号减少规则数m。
语法增加有规则与移位项目开工小号” 0 → ∙ 小号$初始状态。
现在,要构造自动机,请为状态为每一项确定这些替代方案:
如果该项目是转移项目,则自动机中将存在一个过渡q X → q ′,其中 X是β的第一个符号。
如果该项目是成品移项,添加一个解决项乙Ĵ →交通 α 甲∙ β ,我,0为每个规则乙Ĵ →交通 α 甲β。
如果该项目是可分解项目,则X为β的第一个符号。如果X,加移项 X Ĵ →交通 ∙ ω为每个规则 X Ĵ →交通 ω。如果除 A i → α ∙ β ,m ,n以外的其他项将 X作为其点超前,则添加过渡 q X → q ′自动机。每决心项在q将导致决心项Ç 我 →交通 α X ∙ β ,米,Ñ + 1在q '。
如果该项目是一个解决项它不会提供任何先行信息,并且可以被丢弃,而是在第一次添加的决心项乙Ĵ →交通 α 甲∙ β ,米,Ñ为每个规则 乙Ĵ →交通 α 甲β。
当然,这只是一个草图。实际上,必须先计算状态的关闭,然后才能处理过渡/偏移和分辨率。
之后,将自动机转换为移位解析分析表就变得很简单了。只是,作为一个较小的变化,该论文的作者解释的决议为接受的行动。给定生成的自动机,我发现将$的移位简单地视为接受动作比较方便。
问题
第一个显然是上述过程是否正确。
第二个是关于等价关系。我只能猜测等价关系是决定当看到完成的班次项目时要引入哪些解决项目的原因。κ 0似乎导致先行惊人地相似于˚F ö 大号大号ö W¯¯ 大号中号套LSLR解析器。本文在第11页上介绍了“更精细的等价关系”。有没有办法以直觉的方式解释这种关系?还有其他关系吗?
最后一个是解决冲突。论文很好地描述了什么是移位解决自动机中的不足之处。是否有解决这些不足之处的方法,类似于解决传统LR解析器中的冲突的方法?是否可以在ShRe解析器生成器中通过优先级和关联性来实现类似yacc风格的冲突解决方案?
谢谢,如果您阅读了所有这些内容,任何答案将不胜感激:)