自下而上分析过程:边输入单词符号,边归约。其核心问题是识别可归约串。
一、知识点
一、短语:定义:令G是一个文法,S是文法的开始符号,假定abd是文法G的一个句型
α,β,d∈(VN∪VT)*,A∈V,如果有
则b称是句型abd相对于非终结符A的短语。
2.直接短语:特别是,如果有Ab,则称b是句型abd相对于规则Ab的直接短语。
3.句柄:一个句型的最左直接短语称为该句型的句柄。
是一个非常重要的方法,其分析过程是自左向右对输入串ω不断向栈中进行移进――归约。
二、算符优先分析法
1、定义两个终结符‘a’与‘b’的优先关系a >.b
a <.b
2、算符优先文法及优先表构造
算符优先文法
(1)算符文法
定义:一个文法,如果它的任一产生式的右部都不含两个相继(并列)的非终结符,即不含如下形式的产生式右部:
则我们称该文法为算符文法,也称OG文法。
(2)定义终结符之间的优先关系
1. a =. b 当且仅当文法G中含有形如P→…ab…或P→…aQb…的产生式;
…a或R
…aQ。
(3)如果一个算符文法G中的任何终结符对(a,b)至多只满足下述三关系之一:
a=.b
a>.b
a<.b
构造算符优先关系表
(1)通过检查产生式的每一个候选式可以找出满足a=.b
(2)为了满足<.和>.,需对G中每个非终结符P构造两个集合FIRSTVT(P)和LASTVT(P):
(3)构造集合FIRSTVT(P)的算法
按其定义,可用下面两条规则来构造集合FIRSTVT(P):
① 若有产生式P→a…或P→Qa…,
② 若aFIRSTVT(Q),且有产生式P→Q…,
则aFIRSTVT(P)。
(4)同理构造构造集合LASTVT(P)的算法
按其定义,可用下面两条规则来构造集合LASTVT(P):
① 若有产生式P→… a或P→… aQ ,
则aLASTVT(P);
则aLASTVT(P)。
(5)有了这两个集合之后,就可以通过检查每个产生式的候选式确定满足关系<.和>.的所有终结符对。
①假定有个产生式的一个候选形为FIRSTVT(P),有a <. b。
②假定有个产生式的一个候选形为
…Pb…
LASTVT(P),有a >. b。
注意:
对于‘#’号,相当于在文法开始符号S前加一个额外的开始符号,比如为Z
然后,把
Z →#S#
添加到原文法中,再进行分析。
三、符号栈的使用与语法树的表示
今后我们将用一个不属于文法符号的特殊符号‘#’作为栈底符,即在分析开始时预先把它推进栈;同时,也用这个符号作为输入串的“结束符”,即无条件地将它置在输入串之后,以示输入串的结束。
指发现栈顶呈可归约串,并用适当的相应符号去替换这个串(这两个问题都还没有解决)。
指宣布最终分析成功,这个操作可看作是“归约”的一种特殊形式。
指发现栈顶的内容与输入串相悖,分析工作无法正常进行,此时需调用出错处理程序进行诊察和校正,并对栈顶的内容和输入符号进行调整。
四、LR分析法
三、课后题

四、总结