1、移动规约分析法:
自底向上的语法分析方法,也称为移动归约分析法。
2、文法G[S]
S =>αAδ且A => b则称b是句型αb δ相对于非终结符A的短语
素短语与最左素短语
G的句型的素短语是一个短语,它至少包含一个终结符,且除自身外不再包含其他素短语。处于句型最左边的素短语为最左素短语
句柄: 一个句型的最左直接短语称为该句型的句柄。通俗理解:
短语:一棵子树的所有叶子自左至右排列起来形成一个相对于子树根的短语。
直接短语:仅有父子两代的一棵子树,它的所有叶子自左至右排列起来所形成的符号串。
句柄:一个句型的分析树中最左那棵只有父子两代的子树的所有叶子的自左至右排列。
Example:
文法G[E]:
(1) E→E+T
(2) E→T
(3) T→T*F
(4) T→F
(5) F→PF|P
(6) P→(E)
(7) P→i
句型T+T*F+i
其短语有:
T+T*F+i
T+T*F
T
T*F
i
素短语为:T*F,i
最左素短语为:T*F
句型T+T+i的素短语为:T+T,i
句型T+T+F的素短语为:T+T
3、算符优先文法的定义:
性质1:在算符文法中任何句型都不包含两个相邻的非终结符.
性质2:如 Ab 或 bA 出现在算符文法的 句型 中,其中 A∈VN,b∈VT, 则 中任何 含 b 的短语必含有A。
4、
在OG中 定义 (算符优先关系)
a = b G中有形如:A->…ab…
或A -> …aBb...的产生式。
a < b G中有形如: A-> …aB…的产生式, 而 B => b… 或B => Cb…
a > b G中有形如: A => …Bb…的产生式,而 B => …a 或 B =>… aC
规定 若 S=> a…或 S => Ca… 则 # < a
若 S => …a 或 S =>…aC 则 a > #
在 OG文法 G 中,若任意两个终结符间至多有一种算符优先关系存在,则称G 为算符优先文法(OPG)。
注意:允许b>c, c>b;
不允许 b>c, b
5、首先定义如下两个集合:
FIRSTVT(B)={b|B => b… 或 B=> Cb…}
LASTVT(B)={a|B =>…a 或 B =>…aC}
按如下算法计算出给定文法中任何两个终结符对(a,b)之间的优先关系:
1) ‘=‘关系
直接看产生式的右部,若出现了A →…ab…或 A →…aBb,则a=b
2)’<‘关系
求出每个非终结符B的FIRSTVT(B)
若A→…aB…,则任意b∈FIRSTVT(B),则a 3)’>’关系
求出每个非终结符B的LASTVT(B)
若A→…Bb…,则任意a∈LASTVT(B),则a>b·
算符优先分析伪代码:
k:= 1; S [ k ] := “#”
repeat read 下一符号到a;
if S[ k ] Vt then j := k else j := k-1;
while S[ j ] > a do
{ repeat
Q := S[ j ];
if S[ j-1] Vt then j := j-1
else j:= j-2
until S [ j ] < Q;
将 S[ j+1] S[ j+2 ]…S[ k ]归约到某个N;//
k := j+1;
S[ k ]:= N;
}
if ( S [ j ] < a or S[ j ] = a)
then { k := k+1; S[ k] := a}
else error
until a = “#”
二、算法优先关系构造算法
a) 若有产生式 P→a••• 或 p→Qa•••
则 a∈FIRSTVT(P)
b) 若有产生式 P→Q••• ,
若 a∈FIRSTVT(Q)
则 a∈FIRSTVT(P)
LASTVT(P)直接根据定义递归的构造即可:
a) 若有产生式 P→•••a 或 p→•••aQ
则 a∈LASTVT(P)
b) 若有产生式 P→•••Q ,
若 a∈LASTVT(Q)
则 a∈LASTVT(P)