答案由本人整理或來自互聯網,不保證正確性,僅供參考
第四章 語法制導翻譯
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