I am writing一个GLR parser generator,并希望在互联网和死树种类上为与此算法相关的资源提供一些建议(对那些不熟悉极客的人来说)。
我知道Bison可以生成GLR解析器,并且根据GPL我可以检查它的代码,但是对这个算法有一个完整的描述会很好。
那么,有没有人知道我可以利用的任何好资源?感谢。
答案 0 :(得分:14)
我在网上遇到的一些好东西:
以及更多细节:
我知道第三个开源GLR解析器:DParser。
答案 1 :(得分:5)
Adrian Johnstone在GLR算法的高级版本上发表了大量工作。他的publications website可能是一个有趣的资源。
答案 2 :(得分:3)
本书中包含了我所见过的最佳描述,其中图片说明了算法的每一步:
对于伪代码,请转到源:Tomita的广义LR解析,第70页左右。 Farshi的论文包含一个简洁的描述。
这是我为qb.js(qbasic in javascript)尝试过的技巧之一。
答案 3 :(得分:2)
据我所知,它的功能与LALR解析器相同 - 除非它遇到歧义。
当它这样做时,它基本上分成对应于该点可能选项的单独解析,并继续串联 - 当解析失败时(由于遇到非法元素),它被简单地删除,因为它必须对于早先的含糊不清是一个错误的猜测。
最后,除了一个解析之外的所有解析都应该已经死亡 - 而幸存的解析是那些模糊点的“正确”解析。
答案 4 :(得分:0)
我刚刚发现比几年前我重新发明了 GLR 解析,因为我正在解析英文文本以提取项目的复杂描述。我想,对于我查看的每个标记,我都从初始状态重新开始,并且每个状态都有多个并行状态,并且在每个状态上,我保留了已合成的语义值堆栈。我以为我发明了一些很酷的新东西,结果发现它在 1974 年就已经完成了,叫做 GLR 解析。我仍然很难手动编码我的状态和转换,还没有退后一步考虑如何使用一些 BNF 之类的符号来定义我的语法。