讲什么了
语法制导定义和翻译方案
S属性定义的自底向上实现
L属性定义的自底向上实现
关键概念
- 综合属性
- 继承属性
- S属性定义和L属性定义的LR分析实现
翻译思路
- 根据翻译目标确定产生式的语义(含义)
- 根据产生式的含义,分析,每个符号的语义
- 把语义以属性的形式附加到相应文法符号上
- 设计语义规则,从而形成语法制导定义
翻译目标决定语义规则,翻译结果依赖于语义规则
翻译目标->语义规则->翻译结果
把语义动作插入到产生式的适当位置,形成翻译方案
翻译方案规定了语义动作的执行时机
语法制导翻译的一般步骤

1. 语法制导定义


综合属性:
产生式左部符号的综合属性是从该产生式右部文法符号的属性值计算出来的;
在分析树中,一个内部结点的综合属性是从其子结点的属性值计算出来的。
虚拟综合属性:将过程调用或程序段(print)的语义规则看成左部的虚拟综合属性
继承属性: 产生式右部某文法符号的继承属性是从其所在产生式的左部符号和/或右部文法符号的属性值计算出来的;


在分析树中,一个结点的继承属性是从其父结点和/或兄弟结点的属性值计算出来的。
2. 依赖图

3. 拓扑排序
由前指向后
4. S L属性定义

注意,Xj的继承属性不能依赖于其右边的符号!

5. 翻译方案
对于S属性,把这个动作放在相应的产生式右边末尾
对于L属性,动作不能引用其右边文法符号的综合属性,左部符号的综合属性应放在产生式右端末尾;右部某符号的继承属性必须放在这个符号之前