Parsing 如何为LL(k>;1)构造解析表?

Parsing 如何为LL(k>;1)构造解析表?,parsing,context-free-grammar,compiler-theory,ll,Parsing,Context Free Grammar,Compiler Theory,Ll,在web上,有很多示例展示了如何从LL(1)解析器的第一/跟随集为上下文无关语法构造解析表 但我没有发现任何与k>1病例相关的有用信息。甚至维基百科也没有提供这方面的信息 我希望它一定在某种程度上是相似的,但指向该领域现有研究的指针将非常有用。我几乎在为同样的问题而挣扎,构建LR解析器,而不是LL。我发现了一个比@cakeplus提到的LL(k)好一点的页面——还有免费的相关论文-- 然而,即使是这些也帮不了我多少忙。所以我从基础做起。如果有人感兴趣:战斗将继续:-)我有一本关于解析的好书,不幸

在web上,有很多示例展示了如何从LL(1)解析器的第一/跟随集为上下文无关语法构造解析表

但我没有发现任何与k>1病例相关的有用信息。甚至维基百科也没有提供这方面的信息


我希望它一定在某种程度上是相似的,但指向该领域现有研究的指针将非常有用。

我几乎在为同样的问题而挣扎,构建LR解析器,而不是LL。我发现了一个比@cakeplus提到的LL(k)好一点的页面——还有免费的相关论文--


然而,即使是这些也帮不了我多少忙。所以我从基础做起。如果有人感兴趣:战斗将继续:-)

我有一本关于解析的好书,不幸的是,它跳过了这个主题。我和你一样好奇。然而,据我的理解,k>1的算法实质上更复杂,在实践中完全不可行。我想我们会发现的!我不认为这是不可行的。至少ANTLR声明解析LL(K)(任意K)语法。使用递归下降解析器很容易,您只需维护一个look ahead列表。还有很多优化可以改进,比如记忆和回溯。不过,我不确定它对于表驱动的解析器是如何工作的!你已经弄明白了吗?不是真的-但是使用一个肮脏的工具:词法分析器部分将一些多个符号“包装”为一个,然后我使用LL(1)。然而,这种解决方案有局限性。我使用的是表驱动解析器,因为它似乎有最好的性能。从数学的角度来看,第一个和后面的字符串是k个字符,而不仅仅是一个字符。从实现的角度来看,如何匹配这些标记取决于如何表示标记。我希望我能找到一个算法来计算这些标记。我可能会进行逆向工程。@paulotorrens,从“Aho,A.V.,Ullman,J.D.:解析、翻译和编译的理论,第一卷:解析”开始。(大约是从1970年开始的,经典的龙之书忽略了这个算法)。这个解释有点简短,但很可靠,并且基于此,您应该能够编写程序。