3、属性的计算
•综合属性计算 –自底向上按照语义规则来计算各结点的综合属性值 •继承属性计算 –根据依赖关系决定计算顺序
例1 台式计算器程序的语法制导定义
产生式 语义规则
L E {print(Eval)} EE1+T {Eval:=E1val+Tval} E T {Eval:=Tval} TT1*F {Tval:=T1val*Fval} T F {Tval:=Fval} F(E) {Fval:=Eval} Fdigit {Fval:=digitlexval} 1、与L→E相连的语义规则是一个过程,打印E的值,理 解为L的属性是虚的或空的。 2、E,T,F的属性val都为综合属性。 3、lexval 是单词 digit 的属性(由词法程序提供)。
按照语法制导翻译的方法,对每个产生式给出相应 的语义规则。(P203 5)
8.2
语法制导翻译
1、语法制导翻译基本思想:根据翻译的需要设置文 法符号的属性,以描述语法结构的语义。随着语法分 析的进行,执行属性值的计算,完成语义分析和翻译 的任务。
注:1)语法制导翻译的依据是语义子程序。
2)每个产生式均配置一个语义子程序,当语法分 析进行归约和推导时,就调用相应语义子程序,完成 一部分翻译任务,翻译的结果是生成相应中间代码。 3)语法分析完成,翻译工作也告结束。
L→L1,id L→id
entry 单词id的属性
L1.in:=L.in
addtype(id.entry,L.in)
addtype(id.entry,L.in)
addtype 在符号表中为变量填加标识符的类型信息
D→TL T→int T→real L→L1,id
L→id
D T.type=real real