编译原理分知识点习题-语法制导和翻译

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1.一般情况下,为什么语义分析部分仅产生中间代码

解答:一般情况下,语义分析部分仅产生中间代码,其原因是:

可使难点分解,分别解决。

可对语义分析产生的中间代码进行优化,以产生高效率的目标代码。

语义分析通常与机器无关,目标代码往往与机器有关。把语义分析与目标代码生成分开,可让一个语义分析程序适用于多个目标代码生成程序。

2.(湖北省高等教育自学考试)什么是语法制导翻译为什么把这种方法叫语法制导翻译

解答:所谓语法制导翻译,是指在语法规则的制导下,通过计算语义规则,完成对输入符号串的翻译。

由于使用属性文法时把语法规则和语义规则分开,但在使用语法规则进行推导或规约的同时又使用这些语义规则来知道翻译与最终产生目标代码,所以称为语法制导翻译。

3.给出将附值语句翻译成四元式的语法制导定义,允许右部表达式

含有加法、乘法、取负、括号运算。生成赋值语句X:=B*(C+D)+A 的四元式。

解答:赋值语句的自下而上的语法制导翻译过程描述为:

规则语义动作

(1)A::=i:=E {GEN (:=,,__,ENTRY(i) ) }(2)E::=E1+E2 {:=NEWTEMP;

GEN(+,, ,}

(3)E::= E1*E2 { :=NEWTEMP;

GEN(*,, ,}

(4)E::=-E1 { :=NEWTEMP;

GEN(@,,__,}

(5)E::=(E1) {:= }

(6)E::=i {:= ENTRY(i) }

生成的赋值语句X:=B*(C+D)+A的四元式为:

(+,C,D,T1)

(*,B,T1,T2)

(+,T2,A,T3)

(:=,T3,_,X)

4.给出将布尔表达式翻译成四元式的语法制导定义。

解答:布尔表达式的语义子程序为:

规则语义动作

(1) E::=I {:=null;:=NXQ;

GEN (Jez , ENTRY(i), __,0) }

(2) E::= i1 rop i2 { :=null;:=NXQ;

GEN (Jnrop,ENTRY(i1), ENTRY(i2),0)}

(3) E::= (E1) {:=, :=; }

(4) E::= ¬ E1 { :=NXQ;

GEN ( J, __, __, 0); BP , NXQ);}

(5) E A::=E1∧ { if =null

then begin

::=NXQ;

GEN ( J, __, __, 0)

End;

BP ( , NXQ );

:=null; := }

(6) E ::= E A E2 {if ≠null

then begin

BP , NXQ);

:=null

End

:=; }

(7) E0::=E1∨ { if :=null

then begin

:=NXQ;

GEN ( J, __, __, 0)

End;

:=;

BP ,NXG);}

(8) E::=E0E2 { if ≠null

then

:=MERG,

Else begin

BP ,NXQ);

:=

End;

:=}

其中:

NXQ指示器指向下一个将要形成但尚未形成的四元式的地址(编号),初值为1,每当执行GEN一次,NXQ自动加1。

GEN是一个语义过程,该过程把四元式加入四元式表区中。

和分别表示E所对应的四元式需回填“真”、“假”出口的四元式地址所构成的链。

MERG(P1,P2)为一函数,把以P1和P2为链首的两个链合二为一作为函数值,回送合并后的链首。

BP(P,t)为一语义过程,BP是BACKPATCH的缩写。这是一“回填”过程,它把以P为链首所链接的每个四元式的第四区段都填为t。

Jrop是根据关系运算符rop定义的条件转移。

5.试写出PASCAL循环语句for I:=1 to N do S 的语义程序,

假定该语句的文法为

F1::= for i:= 1 to N

S::= F1 do S1

解答:根据题设文法,for语句的语义子程序为:

F1::= for i:= 1 to N {:=entry (i); GEN(:=, ‘1’ ,__,;

Final:=newtemp; GEN( :=,, __,final);

:=NXQ; :=NXQ ;GEN( J>, ,final,0)}

S::= F1 do S1{BACKPATCH ,NXQ); GEN (+,, ‘1’,;

GEN (J, _, _,; BACKPATCH ,NXQ)}

6.写出条件赋值语句

i :=if B then E1 else E2

的语义子程序。其中B是布尔表达式,E1和E2是算术表达式,i代表与E1、E2类型相同的左部变量。按写出的语义子程序生成条件赋值语句

Z:=if A>C then x+y else x-y+

的四元式序列。

解答:按条件赋值语句的语义给出该语句的文法如下:

A1::=i:=

A2::=A1 if B then

A3::=A2 E1 else

S::=A3 E2

相应的语义子程序为:

(1) A1::=i:= {:=entry (i) }

(2) A2::=A1 if B then {BP , NXQ); :=; :=}

(3) A3::=A2 E1 else {GEN (:=,, _,; :=NXQ;

GEN ( J, _, _,0 );BP,NXQ);:=} (4) S::=A3E2 {GEN (:=,, _,;BP,NXQ) }

按上述语义子程序,条件赋值语句

Z:=if A>C then x+y else x-y+

的四元式序列为:

(1) ( J>,A,C, (3))

(2) ( J ,

(4) (:=,T1, _,Z)

相关文档
最新文档