●LASTVT(P)的自动构造 >过程INSERT: PROCEDUREINSERT(P,a) IF NOT LIP,a]THEN BEGIN L[P,a]:TRUE; 把(P,a)下推进STAK栈 END; >主程序:
⚫LASTVT(P)的自动构造 ➢过程INSERT: PROCEDURE INSERT(P,a) IF NOT L[P,a] THEN BEGIN L[P,a] := TRUE; 把(P,a)下推进STACK栈 END; ➢主程序:
BEGIN FOR每个非终结符P和终结符aDOL[P,a]:=FALSE; FOR每个形如P>…a或P->…aQ的产生式DO INSERT(P,a); WHILE STACK非空DO BEGIN 把STACK的顶项,记为(Q,),弹出去 FOR每条形如P->…Q的产生式DO INSERT(P,a) END OF WHILE; END ●优先表的自动构造
BEGIN FOR 每个非终结符P和终结符a DO L[P,a] := FALSE; FOR 每个形如P-> … a 或P-> … aQ的产生式DO INSERT(P,a); WHILE STACK 非空 DO BEGIN 把STACK的顶项,记为(Q,a),弹出去 FOR 每条形如P-> … Q的产生式DO INSERT(P,a) END OF WHILE; END ⚫优先表的自动构造
FOR每条产生式P->XX2…XnDO FORi:=1TOn-1 DO BEGIN IFXi和Xi+1均为终结符THEN置Xi三Xi+1 lFi≤n-2且Xi和Xi+2都为终结符 但Xi+1为非终结符THEN置Xi三Xi+2; IFXi为终结符而Xi+1为非终结符THEN FOR FIRSTVT(Xi+1)中的每个aDO 置Xi<a; IFXi为非终结符而Xi+1为终结符THEN FOR LASTVT(Xi)中的每个aDO 置a>Xi+1 END
FOR 每条产生式P->X1X2 …Xn DO FOR i := 1 TO n-1 DO BEGIN IF Xi和Xi+1均为终结符THEN 置Xi Xi+1 IF i≤n–2且Xi和Xi+2都为终结符 但Xi+1为非终结符THEN 置Xi Xi+2; IF Xi为终结符而Xi+1为非终结符THEN FOR FIRSTVT(Xi+1)中的每个a DO 置 Xi a; IF Xi为非终结符而Xi+1为终结符THEN FOR LASTVT(Xi)中的每个a DO 置 a Xi+1 END
6算待优先分析算法的设计 ●定义 1)文法G,开始符号S,若S些aB8,如 S半aB8且A±B, 则称B是句型B8的一个短语。 2)所谓素短语是指这样一个短语,它至少含有一个终 结符,并且,除自身之外,不再含任何更小的素短语。 3)勺型最左边的那个素短语叫最左素短语
6 算符优先分析算法的设计 ⚫定义 1)文法G,开始符号S,若S α β δ,如果 S αβδ 且 A β, 则称β是句型αβδ的一个短语。 2)所谓素短语是指这样一个短语,它至少含有一个终 结符,并且,除自身之外,不再含任何更小的素短语。 3)句型最左边的那个素短语叫最左素短语
●定理 算符优先文法的句型一殷形式: #Na N2a2...NnanNn+i# 其中,a∈Vr,N∈VN^ ●最左素短语满足以下条件的景左子串Njaj...NiaN+1, aj-H1≤aj aj三ajt1,,ai-saj ai>a+1
⚫最左素短语满足以下条件的最左子串 Njaj…NiaiNi+1, aj-1 aj aj aj+1 , … , ai-1 ai ai ai+1 ⚫定理 算符优先文法的句型一般形式: #N1a1N2a2…NnanNn+1# 其中,ai ∈VT,Ni ∈VN|^