结构推理
为下列文法配上语义子程序,使它输出S产生的二进制数的值,例如输入11011.101,输出为27.625。
S→L.L|L L→LB|B B→0|1
【正确答案】拓广文法增加一个产生式S'→S用于输出,为文法符号配上属性Value,表示相应的数值。利用该属性,语义子程序可以描述如下:
S'→S {print(S.val)}
S→L1.L2 {S.val=L1.val+L2.val/2L2.length}
S→L {S.val=L.val}
L→LlB {L.val=L1.Val*2+B.val;
L.1ength=L1.1ength+1
}
L→B {L.val=B.val;
L.1ength=1
}
B→0 (B.val=0)
B→I {B.val=1)
【答案解析】