一、知识总结
本章介绍自下而上语法分析方法。所谓自下而上分析法就是从输入串开始,逐步进行“归约”,直至鬼月到文法的开始符号。或者说,从语法树的末端开始,步步向上”归约“,直到根结。
1、自上而下分析基本问题
自上而下分析法是一种”移进-归约“法,大意是用一个寄存富豪的先进后出栈,把输入符号一个一个地移进到栈里,当栈顶形成某个产生式的一个候选式时,即把栈顶的这一部分替换成(归约为)该产生式的左部符号。
归约是指根据文法的产生式规则,把产生式的右部替换成左部符号。
2、规范归约
(1)定义:令G是一个文法,S是文法的开始符号,假定αβδ是文法G的一个句型
其中α,β,δ∈(VN∪VT)*,A∈VN ,如果有
则β称是句型αβδ相对于非终结符A的短语。因为句型是由开始符号推出来的,而短语是由非终结符号推出来的。所以,短语是句型的一部份或全部符号串。
(2)直接短语
特别是,如果有A=>β,则称β是句型αβδ相对于规则A=>β的直接短语。
(3)句柄
一个句型的最左直接短语称为该句型的句柄。
(4)规范归约
定义:假定α是文法G的一个句子,我们称序列
αn, αn-1,······,α0
是α的一个规范归约,如果此序列满足:
(1) αn= α
(2) α0为文法的开始符号,即α0=S
(3) 对任何i,0 < i <=n, αi-1是从αi经把句柄替换成为相应产生式左部符号而得到的。
(5)修剪语法树
使用修剪语法树的方法来加深对自下而上语法分析的理解。
子树:是由该树的某个结点(子树的根)连同它的所有子孙组成。
简单子树:只有单层分支的子树(只有父子两代没有第三代)
(6)对语法树有如下结论
①每个句型都有一棵语法树与之对应
②每棵语法树的叶结点自左至右排列就组成一个句型
③每棵子树的叶结点自左至右排列就组成一个短语
④每棵简单子树的叶结点自左至右排列就组成一个直接短语
⑤每棵最左简单子树的叶结点自左至右排列就组成一个句柄
3、用符号栈进行自下而上的语法分析
(1)‘#’的使用
在分析开始时,将‘#’预先进栈,作为栈底符号;
将‘# ’作为输入串的结束符
(2)分析过程
自左向右对输入串ω不断向栈中进行移进——归约。