【正确答案】LR分析算法的形式化描述为:
k:=1; //k是栈顶指针
X[k]:='#'; //X是堆栈,存放符号串。通过该语句首先将句子括号#压入堆栈
S[k]:=0; //是堆栈,存放状态。通过该语句首先将初始状态0压入堆栈
把输入缓冲区指针指向的符号读进a中;//将输入缓冲区指针指向的符号赋予a,同时指针后移
REPEAT
IF ACTION[S[K],a]="Sj" THEN
BEGIN
k:=k+1:
S[K]:=j;
X[k]:=a;
把输入缓冲区指针指向的符号读进a中;//将输入缓冲区指针指向的符号赋予a,同时指针后移
END
ELSE IF ACTION[S[K],a]="rj"
BEGIN
K:=K-|α|;//如果文法第j个产生式是P→α,则弹出栈顶|α|项,|α|表示α的长度
IF GOTO[S[K],P]=t THEN//如果GOTO[S[K],P]=t,则将<t,P>压入堆栈
BEGIN
K:=K+1:
S[K]:=t;
X[K]:='P';
END
ELSEERROR //如果没有动作,表示出错,调用出错处理程序
END
ELSE break //跳出循环
UNTIL a='#';
IF K=2 AND S[K]='N' AND a='#'THEN //N为文法的起始符号
SUCCESS; //分析成功结束
ELSE
ERROR;//分析失败
【答案解析】