一套编译原理的试题 请高手帮忙答一下 谢谢

六(8分)写一个文法,使其语言是:
L = { ambmanbn | m,n≥0 }
七(12分)已知文法
G[A]: A → aAB | a
B → Bb | d
(1)构造与G[A]等价的LL(1)文法;
(2)构造G’[A]的预测分析表。
八(12分)考虑文法
G[S]: S → AS | b
A → SA | a
(1)构造文法的可归前缀图(活前缀的DFA);
(2)判断文法是否是LR(0)文法,并说明理由。
九(7分)将下面程序段翻译成四元式序列。
while A<C∧B<D do
if A=1 then C:=C+1
else while A<D do
A:=A+2;
十(6分)设有以下程序段
program main;
var a,b:integer;
procedure p(x,y,z:integer);
begin
y:=y+1;
z:=z+x
end;
begin
a:=2; b:=3; p(a+b,a,a); write(a)
end.
对于下列参数传递方式,分别写出执行程序后a的输出值。
(1)传名;
(2)传地址。
十一(6分)有一语法制导翻译如下所示:
S → bAb { print(”1”) }
A →(B { print(”2”) }
A → a { print(”3”) }
B → Aa) { print(”4”) }
若对输入序列b(((aa)a)a)b 进行自底向上分析,请写出输出序列。
十二(8分)对PL/0语言扩充ELSE子句:
<条件语句> ::= IF <条件> THEN <语句> [ ELSE <语句> ]
请在空缺处填空,完成条件语句的编译算法:
switch (SYM) {
……
case IFSYM:
;
CONDITION(SymSetUnion(SymSetNew(THENSYM),FSYS),LEV,TX);
if (SYM==THENSYM) GetSym();
else Error(16);
CX1=CX; GEN(JPC,0,0);
STATEMENT(SymSetUnion(SymSetNew(ELSESYM),FSYS),LEV,TX);
if ( ) CODE[CX1].A=CX;
else {
CX2=CX; GEN(JMP,0,0);
CODE[CX1].A= ;
STATEMENT(FSYS,LEV,TX);
;
}
break;
……
}
五(8分)构造下列文法相应的有穷自动机。
G[S]: S → aA | bQ
A → aA | bB | b
B → bD | aQ
Q → aQ | bD | b
D → bB | aA
E → aB | bF
F → bD | aE | b

第1个回答  2008-01-11
飞过海反对地方客观机发电机感到反抗计划地方看见活动反对看法
相似回答