作业5 – 语法制导翻译
1. 已知程序的文法G[P]如下: P ? D
D ? D; D| id: T | proc id; D; S
(1) 请写一个语法制导定义,输出程序中一共声明了多少个id。 产生式 语义规则 Print(D.c) P ? D D.c= D1.c+ D2.c D ? D1; D2 D.c=1 D ? id: T D.c= D1.c+ 1 D? proc id; D1; S (2) 请写一个翻译模式,输出程序中每变量id的嵌套深度。
P?{D.d=1} D
D ?{ D1.d=D.d} D1; { D2.d=D.d}D2 D ? id: T {print(D.d)}
D? proc id; { D1.d=D.d+1} D1; S
2.有表示二进制无符号数的文法G[S]: S → L . L | L L →L B | B B →0 | 1
请构造一个翻译模式,将二进制表示的数转换为十进制数。
S’→S {print(S.val)}
S → L1. L2 {S.val = L1.val + L2.val / L2.w} S→ L {S.val=L.val}
L →L1 B {L.val = L1.val * 2 + B.val; L.w=L1.w * 2} L→B {L.val = B.val; L.w=2} B →0 {B.val =0} B→1 {B.val =1}