编译器笔记23-语法制导翻译-语法制导翻译方案SDT

语法制导翻译方案SDT(Syntax-Directed Translation scheme)

SDT是在产生式右部中嵌入了程序片段(称为语义动作)的CFG

例.png

SDT可以看作是SDD的具体实施方案

本节主要关注如何使用SDT来实现两类重要的SDD,因为在这两种情况下,SDT可在语法分析过程中实现。

  • 基本文法可以使用LR分析技术,且SDD是S属性的。
  • 基本文法可以使用LL分析技术,且SDD是L属性的。

将S-SDD转换为SDT

将一个S-SDD 转换为SDT的方法:将每个语义动作
都放在产生式的最后。

例.png

S-属性定义的SDT实现

如果一个S-SDD的基本文法可以使用LR分析技术,那么它的SDT 可以在LR 语法分析过程中实现。

例.png
扩展的LR语法分析栈.png

将语义动作中的抽象定义式改写成具体可执行的栈操作

栈操作.png
例-在自底向上语法分析栈中实现桌面计算器.png

语义动作中所定义的抽象定义式被改写成具体可执行的栈操作

0.png
1.png
2.png
3.png
4.png
5.png
6.png
7.png
8.png

注:

  1. 属性栈中的值不一定会随着状态和符号栈的改变而改变。
  2. 此属性栈的值是综合属性。

将L-SDD转换为SDT

  • 将计算某个非终结符号A的继承属性的动作插入到产生式右部中紧靠在A的本次出现之前的位置上

  • 将计算一个产生式左部符号的综合属性的动作放置在这个产生式右部的最右端

例.png

子节点的继承属性不能使用父节点的综合属性,同时父节点的综合属性只能通过其子结点或其本身的属性值来定义。因此左部符号的综合属性动作放置到最右端是最合理的,并且对子节点的继承属性的计算并没有影响。

L-属性定义的SDT实现

如果一个L-SDD 的基本文法可以使用LL分析技术,那么它的SDT 可以在LL 或LR 语法分析过程中实现。

例.png

L-属性定义的SDT实现

如果一个L-SDD的基本文法可以使用LL分析技术,那么它的SDT 可以在LL或LR语法分析过程中实现。

  • 在非递归的预测分析过程中进行语义翻译
  • 在递归的预测分析过程中进行语义翻译
  • 在LR 分析过程中进行语义翻译

你可能感兴趣的:(编译器笔记23-语法制导翻译-语法制导翻译方案SDT)