什么是语法制导翻译
语法制导翻译使用CFG来引导对语言的翻译,是一种面向文法的翻译技术。
语法制导翻译的基本思想
问: 如何表示语义信息?
答: 为CFG中的文法符号设置语义属性,用来表示语法成分对应的语义信息。
问: 如何计算语义属性?
答: 文法符号的语义属性值是用与文法符号所在产生式(语法规则)相关联的语义规则;对于给定的输入串x,构建x的语法分析树,并利用与产生式(语法规则)相关联的语义规则来计算分析树中各结点对应的分析树语义属性值;
两个概念
将语义规则同语法规则(产生式)联系起来要涉及两个概念
- 语法制导定义(Syntax-Directed Definitions, SDD)
- 语法制导翻译方案(Syntax-Directed Translation Scheme,SDT)
语法制导定义(SDD)
SDD是对CFG的推广
- 将每个文法符号和一个语义属性集合相关联
- 将每个产生式和一组语义规则相关联,这些规则用于计算该产生式中各文法符号的属性值。
注:L与L1表示的是同一个符号,下标的出现是为了方便讨论区别L在不同地方的出现。如果X是一个文法符号,a是X的一个属性,则用X.a表示属性a在某个标号为X。
语法制导翻译方案(SDT)
SDT是在产生式右部嵌入了程序片段的CFG,这些程序片段称为语义动作。按照惯例,语义动作放在花括号内。
一个语义动作在产生式中的位置决定了这个动作的执行时间
SDD与SDT
- SDD
- 是关于语言翻译的高层次规格说明。
- 隐蔽了许多具体实现细节,使用户不必显式地说明翻译发生的顺序。
- SDT
- 可以看作是对SDD的一种补充,是SDD。
- 显式地指明了语义规则的计算顺序,以便说明某些实现细节。