【编译原理笔记09】语法制导翻译:语法制导翻译方案,在非递归的预测分析过程中进行翻译

本文详细介绍了语法制导翻译方案(SDT)的实现,包括S-SDD转换为SDT、S-属性定义的SDT、扩展的LR语法分析栈以及在非递归预测分析过程中的翻译。通过具体的例子展示了如何在自底向上语法分析栈中实现桌面计算器,解释了如何将语义动作转化为栈操作,并讨论了L-SDD转换为SDT的方法及其在LL或LR分析过程中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本次笔记内容:
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 入栈。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值