属性文法举例 简单计算器 用语义规则描述表达式求值。 该属性文法描述如下: 产生式 语义规则(属性计算规则) 1.L→En print(E.val)(虚属性) 2.E→E1+T E.va少=E1.val+T.val 非终结符设有 3.E→T E.val:=T.val 综合属性,代 4.T→T1*P ①.va少=Ti.valF.val 表表达式的值 5.T→F T.val:-F.val 6.F→(E) F.val:=E.val 终结符i设有综 7.F→i F.val:-i.lexval 合属性,其值由 词法分析器提供 2023/2/28 ☒D 6
2023/2/28 6 属性文法举例——简单计算器 用语义规则描述表达式求值。 该属性文法描述如下: 产生式 语义规则(属性计算规则) 1. L→En print( E .val ) (虚属性) 2. E→E1+T E.val:=E1.val+T.val 3. E→T E.val:=T.val 4. T→T1*F T.val:=T1.val*F.val 5. T→F T.val:=F.val 6. F→(E) F.val:=E.val 7. F→i F.val:=i.lexval 非终结符设有 综合属性,代 表表达式的值 终结符i设有综 合属性,其值由 词法分析器提供
例3*5+4n的语 显示19 法树与属性计算 E.val=19 n 依赖关系164 拓扑排序 E1.val=15 十 T.val=4 自下而上 ⑦t T.val=15 F.val=4 有 ©f T1.val=3 F.val=5 i.lexval=4 ②It @1什 F.val=3 i.lexval=5 四f 依赖图 i.lexval=3 2023/2/28 ☒D
2023/2/28 7 ① 例 3*5+4n的语 法树与属性计算 L .val=3 E n E1 + T T T1 * F F i i F .val=3 .val=5 i .val=15 .val=15 .val=4 .val=4 .val=19 显示19 .lexval=3 .lexval=5 .lexval=4 依赖关系164 拓扑排序 自下而上 依赖图 ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨
说明语句的属性文法 ■用语义规则描述变量说明。 ■该属性文法描述如下: 产生式 语义规则(属性计算规则) 继承属性 1. D→TL L.in):=T.type 2. T→int T.type):=integer 3. T→real T.type :=real 综合属性 4. L→L1,id LI in :L.in addtype(id.entry,L.in 5. L→id addtype(id.entry,L.in entry 单词id的属性,id在符号表的入口 addtype在符号表中为变量添加类型信息 2023/2/28 节目录 ☒D 8
2023/2/28 8 1. D→TL L.in := T.type 2. T→int T .type := integer 3. T→real T.type := real 4. L→L1 ,id L1 .in := L.in addtype( id.entry, L.in ) 5. L→id addtype( id.entry, L.in ) entry 单词 id 的属性,id在符号表的入口 addtype 在符号表中为变量添加类型信息 用语义规则描述变量说明。 该属性文法描述如下: 产生式 语义规则(属性计算规则) 说明语句的属性文法 综合属性 继承属性 节目录
说明语句的设计 例real id1,id2,id3 说明语句的文法 1.①→TL T.type in 类型2.个 → int real real 描述3.① real real 变量4. Li,id L1.1n ids 表5. real real id ■要解决的问题 L2.in id2 ◆记录标识符的类型 real real ◆类型信息传递 idr 继承属性自上 real 而下传递信息 2023/2/28 ☒D 9
2023/2/28 9 说明语句的设计 例 real id1,id2,id3 说明语句的文法 1. D → T L 2. T → int 3. T → real 4. L → L1,id 5. L → id D T L real L1 , id3 L2 , id2 id1 要解决的问题 记录标识符的类型 类型信息传递 real real real .type real .in real .in real .in real 继承属性自上 而下传递信息 类型 描述 变量 表
例real id1,id2,id3的语法树和属性计算 D 依赖关系 (4) 拓扑排序 T.type2real一 in=real t in-rea addtype real ⑦ 6 real 1d3.e③ addtype rea」 9 ⑧ L2.in=real id2.entry 自下而上无 addtype real 法直接实现 ⑩ 自上而下存在左 idi. ntry 递归,可改造 2023/2/28 节目录 ☒☑10
2023/2/28 10 例real id1,id2,id3的语法树和属性计算 D T L real L1 , id3 L2 , id2 id1 addtype .type=real .in=real .in=real .in=real 依赖关系 拓扑排序 自下而上无 法直接实现 .entry .entry .entry 自上而下存在左 递归,可改造 real addtype real addtype real ④ ⑤ ⑦ ⑥ ⑨ ⑧ ① ② ③ ⑩ 节目录