属性文法和语法制导翻译

news2024/11/16 3:27:33

前言

前面通过词法分析,语法分析,DFA最后接受了一个输入实际上是理解了某一句编程语句,编译器的角色是将高级程序语言编译(翻译)为汇编代码,通过词法、语法分析编译器可以理解高级程序语言了,那么如何实现输出汇编代码和创建变量等等这一系列动作?属性文法,通过为产生式配备属性的计算规则,通过计算和传递属性处理语义,实现这一系列动作。

依赖图

在这里插入图片描述

依赖图是DAG图,每个节点是一个属性,这样可以按照拓扑序计算属性。下面是一个跟踪(动作)数据类型的例子,最后可以确定 i d 1 , i d 2 , i d 3 id_1,id_2,id_3 id1,id2,id3的类型为real。

在这里插入图片描述

一遍扫描的处理方法

在这里插入图片描述

对于DAG,非常直观地,按照拓扑序进行属性的计算即可,关键是根据继承属性之间的依赖关系,确定兄弟节点的计算次序。S-属性文法,没有继承属性;L-属性文法,产生式右侧的非终结符号已经是拓扑序了,即兄弟节点的计算次序已经合适。

语法制导翻译

在这里插入图片描述

两个属性文法的例子

在这里插入图片描述

动作:建立抽象语法树,这里的属性是指向节点的指针。

在这里插入图片描述
在这里插入图片描述

动作:构建正规式对应的NFA。
NewState代表创建一个新状态。可以看到节点之间除了赋值、传递操作外还有mknode,mkleaf,AddArc等(绘图)实际动作,影响到属性之外的事物,最终输出的是图。

L-属性文法

在这里插入图片描述

翻译模式

在这里插入图片描述

引入翻译模式的概念,使得动作更加丰富(产生式中间有动作,实际上可以通过引入 ϵ \epsilon ϵ,使得动作永远在产生式右部末尾)。

消除翻译模式的左递归

在这里插入图片描述

原先,是递归计算儿子节点的综合属性,再返回计算自身的综合属性;修改后增加非终结符R,通过层层计算继承属性R.i,再通过综合属性R.s传回来。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/420207.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaScript + DOM

JavaScript 官方文档 https://www.w3school.com.cn/js/index.asp 基本说明 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SgjOIfTi-1681034533049)(E:\Kuangshen\学习笔记\韩顺平java\JavaScript_img\image-20230409130530115.png)] <!DOCT…

华为手表开发:WATCH 3 Pro(18)传感器订阅 方向传感器

华为手表开发&#xff1a;WATCH 3 Pro&#xff08;18&#xff09;传感器订阅 方向传感器初环境与设备方向传感器鸿蒙开发文件夹&#xff1a;文件新增展示的文本标记index.hmlindex.cssindex.js初 希望能写一些简单的教程和案例分享给需要的人 鸿蒙可穿戴开发 环境与设备 系…

Java设计模式之状态模式

状态模式 状态模式允许一个对象在其内部状态改变的时候改变其行为 应用场景 1、一个对象的行为取决于它的状态&#xff0c;并且它必须在运行时根据状态改变它的行为 2、操作中含有庞大的多分支的条件语句&#xff0c;且这些分支依赖于该对象的状态。这个状态通常用一个或者…

管廊隧道怎么定位人员?分享管廊隧道人员定位系统解决方案

管廊隧道施工的安全不仅关系着施工项目的质量与施工效率&#xff0c;更是关系着国家财产安全以及施工人员和人民群众的生命和财产安全。如何有效加强管廊隧道施工安全管理水平成为管廊隧道项目施工企业管理者最为关注的问题。 管廊隧道施工安全管理痛点难题 1.风险预警难 现场…

《数据库系统概论》第三章课后习题 (4个表+三建工程项目)

目录 5. 针对习题4中的4个表试用SQL完成以下各项操作&#xff1a; 9. 为三建工程项目建立一个供应情况的视图&#xff0c;包括供应商代码SNO, 零件代码PNO, 供应数量QTY&#xff0c;针对该视图完成下列查询&#xff1a; 5. 针对习题4中的4个表试用SQL完成以下各项操作&#x…

Resnet代码详解

这篇文章是用来讲解Resnet(残差网络)代码的&#xff0c;结合代码理解残差网络结构。 目录 Bottleneck类 Conv33 Conv11 BasicBlock ResNet _make_layer代码解析 完整的ResNet代码&#xff1a; 可以直接调用torch内置的resnet官方代码。 from torchvision.models impo…

华为手表开发:WATCH 3 Pro(19)传感器订阅 光线传感器

华为手表开发&#xff1a;WATCH 3 Pro&#xff08;19&#xff09;传感器订阅 光线传感器初环境与设备光线传感器鸿蒙开发文件夹&#xff1a;文件新增展示的文本标记index.hmlindex.cssindex.js初 希望能写一些简单的教程和案例分享给需要的人 鸿蒙可穿戴开发 环境与设备 系…

IP子网划分例题详解

子网划分概念&#xff1a; 通过改变ip的掩码长度来改变ip的网络地址&#xff0c;把原来的ip地址从网络位主机位&#xff0c;改成网络位子网位主机位。从而达到缩小主机个数或者扩大主机个数。缩小主机位&#xff0c;可以避免ip资源的浪费&#xff0c;减小广播域&#xff0c;提…

当对象释放时,避免析构函数调用两次

在上一篇文章中&#xff0c;我们提到过&#xff0c;在一个对象的析构函数中执行太多任务&#xff0c;可能导致对象被释放两次。解决此问题的标准方法是在析构过程中使用一个自定义的引用计数&#xff0c;如下图所示&#xff1a; >> 请移步至 topomel.com 以查看图片 <…

【Python】爬虫数据提取

目录 一、xpath提取数据 二、爬虫爬取图片资源 三、爬虫爬取视频资源 四、FLV文件转码为MP4文件 一、xpath提取数据 <bookstore> <book category"Python 基础"><title lang"cn">cook book</title><author>David Beazle…

PROFINET1.8.0.5协议移植问题汇总

注&#xff1a;记录个人移植过程遇到的问题&#xff0c;正在更新。。。 PROFINET1.8.0.5协议移植遇到问题汇总&#xff1a; 软件环境&#xff1a;TIA_V17 硬件环境&#xff1a;stm32F205_ZET6主控芯片TPS-1 PROFINET IO 20500PF00&#xff08;芯片物料编码B0001.0.2&#xff09…

LabVIEW-数组数据类型

数组是将一系列、同一类型的数据组合到一起。在LabVIEW 中&#xff0c;数组可以是字符串类型、数值型或者布尔型等多种数据类型中的同类数据的集合。但不能创建以数组为元素的数组&#xff0c;也不能创建图标和图形数组。 目录 创建数组 ​编辑 数组相关函数 求数组大小 初…

并发集合ConcurrentHashMap、CopyOnWriteArrayList

一、ConcurrentHashMap 1.1 存储结构 ConcurrentHashMap是线程安全的HashMap ConcurrentHashMap在JDK1.8中是以CAS+synchronized实现的线程安全 CAS:在没有hash冲突时(Node要放在数组上时) synchronized:在出现hash冲突时(Node存放的位置已经有数据了) 存储的结构:…

移动机器人路径跟踪的设计和仿真模型预测控制(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 在轨迹跟踪应用领域&#xff0c;通常 MPC 建模可根据机器人的控制方式选择基于运动学运动状态方程建模或者基于动力学运动状态…

【JavaEE初阶】计算机工作原理

摄影分享~ 文章目录冯诺依曼体系操作系统操作系统的定位进程/任务&#xff08;process/task&#xff09;内存管理冯诺依曼体系 线代的计算机&#xff0c;大多遵守冯诺依曼体系结构。 CPU 中央处理器: 进行算术运算和逻辑判断. 存储器: 分为外存和内存, 用于存储数据(使用二进…

从架构的角度看搜索与推荐

搜索与推荐的区别 1. 场景需求不同 搜索的场景故名思义&#xff0c;就是用户提供想要寻找的内容的描述&#xff0c;系统返回给用户匹配到的结果&#xff0c;常见的场景如文字输入框的搜索&#xff0c;图片搜索&#xff0c;听音识曲&#xff0c;标签筛选等&#xff0c;看似很多…

TypeScript - 泛型 Generics(通俗易懂详细教程)

前言 关于概念&#xff0c;本文不会过多叙述。 先来看个例子&#xff0c;体会一下泛型解决的问题吧。 我们定义一个 print 函数&#xff0c;这个函数的功能是把传入的参数打印出来&#xff0c;最后再返回这个参数&#xff0c;传入参数的类型是 string&#xff0c;函数返回类型…

Kyligence Zen 产品体验 --- 全方位总结

Kyligence Zen 是一个企业级大数据分析平台&#xff0c;基于 Hadoop 和 Spark 技术栈&#xff0c;具有高性能、可扩展性和易用性等优点。本文将从体验者角度出发&#xff0c;对 Kyligence Zen 进行详细的描述&#xff0c;包括使用场景、功能特点和使用体验。 一、使用场景 Kyl…

springboot 统一异常处理 + 日志记录

在项目的开发中&#xff0c;在某些情况下&#xff0c;比如非业务的操作&#xff0c;日志记录&#xff0c;权限认证和异常处理等。我们需要对客户端发出的请求进行拦截&#xff0c;常用的API拦截方式有Fliter&#xff0c;Interceptor&#xff0c;ControllerAdvice以及Aspect。先…

JavaScript【四】JavaScript中的函数

文章目录&#x1f31f;前言&#x1f31f;什么是函数?&#x1f31f;函数声明方式&#x1f31f; function关键字&#x1f31f; 字面量定义(匿名函数)&#x1f31f; 实例化构造函数&#x1f31f;函数调用方式&#x1f31f;通过括号调用&#x1f31f;自调用(IIFE)&#x1f31f;通过…