【问题标题】:How to construct parsing table for LL(k>1)?如何为 LL(k>1) 构造解析表?
【发布时间】:2012-02-18 12:49:10
【问题描述】:

在网络上,有很多示例展示了如何从 LL(1) 解析器的第一/后集构建上下文无关文法的解析表。

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

我希望它必须在某些方面相似,但指向该领域现有研究的指针会非常有帮助。

【问题讨论】:

  • 我有一本关于解析的好书,不幸的是,它跳过了这个话题。我和你一样好奇。不过,据我了解,k > 1 的算法在实践中涉及更多且完全不可行。我想我们会发现的!
  • 我不认为这是不可行的。至少 ANTLR 声称可以解析 LL(K)(使用任何 K)语法。
  • 使用递归下降解析器很容易,您只需维护一个前瞻列表。然后有很多优化可以改进这一点,例如记忆和回溯。虽然不确定它如何用于表驱动的解析器!你想清楚了吗?
  • 不是真的 - 但使用一个肮脏的解决方法:词法分析器部分将一些多符号“包装”为一个,然后我使用 LL(1)。然而,这个解决方案有局限性。我正在使用表驱动解析器,因为它似乎具有最佳性能。
  • 从数学的角度来看,first 和 follow 集中的字符串长度为 k 个字符,而不仅仅是单个字符。从实现的角度来看,你如何实际匹配这些取决于你如何表示你的令牌。

标签: parsing context-free-grammar compiler-theory ll


【解决方案1】:

我在同样的问题上遇到了很多困难,构建 LR 解析器,但不是 LL。我找到了比@cakeplus提到的LL(k)更好的页面——http://www.seanerikoconnor.freeservers.com/ComputerScience/Compiler/ParserGeneratorAndParser/QuickReviewOfLRandLALRParsingTheory.html还有免费的相关论文——http://ci.nii.ac.jp/naid/110002673618/

但是,即使是这些也对我没有多大帮助。所以我从基础开始。如果有人感兴趣:https://aboutskila.wordpress.com/2013/06/14/lalrk-first-sets/,战斗将继续:-)

【讨论】:

  • 我希望我能找到一种算法来计算这些。我可能会对this 进行逆向工程。
  • @paulortorrens,从“Aho, A.V., Ullman, J.D.: The Theory of Parsing, Translation, and Compiling, Volume I: Parsing”开始。 (它是从 1970 年左右开始的,经典的龙书错过了这个算法)。解释有点简短,但很扎实,基于此,您应该能够编写程序。
猜你喜欢
  • 1970-01-01
  • 2021-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-12
  • 1970-01-01
相关资源
最近更新 更多