通过语法分析可以得到语法分析树,但是不不知道其含义所在。 语义分析则赋予其含义。
语法制导翻译
语法制导定义(Syntax-Directed Definition,SDD),是在语法处理过程中对语言节点的属性的处理 我们将讨论非终结符号的两个属性:继承属性和综合属性
- 综合属性(synthesized attribute):在分析树节点N上的非终结符号A的综合属性是由N上的产生式所关联的语义规则来定义的。
- 继承属性(inherited attribute):在分析树节点N上的非终结符号B的继承属性是由N的父节点上的产生式所关联的语义规则来定义的。
如果一个SDD的每个属性都是综合属性,那么这个SDD是一个S属性的SDD。 对于一个S属性的SDD,可以按照语法分析树结点的任何自底向上顺序来计算它的各个属性值。S属性的SDD可以在自底向上的语法分析过程中实现
L 属性:一个产生式体所关联的各个属性之间,依赖图的边总是从左到右,而不能从右到左。
- 要么是一个综合属性
- 要么是一个继承属性,但是它的语义规则有这些限制 对于 $A \to X_{1}X_{2}\dots X_{n}$,继承属性 $X_{i}.a$:
- 只能使用 A 的继承属性
- 使用左兄弟节点的继承属性
- 与 $X_{i}$ 的实例本身相关的全部属性,但是在 $X_{i}$的 全部属性组成的依赖图中不能存在环
语法制导的翻译方案(syntax-directed translation scheme,SDT)是在产生式中嵌入了程序片段的上下文无关文法 这些程序片段称为语义动作,可以出现在产生式体中的任何地方。
- 基本文法可以使用LR分析技术,且SDD是S属性的
- 基本文法可以使用LL分析技术,且SDD是L属性的
参考: