编译原理学习笔记14——属性文法与语法制导翻译1

news/2024/11/23 3:29:31/

编译原理学习笔记14——属性文法与语法制导翻译1

  • 14.1 属性文法
  • 14.2 属性计算

14.1 属性文法

属性文法
在这里插入图片描述
在这里插入图片描述

综合属性

  • 自下而上传递信息
  • 语法规则:根据右 部候选式中的符号 的属性计算左部被 定义符号的综合属性
  • 语法树:根据子结 点的属性和父结点 自身的属性计算父 节点的综合属性
    在这里插入图片描述

继承属性

  • 自上而下传递信息
  • 语法规则:根据右部 候选式中的符号的属 性和左部被定义符号 的属性计算右部候选 式中的符号的继承属 性
  • 语法树:根据父结点 和兄弟节点的属性计 算子结点的继承属性
    在这里插入图片描述
    在这里插入图片描述

属性依赖
在这里插入图片描述
属性依赖
在这里插入图片描述
语义规则
在这里插入图片描述
在这里插入图片描述

测试:语义规则

  • 考虑非终结符A,B和C,其中,A有一个继承 属性a和一个综合属性b,B有综合属性c,C有 继承属性d。产生式A→BC不可能有规则
  • A. C.d:=B.c+1
  • B. A.b:=B.c +C.d
  • C. B.c := A.a
    答案:C
    带注释的语法树
    在这里插入图片描述
  • 在语法树中,一个结点的综合属性的值由其子 结点和它本身的属性值确定
  • 使用自底向上的方法在每一个结点处使用语义 规则计算综合属性的值
  • 仅使用综合属性的属性文法称S-属性文法
    在这里插入图片描述
  • 在语法树中,一个结点的继承属性由其父结点、 其兄弟结点和其本身的某些属性确定
  • 用继承属性来表示程序设计语言结构中的上下 文依赖关系很方便
    在这里插入图片描述
    在这里插入图片描述

14.2 属性计算

基于属性文法的处理方法

  • 语义规则的计算
    • 产生代码
    • 在符号表中存放信息
    • 给出错误信息
    • 执行任何其它动作
  • 对输入串的翻译就是根据语义规则进行计算

基于属性文法的处理方法

  • 由源程序的语法结构所驱动的处理办法就是语 法制导翻译法
  • 输入串-》 语法树 -》按照语义规则计算属性

基于属性文法的处理方法

  • 依赖图
  • 树遍历
  • 一遍扫描

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

依赖图的构建算法
在这里插入图片描述
依赖图示例
在这里插入图片描述

良定义的属性文法

  • 如果一属性文法不存在属性之间的循环依赖关 系,则称该文法为良定义的
  • 一个依赖图的任何拓扑排序都给出一个语法树 中结点的语义规则计算的有效顺序

属性的计算次序
在这里插入图片描述
在这里插入图片描述
树遍历的属性计算方法
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
一遍扫描的处理方法
在这里插入图片描述
抽象语法树
在这里插入图片描述
建立表达式的抽象语法树
在这里插入图片描述
建立抽象语法树的语义规则
在这里插入图片描述
在这里插入图片描述


http://www.ppmy.cn/news/19936.html

相关文章

《C++程序设计原理与实践》笔记 第11章 定制输入/输出

在本章中,我们重点关注如何使第10章中介绍的通用iostream框架适配特定的需求和偏好。 11.1 规则性和不规则性 C标准库的输入/输出部分——iostream库为文本的输入和输出提供了一个统一的、可扩展的框架。 到目前为止,我们将所有输入源视为等价的&…

网络原理之HTTP/HTTPS、TCP、IP四层协议栈

文章目录一、应用层(一)xml协议(二)json协议(三)protobuffer协议(四)HTTP协议1. 抓包工具,fiddler2. HTTP报文格式3. HTTP请求(Request)(1)URL基本…

2023需要重点关注的四大AI方向

2023需要重点关注的四大AI方向 过去10年,人工智能从实验室走向各行各业,成为一种普遍技术应用于众多领域。根据IDC的数据,2022年全球AI市场规模达到4328亿美元,增长近20%。而Precedence Research预计,到2030年&#xf…

一、Swagger简介

一、简介是springfox-swagger的增强UI实现,为Java开发者在使用Swagger的时候,能拥有一份简洁、强大的接口文档体验 效果:http://swagger-bootstrap-ui.xiaominfo.com/doc.html 示例:swagger-bootstrap-ui-demo: knife4j 以及swagger-bootst…

Modbus协议完整版

第一部分:Modbus协议1 引言1.1 范围MODBUS是OSI模型第7层上的应用层报文传输协议,它在连接至不同类型总线或网络的设备之间提供客户机/服务器通信。自从1979年出现工业串行链路的事实标准以来,MODBUS使成千上万的自动化设备能够通信。目前&am…

Linux常见的进程间通信

目录管道pipe匿名管道接口介绍示例代码fifo命名管道接口介绍代码示例匿名管道与命名管道的区别shm共享内存接口介绍相关指令代码示例特点总结信号信号量socket套接字管道 管道是一种较老的,半双工通信方式,即数据只能向一个方向流动(即一个进…

Java---微服务---分布式搜索引擎elasticsearch(1)

分布式搜索引擎elasticsearch(1)1.elasticsearch1.1.了解ES1.1.1.elasticsearch的作用1.1.2.ELK技术栈1.1.3.elasticsearch和lucene1.1.4.为什么不是其他搜索技术?1.1.5.总结1.2.倒排索引1.2.1.正向索引1.2.2.倒排索引1.2.3.正向和倒排1.3.es…

初识Nonebot2

文章目录什么是nonebot2?机器人工作流程WebSocket协议OneBot标准Nonebot2框架工作路径什么是nonebot2? 关于NoneBot2,我们先来引用一下官方文档的描述 NoneBot2是一个可扩展的 Python 异步机器人框架,它会对机器人收到的事件进行…