编译原理:语法制导翻译

语法制导翻译概述

语法制导翻译(Syntax-Directed Translation)=『词法分析+语义翻译=『语义分析+中间代码生成』』

语法制导翻译使用CFG来引导对语言的翻译,是一种面向文法的翻译技术。

语法制导的翻译:一种形式化的语义描述方法,包括两种具体形式:

  • 语法制导定义(Syntax-Directed Definitions, SDD):定义翻译所必须的语义属性和语义规则,一般不涉及计算顺序。
  • 语法制导翻译方案(Syntax-Directed Translation Scheme,SDT):给出语义规则的计算顺序。

SDD是对CFG的推广

  • 将每个文法符号和一个语义属性集合相关联。
  • 将每个产生式和一组语义规则相关联,这些规则用于计算该产生式中各文法符号的属性值。

SDT是在产生式右部嵌入了程序片段CFG,这些程序片段称为语义动作


语法制导定义 SSD

综合属性(synthesized attribute):

  • 在分析树结点 N 上的非终结符 A 的综合属性只能通过 N 的子结点N 本身的属性值来定义。
  • 终结符可以具有综合属性。终结符的综合属性值是由词法分析器提供的词法值,因此在SDD中没有计算终结符属性值的语义规则。

编译原理:语法制导翻译_第1张图片

继承属性(inherited attribute)

  • 在分析树结点 N 上的非终结符 A 的继承属性只能通过 N 的父结点、N 的兄弟结点或 N 本身的属性值来定义。
  • 终结符没有继承属性。终结符从词法分析器处获得 的属性值被归为综合属性值。

编译原理:语法制导翻译_第2张图片

虚拟属性

依赖

副作用(side effects):一般属性值计算(基于属性值或常量进行的)之外的功能。一个没有副作用的SDD有时也称为属性文法


SDD 的求值顺序

依赖图是一个描述了分析树中结点属性间依赖关
系的有向图,分析树中每个标号为X的结点的每个属性a都对应 着依赖图中的一个结点,如果属性X.a的值依赖于属性Y.b的值,则依赖图中有一条从Y.b的结点指向X.a的结点的有向边。

  • 对于只具有综合属性的 SDD,可以按照任何自 底向上的顺序计算它们的值。
  • 对于同时具有继承属性和综合属性的 SDD,不能保证存在一个顺序来对各个节点上的属性进 行求值。

S-属性定义与L-属性定义

仅仅使用综合属性的 SDD 称为 S 属性的 SDD

如果一个SDD是S属性的,可以按照语法分析树节点的任何自底向上顺序来计算它的各个属性值。

L-属性定义的直观含义:在一个产生式所关联的各属性之间,依赖图的边可以从左到右,但不能从右到左。即 A->X1X2……Xn 中 Xi 的每个继承属性仅依赖于:

  • A 的继承属性
  • Xi 左边的符号X1,……Xi-1 的属性
  • Xi 本身的属性,但是不能在依赖图中形成环路。

每个S-属性定义都是L-属性定义

你可能感兴趣的:(考试攻略)