产生式 语义规则 D→TL L.in :T.type Tint T.type :integer Treal T.type :real L→L,id L1in :=L.in addtype(id.entry,L.in) L-id addtype(id.entry,L.in) 国防科技大学计算机系602教研室
国防科技大学计算机系602教研室 产 生 式 语 义 规 则 D→TL L.in := T.type T→int T.type := integer T→real T.type := real L→L1 , id L1 .in :=L.in addtype(id.entry, L.in) L→id addtype(id.entry, L.in)
句子real id1,id2,id3的带注释的语法树 D T.type=real L.in=real real L.in=real id; 产生式 语义规则 L.in=real id, D→TL L.in :T.type Tint id, T.type :integer T→real T.type:=real L→L,idL.in=L.in addtype(id.entry,L.in) L-→id addtype(id.entry,L.in) 国防科技大学计算机系602教研室
国防科技大学计算机系602教研室 句子real id1,id2,id3的带注释的语法树 id1 L , id2 L , id3 L real T D T.type=real L.in=real L.in=real L.in=real 产 生 式 语 义 规 则 D→TL L.in := T.type T→int T.type := integer T→real T.type := real L→L1 , id L1 .in :=L.in addtype(id.entry, L.in) L→id addtype(id.entry, L.in)
6.2基于属性文法的的处理方法 输入串→语法树→依赖图→语义规则计算次序 ■由源程序的语法结构所驱动的处理办法就 是语法制导翻译法 ■语义规则的计算 口产生代码 ▣在符号表中存放信息 ▣给出错误信息 ▣执行任何其它动作 对输入符号串的翻译也就是根据语义规则 进行计算的结果。 国防科技大学计算机系602教研室
国防科技大学计算机系602教研室 6.2 基于属性文法的的处理方法 ◼ 由源程序的语法结构所驱动的处理办法就 是语法制导翻译法 ◼ 语义规则的计算 产生代码 在符号表中存放信息 给出错误信息 执行任何其它动作 ◼ 对输入符号串的翻译也就是根据语义规则 进行计算的结果。 输入串 语法树 依赖图 语义规则计算次序
6.2基于属性文法的的处理方法 ■ 依赖图 树遍历 ■ 一遍扫描 国防科技大学计算机系602教研室
国防科技大学计算机系602教研室 6.2 基于属性文法的的处理方法 ◼ 依赖图 ◼ 树遍历 ◼ 一遍扫描
6.2.1依赖图 ■在一棵语法树中的结点的继承属性和综合属性 之间的相互依赖关系可以由称作依赖图的一个 有向图来描述 ■ 为每一个包含过程调用的语义规则引入一个虚 综合属性b,这样把每一个语义规则都写成 b:=fC1,C23.,Ck) 的形式 ■依赖图中为每一个属性设置一个结点,如果属 性b依赖于属性c,则从属性c的结点有一条有向 边连到属性b的结点。 国防科技大学计算机系602教研室
国防科技大学计算机系602教研室 6.2.1 依赖图 ◼ 在一棵语法树中的结点的继承属性和综合属性 之间的相互依赖关系可以由称作依赖图的一个 有向图来描述 ◼ 为每一个包含过程调用的语义规则引入一个虚 综合属性b,这样把每一个语义规则都写成 b:=f(c1 ,c2 ,…,ck ) 的形式 ◼ 依赖图中为每一个属性设置一个结点,如果属 性b依赖于属性c,则从属性c的结点有一条有向 边连到属性b的结点