我知道自下而上的解析从叶子开始并构建到根节点,而自上而下从根开始并使其下降,对这些问题进行了一些研究,并了解它们是如何形成的已修改但无法直接回答为什么这不起作用。任何帮助表示赞赏。
答案 0 :(得分:1)
[OP改变了&#34的问题标题;为什么不能使用" 到"为什么不适合。 .." 反过来又将我的评论改为答案,所以我将其发布为一个。]
您可以将左或右递归规则与任何LR(k)解析算法一起使用。
如果要构建树,正确的递归规则会导致解析过程的有趣属性:您必须保持堆栈与正确的递归一样深,以跟踪收集的节点。
人们会在列表中为您提供包含一百万个项目的源文件,因此您的堆栈必须是那么深。使用正确的递归规则,这可能足够深,如果你有一个固定大小的堆栈,你就会用完空间。
通常使用处理器的自然下推堆栈来实现解析器堆栈。我们常见的操作系统(Windows,Linux)及其常见的编译器碰巧为您提供 exactly such fixed size pushdown stacks,因此在某种意义上它们会加剧这个问题。
使用左递归规则,在每个列表项之后减少,因此堆栈可以基本上是单位深度。这非常友好:不会崩溃,并且可以很好地使用缓存。