知识总结
自下而上分析
- 移进-归约法:句柄为可归纳串
- 算符优先分析法:最左素短语为可归纳串
从输入串开始,逐步进行“归约”,直至归约到文法的开始符号。
从语法树末端开始,步步向上“归约”,直至根结。
基本思想:用一个寄存符号的先进后出栈,把输入符号一个一个地移进到栈里,当栈顶形成某个产生式的候选式时,即把栈顶的这一部分替换成(归约为)该产生式的左部符号。
归约中,尽可能把更多归约为一个——贪心思想
自下而上分析过程:边输入单词符号(移进符号栈),边归约。
核心问题:识别可归约串
规范归约
令G是一个文法,S是文法的开始符号,假定abd是文法G的一个句型,如果有
则b称是句型abd相对于非终结符A的短语。
如果有AÞb,则称b是句型abd相对于规则A® b的直接短语。
一个句型的最左直接短语称为该句型的句柄。
规范归约是关于α的一个最右推导的逆过程,也称最左归约。
最右推导——规范推导,所得句型为规范句型。
若文法G是无二义的,那么规范推导的逆过程必定是规范归约。
规范归约的实质:在移进过程中,当发现栈顶呈现句柄时就用相应产生式的左部符号进行替换。
用符号栈进行自下而上分析
栈是语法分析的一种基本数据结构。
#的使用:
(1)在分析开始时,‘#’预先进栈,作为栈底符
(2)作为输入串的结束符
语法分析对符号栈的使用有四类操作:移进,归约,接受,出错处理
算符优先分析法
- 未必是严格的最左归约,所以不是一种规范归约法
定义算符之间的优先关系,借助这种关系来寻找“可归约串”和进行归约
1、定义两个终结符‘a’与‘b’的优先关系
(1)a=.b 表示a的优先性等于b
(2)a>.b 表示a的优先性大于b