语法制导翻译

科技工作者之家  |   2020-11-17 17:26

《语法制导翻译》简称SDT(Syntax-directed translation)。基于属性文法的处理过程,对单词符号串进行语法分析,构造语法分析树,然后根据需要构造属性依赖图,遍历语法树并在语法树的各结点处按语义规则进行计算。

简介翻译的任务:首先是语义分析和正确性检查,若正确,则翻译成中间代码或目标代码。

使用的方法称作语法制导翻译。基本思想是,根据翻译的需要设置文法符号的属性,以描述语法结构的语义。例如,一个变量的属性有类型,层次,存储地址等。表达式的属性有类型,值等。属性值的计算和产生式相联系。随着语法分析的进行,执行属性值的计算,完成语义分析和翻译的任务。

属性值根据计算的依赖关系分成不相交的两类:综合属性(synthesized attribute)和继承属性(inherited attribute)。在分析树中,一个结点的综合属性值是从其子结点的属性值计算出来的;而一个结点的继承属性值是由该结点兄弟结点和父结点的属性值计算出来的。。

随语法分析的进展,识别出一个语法结构,就对它的语义进行分析和翻译。

语法制导翻译是指一种源语言代码的翻译完全由语法分析器驱动的编译器的实现方法。

一个常见的语法制导翻译方法是将输入字符串通过把相应的动作附加到每一条语法规则上的方法翻译为一连串的动作。因此,对于一个基于某语法的字符串的解析会产生一个对于规则的应用序列。语法制导分析提供了一种将语义附加到任何一种语法上的简单方法。1

概述语法制导翻译的根本上是在一个上下文无关文法中通过向结果中添加动作(action)来工作的,从而形成语法制导定义(Syntax-Directed Definition)。动作是指,一个结果在推导过程中被使用的时候,将要被执行的步骤或过程。 一个嵌入了将要执行的动作的语法规则,称为一个语法制导翻译计划(有时简称为“翻译计划”)。

语法中的每个符号可以有一个属性,即一个将被关联到符号的值。常见的属性可能包含变量类型、表达式的值,等等。 给出一个符号X和一个属性t,符号的属性可以通过X.t来引用。

因此,给出动作和属性,语法规则可以通过每个符号的属性来应用动作和传递信息,从而将语法规则用于翻译某语言上的字符串。2

元编译器早期元编译器在其描述中使用了语法驱动翻译和语法制导翻译这两个术语。在其输出代码中具有元编程的语言特性。

参见元编译器、META II以及TREE-META。1

本词条内容贡献者为:

黎明 - 副教授 - 西南大学