5
从Earley解析器恢复解析森林?
我最近在阅读Earley解析器,并认为它是迄今为止我见过的最优雅的算法之一。但是,从传统意义上讲,该算法是识别器,而不是解析器,这意味着它可以检测字符串是否与特定的CFG匹配,但不会为其生成解析树。我的问题是如何不恢复解析树,而是恢复给定输入字符串的所有可能解析的解析林。 在Grune和Jacob的“解析技术:实用指南”中,他们说明了可用于从Earley识别器的结果中恢复解析森林的算法,但是该算法基于Unger的解析方法,其运行时间为O(n k + 1),其中k是语法中最长产生式的长度。这意味着运行时不是语法大小的多项式。此外,Earley关于该算法的原始论文提出了一种用于恢复解析森林的算法,该建议是不正确的(例如,参见Tomita的本文的第762页),尽管许多消息来源仍将其作为恢复解析森林的适当方法。 。 我的问题是,是否可以在多项式时间内为给定的输入字符串恢复一个解析森林。我在这里找到了一篇论文,该论文提供了一种使用PDA模拟为任何解析生成立方大小的解析森林表示形式的算法,因此这似乎应该可行,但是我还没有找到任何方法来做到这一点。理想情况下,我希望不将输入语法转换为CNF(确实可以解决问题),因为生成的解析林将非常混乱。 谢谢你尽你所能的帮助!