自顶向下分析
分类:
文章
•
2024-05-24 17:07:46
自顶向下分析





- 因为不确定需要使用哪个产生式,所以会有出错的时候,出错了就要回溯(退回到原来的步骤),导致效率降低,所以有了预测分析。

文法转换
- 因为并不是所有的文法都适合自顶向下的分析方法。 在分析过程中会出现问题(回溯,无限循环),这个时候就要改造文法。
- 左递归会导致无限循环,消除直接左递归—转换为右递归。消除间接左递归—替换。
- 方法:提取左公因子

LL(1)文法—可使用预测分析表


- q文法比s文法更强大,但他对产生式的右部限制还是很严格。所以出现了LL(1)文法。

- LL(1)文法允许产生式的右部以非终结符打头,这就增加了计算可选集的复杂性。由此引入串首终结符的概念


FIRST和FOLLOW集计算得到SELECT集
-
FIRST集计算: 把终结符填入,同时也可以传导,比如产生式③包含F,那么也可以把产生式⑤的FLLOW集给到③。




- 计算出FIRST集和FOLLOW集之后,就可以计算SELECT集了
- 如果产生式开头是终结符,就在SELECT中填入这个终结符,如果是空集的话,就填入他对应的FOLLOW集,如果是非终结符的话没就填入这个非终结符对应的FIRST集。

- 根据SELECT集,构造出预测分析表。
递归的预测分析法


非递归的预测分析法
- 下推自动机跟有穷自动机相似,但是识别能力更强,有穷自动机识别能力不强是因为,他的记忆能力不强,因为他是有穷的,也没有存储器,给有穷自动机增加一个下推存储器(栈),就构成了下推自动机



两种方法对比以及预测分析法步骤总结


预测分析法中的错误处理


