自上而下的解析器分类

时间:2017-08-31 08:57:32

标签: parsing compiler-construction grammar context-free-grammar recursive-descent

我已经看过Alex Aiken的this course并阅读了许多其他资源。但我很难找到自上而下解析器的清晰分类

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

Backtracking VS Predictive

回溯

  

的一个解决方法解析。将实施回溯。根据这些信息,   解析器目前大约有输入,作出决定去与一个特定的   生产。如果这种选择导致了死胡同,解析器将不得不回溯到   决策点,向后移动通过输入,并重新开始制作不同   选择等等,直到它发现这是一个合适的生产或跑   出的选择。

预测

  

一个预测   解析器的特点是其选择的生产能力的基础上,仅适用   下一个输入符号和当前非末端的正在处理中。

递归下降VS表驱动

递归下降

  

一个   递归下降语法分析器包括几个小的功能,一个用于每个非终结在   语法。当我们分析一个句子,我们称之为对应左边的功能   我们正在申请作品的侧非终结。如果这些作品是递归的,   我们最终调用的功能的递归。

表驱动

  

有是用于实现使用一个表到生产存储与显式堆沿跟踪我们在分析

,其中的预测分析器的另一种方法

据我所知,我有四种不同类型的解析器:

  • 递归下降+回溯
  • 递归下降+预测
  • 表驱动+回溯
  • 表驱动+预测

如果我是正确的,有些人还可以告诉我LL(k)解析器在以下4种类型的解析器中的位置在哪里?

1 个答案:

答案 0 :(得分:1)

没有。你有:

  • 回溯与预测
  • 递归下降vs表驱动

所以你可以:

  • 递归下降回溯
  • 递归下降预测
  • 表格驱动回溯
  • table-driven predictive。

具体而言,“表/堆栈实现的递归下降”是一个矛盾。

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

  

在以下4种类型的解析器中LL(k)解析器落在哪里?

任何地方。