📜  编译器设计中的预测分析器

📅  最后修改于: 2021-06-30 01:25:18             🧑  作者: Mango

在本文中,我们将介绍Predictive Parser的概述,并主要关注Predictive Parser的作用。并且还将介绍实现Predictive解析器算法的算法,最后将通过实现用于优先级解析的算法来讨论一个示例。让我们一一讨论。

预测解析器:
预测解析器是没有回溯或备份的递归下降解析器。它是自上而下的解析器,不需要回溯。在每个步骤中,将在下一个终端符号上选择要扩展的规则。
考虑

A -> A1 | A2 | ... | An

如果非终端要进一步扩展为“ A”,则仅基于当前输入符号“ a”选择规则。

预测解析器算法:

  1. 为每个语法规则制作一个过渡图(DFA / NFA)。
  2. 通过减少状态数来优化DFA,得到最终的过渡图。
  3. 在过渡图上模拟字符串以解析字符串。
  4. 如果在使用完输入之后转换图达到接受状态,则将对其进行解析。

考虑以下语法–

E->E+T|T
T->T*F|F
F->(E)|id

删除左递归后,左分解

E->TT'
T'->+TT'|ε
T->FT''
T''->*FT''|ε
F->(E)|id

步骤1:
为每个语法规则制作一个过渡图(DFA / NFA)。

  • E-> TT’

  • T’-> + TT’|ε

  • T-> FT”

  • T”-> * FT” |ε

  • F->(E)| id

第2步:
通过减少状态数来优化DFA,从而生成最终的转换图。

  • T’-> + TT’|ε

可以通过将其与DFA结合使用来进行优化,以实现E-> TT’

因此,我们优化了其他结构以产生以下DFA

步骤3:
输入字符串的仿真。
模拟过程涉及的步骤为:

  1. 从起始状态开始。
  2. 如果终端到达将其消耗掉,则移至下一个状态。
  3. 如果非终端设备到达非终端设备的DFA状态,则返回到最终状态。
  4. 返回实际的DFA并继续进行解析。
  5. 如果完全完成了对输入字符串的完全读取,则您将达到一种最终状态,并且该字符串被成功解析。