声明:本系列文章,是根据中国大学MOOC网 哈工大的编译原理 这门课学习而成的学习笔记。

一、语法制导翻译概述

什么是语法制导翻译

语法制导翻译的基本思想

两个概念

语法制导定义(SDD)


语法制导翻译方案(SDT)

SDD与SDT

SDD:

  • 是关于语言翻译的高层次规格说明;
  • 隐蔽了许多具体实现细节,使用户不必显式地说明翻译发生的顺序

SDT:

  • 可以看作是对SDD的一种补充,是SDD的具体实施方案;
  • 显式地指明了语义规则的计算顺序,以便说明某些实现细节

二、语法制导定义SDD

综合属性(synthesized attribute)

继承属性(inherited attribute)


属性文法 (Attribute Grammar)

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

三、SDD的求值顺序

SDD的求值顺序

  • SDD为CFG中的文法符号设置语义属性。对于给定的输入串x,应用语义规则计算分析树中各结点对应的属性值

  • 按照什么顺序计算属性值?
    语义规则建立了属性之间的依赖关系,在对语法分析树节点的一个属性求值之前,必须首先求出这个属性值所依赖的所有属性值

依赖图(Dependency Graph)

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

属性值的计算顺序



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

S-属性定义

L-属性定义



五、语法制导翻译方案SDT

语法制导翻译方案SDT


SDT可以看作是SDD的具体实施方案
主要关注如何使用SDT来实现两类重要的SDD,因为在这两种情况下,SDT可在语法分析过程中实现

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

将S-SDD转换为SDT

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

S-属性定义的SDT 实现




将L-SDD转换为SDT

L-属性定义的SDT 实现

L-属性定义的SDT 实现

六、在非递归的预测分析

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

扩展语法分析栈

分析栈中的每一个记录都对应着一段执行代码

  • 综合记录出栈时,要将综合属性值复制给后面特定的语义动作
  • 变量展开时(即变量本身的记录出栈时),如果其含有继承属性,则要将继承属性值复制给后面特定的语义动作




七、在递归的预测分析过程中进行翻译




算法


八、L-属性定义的自底向上翻译

  • 给定一个以LL文法为基础的L-SDD,可以 修改这个文法,并在LR语法分析过程中计 算这个新文法之上的SDD





编译原理(5):语法制导翻译相关推荐

  1. 编译原理:语法制导翻译

    一,语法制导定义 属性文法 是在上下文无关文法的基础上为每个文法符号(终结符或非终结符)配备若干个相关的"值"(称为属性) 文法表示 三元组:A=(G,V,F) G:是一个上下文无 ...

  2. 【最新合集】编译原理习题(含答案)_8-10语法制导翻译_MOOC慕课 哈工大陈鄞

    [最新合集]MOOC哈工大陈鄞 编译原理答案全集-->传送门 1 文法G[S]及其语法制导翻译定义如下: 产生式 语义动作 S' → S print( S.num) S → ( L) S.num ...

  3. 编译原理—语法制导翻译、S属性、L属性、自上而下、自下而上计算

    编译原理-语法制导翻译.S属性.L属性.自上而下.自下而上计算 1.语法制导翻译 1.1属性文法 1.2算术表达式的计数器 1.3属性的分类 1.4属性依赖图 继承属性的计算 1.5语义规则的计算方法 ...

  4. 编译原理学习笔记 5.1 翻译文法和语法制导翻译

    前言 参考课上PPT内容. 该学习笔记目前仅打算个人使用. 后续会进一步整理,包括添加笔记内容,标明参考资料. 更新中... 跳过目录 目录 导言 一.翻译文法和语法制导翻译 输入文法 翻译文法 活动 ...

  5. 三万五千字长文!让你懂透编译原理(六)——第六章 属性文法和语法制导翻译

    三万五千字长文!让你懂透编译原理(六)--第六章 属性文法和语法制导翻译 长文预警 系列文章传送门: 万字长文+独家思维导图!让你懂透编译原理(一)--第一章 引论 万字长文!让你懂透编译原理(二)- ...

  6. QQ浏览器HD iOS 动态化/热修复方案QBDF解释器-语法制导翻译与递归子程序设计(编译原理)(5)简书被冻结-搬运】

    原作时间:2019-2021年 此次共享,腾讯内网 / 外网同步发布. 内部代码地址:https://git.code.oa.com/fatboyli/QBDF 外部代码地址:GitHub - ven ...

  7. 编译原理 -- 语法制导翻译

    语法制导翻译 语法制导翻译是通过向一个文法的产生式附加一些规则或程序片段而得到的. 语法制导翻译的两个概念 下面是与语法制导翻译相关的两个概念: 属性(attribute) : 表示与某个程序构造相关 ...

  8. 编译原理——语法制导翻译并产生中间代码(布尔表达式和控制语句)

    语法制导翻译并产生中间代码: 概述: 语法分析之后,编译的任务是由已识别成功的正确源程序生成一组规格一致,便于计算加工的指令形式. 中间代码的生成方法: 语法制导翻译,属性文法制导翻译 中间代码: 不 ...

  9. 编译原理(十)语法制导翻译

    语法制导定义 Syntax-Driect Definition SDD 语法制导的翻译方案Syntax-driected translation scheme SDT,可以看作SDD的具体实现方案,S ...

最新文章

  1. Code Sign error: Provisioning profile 'xxxxxxxxxxxxxxxxxxxxxxxxx'
  2. Red Hat Enterprise Linux 5---system-config-*管理工具
  3. 鼠标键盘唤醒计算机,除了按下电源按钮唤醒计算机,WIN10也可以使用鼠标或键盘来唤醒...
  4. 基于阿里云镜像源使用kubeadm安装k8s单master节点集群(v1.17.3)
  5. mapreduce分组统计_Mongodb的分组统计MapReduce
  6. linux ps 详解 博客,Linux PS 命令 详解(转)
  7. python turtle 画数字8_turtle库的常用方法
  8. jquery系列教程8-jquery插件大全
  9. python求三个整数最大值_python 练习题:定义一个getMax()函数,返回三个数(从键盘输入的整数)中的最大值。...
  10. 【交通标志识别】基于matlab GUI BP神经网络交通标志识别(带面板)【含Matlab源码 1647期】
  11. 《UNIX网络编程 卷1:套接字联网API(第3版)》——2.13 常见因特网应用的协议使用...
  12. 晨风机器人回复词库_qq机器人词库大全下载
  13. 软件测试按照各种方式分类
  14. Android 三类框架的理解以及MVVM框架的使用
  15. 【序列推荐】KDD2018|STAMP---基于注意力的短期记忆优先的推荐
  16. redhat linux 无线网卡,RedHat Linux 6.4安装RTL8188CUS无线网卡驱动
  17. 剖析搜索引擎背后的经典数据结构和算法
  18. 010序列检测电路设计
  19. WPF中CefSharp的使用(在WPF中使用快乐的使用chrome)
  20. iOS开发---开发工具简介

热门文章

  1. python GUI-Tkinter编程
  2. win2000安装AD目录
  3. 《Python渗透测试编程技术:方法与实践》:网络嗅探与欺骗
  4. <Redis开发与运维>一书阅读笔记记录
  5. Redis bitmap数据格式优化 (RoaringBitmap)
  6. 新年新气象,100行 Python 代码制作动态鞭炮
  7. 使用OpenCV+Python进行图像处理的初学者指南
  8. Android Studio: CreateProcess error=206 文件名或扩展名太长 解决方案之一
  9. 基于libVLC的参数设置可视化视频播放器
  10. 【NOIP2018】差点退役记