1. 自顶向下分析概述
从分析树的根节点向叶节点方向构造分析树,可以看做是从文法开始符号推导出词串的过程
(1). 最左推导
在最左推导中,总是选择每个句型的最左侧非终结符进行替换.
(2). 递归向下分析
计算机程序实现的自顶向下分析的通用形式.
每层递归对应一个非终结符(相当于遍历一个树的子节点,非终结符对应的是非叶子节点)
搭配回溯使用
2. 文法转换
(1). 消除直接左递归
当同一个非终结符的多个候选式存在相同的前缀时,会导致回溯(最终只会匹配其中一个)
将含有 A->Aα 形式产生式的文法称为是直接左递归的.使用最左推导的递归向下分析可能会无限递归.
A -> Aα | β ===> A -> βA' 其中 A' -> αA' | ε
因为是左递归,所以都是A->βααααααα......这样的,那么把第一个β抽取出来,再新建立一个A'->αααααα....就可以替换左递归.其中后面新建立的这个式子是右递归的.
(2). 消除间接左递归
S -> Aa | b
A -> Ac | Sd | ε
这里的递归是间接存在于两条文法中的.
将两个式子代入,编程直接左递归,然后消除直接左递归
[图片上传失败...(image-8e7d85-1582632405566)]
1573666379351
(3)