Parsing 自顶向下的解析器分类

Parsing 自顶向下的解析器分类,parsing,compiler-construction,grammar,context-free-grammar,recursive-descent,Parsing,Compiler Construction,Grammar,Context Free Grammar,Recursive Descent,我看了Alex Aiken的节目,阅读了许多其他资源。但我正在努力寻找自上而下解析器的清晰分类 也没有提供一个明确的分类,但至少给出了一些我将在文章中使用的定义。这是我到目前为止的分类: 回溯与预测 回溯 解析的一个解决方案是实现回溯 解析器当前对输入有一个定义,决定使用一个特定的 如果这个选择导致了一个死胡同,解析器将不得不回溯到那个死胡同 决策点,在输入中向后移动,然后重新开始做出不同的决策 选择等等,直到找到合适的产品或运行 别无选择 预测的 预言家 解析器的特点是它能够选择只在基础上应用

我看了Alex Aiken的节目,阅读了许多其他资源。但我正在努力寻找自上而下解析器的清晰分类

也没有提供一个明确的分类,但至少给出了一些我将在文章中使用的定义。这是我到目前为止的分类:

回溯与预测 回溯

解析的一个解决方案是实现回溯 解析器当前对输入有一个定义,决定使用一个特定的 如果这个选择导致了一个死胡同,解析器将不得不回溯到那个死胡同 决策点,在输入中向后移动,然后重新开始做出不同的决策 选择等等,直到找到合适的产品或运行 别无选择

预测的

预言家 解析器的特点是它能够选择只在基础上应用的产品 下一个输入符号和正在处理的当前非终结符的

递归下降与表驱动 递归下降

A 递归下降解析器由几个小函数组成,每个函数对应于 语法。当我们解析一个句子时,我们调用对应于左边的函数 我们正在应用的乘积的边非终结符。如果这些乘积是递归的 我们最终递归地调用函数

表驱动

还有另一种实现预测解析器的方法,它使用一个表来存储该产品以及一个显式堆栈来跟踪我们在解析中的位置

据我所知,现在我有四种不同类型的解析器:
  • 递归下降+回溯
  • 递归下降+预测
  • 表驱动+回溯
  • 表驱动+预测
如果我是正确的,是否有人能告诉我在以下4种类型的解析器中,
LL(k)
解析器位于何处?

否。您有:

  • 回溯与预测
  • 递归下降与表驱动
因此,您可以:

  • 递归下降回溯
  • 递归下降预测
  • 带回溯的表驱动
  • 表驱动预测
具体来说,“带表/堆栈实现的递归下降”在术语上是矛盾的

所有表驱动的解析器实现都需要一个堆栈。这不是二分法

在以下4种类型的解析器中,LL(k)解析器位于何处


任何地方。

谢谢,看来我做对了。好极了我想写
表驱动的
,但后来看到了一些使用堆栈的实现。你是说这里有一个矛盾
表/堆栈实现
?为什么?另外,
LL
LL(1)
LL(k)
解析器在这个分类中属于哪一类?您似乎弄错了,因为您说出了一个矛盾的术语:递归下降表驱动。所有自顶向下的解析器都是LL。k只是向前看的程度。通常它是1,因为k>1总是可以减少到k=1。啊,我现在明白你的意思了,我在从2个可能的集合中选择4个类别时犯了一个错误。谢谢我已经改变了职位。但是我得到的两个主要类别是对的,对吗?而且,你说所有的LL自顶向下的解析器都是LL。因此,如果有一个lookeahed,它是
LL(1)
,它是
递归下降+预测
表驱动+预测
。如果有向前看,它是
LL(k)
,这是
递归下降+回溯
表驱动+回溯
。是吗?@MaximKoretskyi不,我说的是我说的。所有LL解析器都是LL。我没有说,但我不需要说:这是一个同义反复。LL解析器要么是递归下降,要么是表驱动:不能同时使用两者。这在术语上是矛盾的。这是第三次。你在胡说八道。