本次笔记内容:
5-5 语法制导翻译方案
5-6 在非递归的预测分析过程中进行翻译
本节课幻灯片,见于我的 GitHub 仓库:第9讲 语法制导翻译_2
文章目录
语法制导翻译方案
语法制导翻译方案 SDT
语法制导翻译方案 (SDT)
是在产生式右部
中嵌入了程序片段
(称为语义动作
)的CFG
。
如上,大括号括起的部分就是一些语义动作
。
SDT可以看作是SDD的具体实施方案。
本节主要关注如何使用SDT来实现两类重要的SDD,因为在这两种情况下,SDT可在语法分析过程中实现:
- 基本文法可以使用LR分析技术,且SDD是S属性的
- 基本文法可以使用LL分析技术,且SDD是L属性的
将S-SDD转换为SDT
将一个S-SDD转换为SDT的方法:将每个语义动作都放在产生式的最后。
S-属性定义的SDT 实现
如果一个S-SDD的基本文法可以使用LR分析技术,那么它的SDT可以在LR语法分析过程中实现。
如上,只有当归约时,才执行相应的语义动作。
扩展的LR语法分析栈
如果一个属性值的大小没有限制,最好将其存在栈外,在栈内存指针。
将语义动作中的抽象定义式改写成具体可执行的栈操作
如上,A的综合属性由其子节点X,Y,Z来定义的。左边为归约前分析栈的格局。
归约后,X、Y、Z出栈,A入栈。
例:在自底向上语法分析栈中实现桌面计算器
如上,语义动作中的抽象定义式,已经被改写成了具体的栈操作。没有给出符号栈和状态栈对应的栈操作。
初始时,输入指针指向3,状态I0遇到数字,进入I5,将5 d 3
入栈。