在本文中,我们将介绍Predictive Parser的概述,并主要关注Predictive Parser的作用。并且还将介绍实现Predictive解析器算法的算法,最后将通过实现用于优先级解析的算法来讨论一个示例。让我们一一讨论。
预测解析器:
预测解析器是没有回溯或备份的递归下降解析器。它是自上而下的解析器,不需要回溯。在每个步骤中,将在下一个终端符号上选择要扩展的规则。
考虑
A -> A1 | A2 | ... | An
如果非终端要进一步扩展为“ A”,则仅基于当前输入符号“ a”选择规则。
预测解析器算法:
- 为每个语法规则制作一个过渡图(DFA / NFA)。
- 通过减少状态数来优化DFA,得到最终的过渡图。
- 在过渡图上模拟字符串以解析字符串。
- 如果在使用完输入之后转换图达到接受状态,则将对其进行解析。
考虑以下语法–
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:
输入字符串的仿真。
模拟过程涉及的步骤为:
- 从起始状态开始。
- 如果终端到达将其消耗掉,则移至下一个状态。
- 如果非终端设备到达非终端设备的DFA状态,则返回到最终状态。
- 返回实际的DFA并继续进行解析。
- 如果完全完成了对输入字符串的完全读取,则您将达到一种最终状态,并且该字符串被成功解析。