一、自顶向下分析(top-down parsing)
1.自顶向下构造分析树一般方法:
采用最左推导方式,总选择句型中最左非终结符进行替换,替换时根据输入流的下一个终结符选择一个候选式。自顶向下构造方法可能引起回溯操作因此需要一定文法规则支持来避免回溯(即消除公共前缀),又要防止无限推导(即消除左递归)。下图是一个无回溯操作的自顶向下分析树构造方法。
2.递归下降分析(recursive-descent parsing):
由一组过程(即函数)组成,每个过程对应一个非终结符。
3.消除左递归文法(left recursive):
对于文法 E → E+T ,会使自顶向下分析产生无限循环 E → E+T → E+E+T → ...。
(1)消除直接左递归:
A → Aa | b 这种表示 → Aaaaa... → baaaa... (即b打头的a串,a个数可以为0),则可改写为
<1> A → bA' <2> A' → aA' | ε
即把左递归改写为右递归。
若把 T → T*F | F 改写,则我们把*F看作上述a,得到
<1> T → FT' <2> T' → *FT' | ε
以下为一般形式
A → Aa1 | Aa2 | ... | Aan | b1 | b2 | ... | bm , 消除直接左递归改写为
<1> A →