编译原理复习题

答案由本人整理或来自互联网,不保证正确性,仅供参考

第四章 语法制导翻译

3.赋值语句的文法及语义动作描述如下:

(1)A→:=E {gen (:=, E.place,_,entry(i));}

(2)E→E1+E2 {E.place:=newtemp;gen(+, E1.place, E2.place, E.place);}

(3)E→E1E2 {E.place:=newtemp; gen(, E1.place, E2.place, E.place);}

(4)E→-E1 {E.place:=newtemp;gen(@,E1.place,_,E.place);}

(5)E→E1 {E.place:=E1.place;}

(6)E→i {E.place:=entry(i);}

写出赋值语句X:=-B*(C+D)+A的自下而上的语法制导翻译过程。
答案:

输入 PLACE 四元式
X:=-B*(C+D)+A
:=-B*(C+D)+A i X
-B*(C+D)+A i:= X_
B*(C+D)+A i:=- X_ _
*(C+D)+A i:=-i X_ _B
*(C+D)+A i:=-E X_ _B (@,B,_,T1)
*(C+D)+A i:=E X_ T1
(C+D)+A i:=E* X_T1_
C+D)+A i:=E*( X_T1_ _
+D)+A i:=E*(i X_T1_ _C
+D)+A i:=E*(E X_T1_ _C
D)+A i:=E*(E+ X_T1_ _C _
)+A i:=E*(E+i X_T1_ _C _D
)+A i:=E*(E+E X_T1_ _C _D (+, C, D, T2)
)+A i:=E*(E X_T1_ _T2
+A i:=E*(E) X_T1_ _T2 _
+A i:=E*E X_T1_T2 (*, T1, T2, T3)
A i:=E+ X_T3_
i:=E+i X_T3_A
i:=E+E X_T3_A (+, T3, A, T4)
i:=E X_T4
X

5.文法G的产生式如下:
S→(L)|α
L→L,S|S
(1)试写出一个语法制导定义,它输出配对括号个数。

(2)写一个翻译方案,打印每个a的嵌套深度。如((a), a),打印2,1
答案:
(1)试写出一个语法制导定义,它输出配对括号个数。
产生式 ​ ​语义规则
S->(L) ​ ​S.h:=L.h+1
S->a ​ ​ S.h:=0
L->L1,S ​ L.h:=L1.h+S.h
L->S ​ ​ L.h:=S.h
S'->S ​ ​ print(S.h)

(2)写一个翻译方案,打印每个a的嵌套深度。如((a), a),打印2,1
S'->{S.d:=0;} S
S->({L.d:=S.d+1} L)
S->a {print(S.d)}
L->{L1.d:=L.d}L1,{S.d:=L.d}S
L->{S.d:=L.d} S​


原文地址:https://www.cnblogs.com/Hatfield/p/12993788.html