GLR解析算法资源

时间:2010-01-25 00:22:48

标签: compiler-construction parsing parser-generator glr

I am writing一个GLR parser generator,并希望在互联网和死树种类上为与此算法相关的资源提供一些建议(对那些不熟悉极客的人来说)。

我知道Bison可以生成GLR解析器,并且根据GPL我可以检查它的代码,但是对这个算法有一个完整的描述会很好。

那么,有没有人知道我可以利用的任何好资源?感谢。

5 个答案:

答案 0 :(得分:14)

我在网上遇到的一些好东西:

以及更多细节:

我知道第三个开源GLR解析器:DParser

答案 1 :(得分:5)

Adrian Johnstone在GLR算法的高级版本上发表了大量工作。他的publications website可能是一个有趣的资源。

答案 2 :(得分:3)

本书中包含了我所见过的最佳描述,其中图片说明了算法的每一步:

http://books.google.ca/books?id=05xA_d5dSwAC&lpg=PA381&dq=generalized%20deterministic%20parsers&pg=PA381#v=onepage&q=generalized%20deterministic%20parsers&f=false

对于伪代码,请转到源:Tomita的广义LR解析,第70页左右。 Farshi的论文包含一个简洁的描述。

http://books.google.ca/books?id=PvZiZiVqwHcC&lpg=PP1&dq=generalized%20lr%20parsing&pg=PA70#v=onepage&q=&f=false

这是我为qb.js(qbasic in javascript)尝试过的技巧之一。

答案 3 :(得分:2)

据我所知,它的功能与LALR解析器相同 - 除非它遇到歧义。

当它这样做时,它基本上分成对应于该点可能选项的单独解析,并继续串联 - 当解析失败时(由于遇到非法元素),它被简单地删除,因为它必须对于早先的含糊不清是一个错误的猜测。

最后,除了一个解析之外的所有解析都应该已经死亡 - 而幸存的解析是那些模糊点的“正确”解析。

答案 4 :(得分:0)

我刚刚发现比几年前我重新发明了 GLR 解析,因为我正在解析英文文本以提取项目的复杂描述。我想,对于我查看的每个标记,我都从初始状态重新开始,并且每个状态都有多个并行状态,并且在每个状态上,我保留了已合成的语义值堆栈。我以为我发明了一些很酷的新东西,结果发现它在 1974 年就已经完成了,叫做 GLR 解析。我仍然很难手动编码我的状态和转换,还没有退后一步考虑如何使用一些 BNF 之类的符号来定义我的语法。