一. 移进归约
1.基本思想:用一个寄存符号的先进后出栈,把输入符号一个一个地移进到栈里,当栈顶形成某个产生式的候选式时,即把栈顶的这一部分替换成(归约为)该产生式的左部符号。
2.归约:是指根据文法的产生式规则,把产生式的右部替换成左部符号。
二.规范归约
1.短语:令G是一个文法,S是文法的开始符号,假定abd是文法G的一个句型
其中α,β,d∈(VN∪VT)*,A∈VN ,如果有
则b称是句型abd相对于非终结符A的短语。
2.直接短语:特别是,如果有AÞb,则称b是句型abd相对于规则A®b的直接短语。
3..句柄:一个句型的最左直接短语称为该句型的句柄。
三.用符号栈进行自下而上的语法分析
1.基本思路:定义算符之间优先关系,借助这种关系来寻找“可归约串”和进行归约。定义两个终结符‘a’与‘b’的优先关系:a =.b表示a的优先性等于b,a>.b表示a的优先性大于b,a<.b表示a的优先性小于b。
2.算符优先分析法:一个文法,如果它的任一产生式的右部都不含两个相继(并列)的非终结符,即不含如下形式的产 生式右部:
…QR…
则我们称该文法为算符文法,也称OG文法
3.算符优先分析算法的设计
(1.)问题的提出:{自下而上分析
移进-归约法:句柄为可归纳串
算符优先分析法:最左素短语为可归纳串}
(2.)素短语:{指一个句型的短语,它至少包括有一个终结符号且除去它本身之外不再含任何更小的素短语}
(3.)最左素短语:{处在句型最左端那个素短语成为最左素短语}
定理:一个算符优先文法G的任何句型的最左素短语是满足如下条件的最左子串Njaj…NiaiNi+1,
aj-1<.aj
aj=. aj+1,aj+1=. aj+2,…,ai-1=. ai
ai>. ai+1
四.优先函数
1.定义:把每个终结符q与两个自然数f(q)与g(q)相对应,使得
若q1<.q2,则f(q1)< g(q2)
若q1 =. q2,则f(q1)= g(q2)
若q1 >. q2,则f(q1) >g(q2)
f称为入栈优先函数,g称为比较优先函数。
优点:便于比较,节省空间;
缺点:原来不存在优先关系的两个终结符,由于自然数相对应,变成可以比较的。要进行一些特殊的判断。
2.构造方法:
(1)对于每个终结符a,令其对应两个符号fa和ga,画一张以所有符号fa和ga为结点的方向图。如 果a>.b,则从fa画一条弧至gb如果a<.b,则从gb画一条弧至fa 。
(2)对每个结点都赋予一个数,此数等于从该结点出发所能到达的结点(包括出发点自身)。赋给fa的数作为f(a)赋给ga的数作为g(a)。
(3)检查所构造出来的函数f和g是否与原来的关系矛盾。若没有矛盾,则f和g就是要求的优先函数,若有矛盾,则不存在优先函数。
课后作业: