编译器笔记20-语法制导翻译-语法制导定义SDD

语法制导定义SDD(Syntax-Directed Definition)

语法制导定义SDD是对CFG的推广

  • 将每个文法符号和一个语义属性集合相关联
  • 将每个产生式和一组语义规则相关联,用来计算该产生式中各文法符号的属性值。
文法符号的属性
  • 综合属性 (synthesized attribute)
综合属性.png

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

  • 继承属性 (inherited attribute)
继承属性.png

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

例-带有综合属性的SDD.png

问: 综合属性和继承属性有何区别?
答: 继承属性是,从上而下传递信息,综合属性自下而上传递信息;终结符号只有综合属性,非终结符号既有综合属性也可有继承属性;

例-带有继承属性L.in的SDD.png

在第四个和第五个产生式的语义规则中有副作用addtype。

在此SDD中它的基础文法是用来描述变量声明语句的上下文无关文法(CFG)。

非终结符T是用于生成一个类型关键字。T的type属性是有其子节点定义的,因此它是一个综合属性。

非终结符L是用于生成标记符序列,L只有一个inh属性,根据第一个产生式和第四个产生式的语义规则可以看出L的inh属性是由其兄弟节点或者父节点的属性值所定义。因此inh是L的一个继承属性,由语义规则L.inh=T.type可知L.inh属性是用于描述L生成的标记符序列标记符对应的类型。

终结符id的综合属性lexeme是由词法分析器提供的词法值,表示构成id的字符序列。addtype的功能是为id.lexeme在符号表中创造一条记录,并将其类型设置为L.inh。

属性文法 (Attribute Grammar)

一个没有副作用的SDD有时也称为属性文法,属性文法的规则仅仅通过其它属性值和常量来定义一个属性值。

例.png

你可能感兴趣的:(编译器笔记20-语法制导翻译-语法制导定义SDD)