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