【编译原理复习笔记】属性文法

属性文法

也称为属性翻译文法,由 Knuth 提出,以上下文无关文法为基础
(1)为每个文法符号(终结符与非终结符)配备相关的属性,代表与该文法符号相关的信息
(2)属性文法对于每个产生式都配备了对应的语义规则,标明了语义关系的传递
在这里插入图片描述

属性的分类

综合属性

自下而上的传递信息,根据产生式右部的符号属性计算左部被定义符号的综合属性
在语法树中,即根据子节点的属性和自身的自身属性来计算父节点的综合属性

继承属性

自上而下传递信息,根据右部候选式的符号属性与左部的属性计算右部候选式中符号的继承属性
在这里插入图片描述

属性依赖

对于每个产生式 A → α A \to \alpha Aα都有对应的语义规则,每条规则的形式可以写作:
b,c1,c2 等都为标识符对应的属性
b = f ( c 1 , c 2 , . . . , c k ) b = f(c_1,c_2,...,c_k) b=f(c1,c2,...,ck)
则我们说red:属性 b 依赖于 c1,c2 等
这种依赖又分为我们所提到的综合属性或继承属性
(1)若 b 为综合属性,则 c1,c2 等为产生式右部文法符号的属性
(2)若 b 为右部某个文法符号的继承属性,则 c1,c2 可能为产生式左部或右部任何符号的属性
注意:因为终结符没有子节点,所以终结符只有综合属性,由词法分析器提供

语义规则

(1)对出现在右边的继承属性和左边的综合属性都必须提供相应的计算规则,而且只能使用相应产生式中的文法符号
(2)出现在左边的继承规则和右边的综合属性不由对应产生式的属性计算规则进行计算,而是由其他产生式的属性规则计算或者由相关参数提供

带注释的语法树

在这里插入图片描述
e.g.3*5+4n 利用第一组产生式
对于综合属性,一边自下而上分析构建语法树一边使用语义规则代入
在这里插入图片描述
由此可以得到带注释的语法分析树
对于继承属性,则先构建语法树,然后自上而下填写,对于 addtype,就是在符号表中填写其对应名字,属性对应 addtype 中后项(通常为父节点)所对应的属性
在这里插入图片描述

属性计算

语义规则的计算可以用来:产生代码/在符号表中存放信息/执行动作,blue:对输入串的翻译就是根据语义规则的计算
语法制导翻译法就是将输入串转化为合适的语法树,然后选择适合的语法规则计算属性
基于语法的语义分析方式是多样的,主要有以下三种:
(1)依赖图
(2)树遍历
(3)依赖扫描

依赖图

一颗语法树中的节点的继承属性和综合属性的依赖关系可以由依赖图来描述
若属性 b 依赖于属性 c,则从 c 有一条有向边指向属性 b
根据依赖图,如果一个属性文法不存在属性之间的循环依赖关系(环),则称则称该文法是良定义的
在这里插入图片描述

树遍历

假设语法树已建立,且树中已带有开始符号的继承属性和终结符的综合属性,此后以某种遍历顺序遍历语法树,直到最终所有属性都被计算出来
递归的调用 VisitNode 方法
在这里插入图片描述

一遍扫描

语法树需要反复使用 visitNode,属于多遍扫描,一遍扫描则是根据语法分析的过程同时计算属性值
语义规则的计算时机:
(1)自上而下分析,一个产生式匹配输入串成功时计算语义规则
(2)自下而上分析,一个产生式被归约时计算语义规则
抽象语法树:
建立表达式的抽象语法树
mknode(op,left,right)建立运算符号节点,left 和 right 分别指向左子树和右子树
mkleaf(id,entry)建立标识符节点
mkleaf(num,val)建立数节点
在这里插入图片描述

一遍扫描与自下而上的语法分析器配合工作
在这里插入图片描述

S属性文法

只含有综合属性,使用自下而上的分析器,在原本的状态-符号栈中 增加附加域存放综合属性值
假设 A → X Y Z A \to XYZ AXYZ对应的语义规则为 A . a = f ( X . x , Y . y , Z . z ) A.a = f(X.x,Y.y,Z.z) A.a=f(X.x,Y.y,Z.z)
归约时,将 X、Y、Z 的状态,符号,属性弹出,然后将 A 的状态符号属性压入栈顶

L 属性文法

L 属性文法适合一遍扫描的自上而下分析,通过深度优先地遍历语法树。对于 A → X 1 X 2 . . . X i A \to X_1X_2...X_i AX1X2...Xi,Xi 的继承属性依赖于:
(1)A 的继承属性
(2)Xi 左边符号 X1,X2 等的属性,而不包括右侧
red:S属性文法属于 L 属性文法

翻译模式

语义规则只给出了属性计算的定义,但是没有给出属性计算的先后顺序,可以在属性文法的基础上进一步给出使用顺序,就叫翻译模式
翻译模式:将语义规则与属性用花括号括起来放在合适的位置上,用来表示语法制导翻译的时机
在这里插入图片描述

注意将中缀表达式换成了后缀表达式
(1)当只需要综合属性的时候,将赋值动作放在相应产生式最右侧的末尾
T → T 1 ∗ F T . v a l : = T 1 . v a l × F . v a l T \to T_1*F\\ \\{T.val:=T_1.val\times F.val\\} TT1FT.val:=T1.val×F.val
(2)如果既有综合属性又有继承属性,在建立翻译模式时就必须保证:产生式右边符号的继承属性必须在这个符号之前计算出来
(3)一个动作不能够使用其右边的综合属性
(4)产生式左部的非终结符的综合属性必须等其所有应用的属性被计算出之后才能计算,且需要放在末尾计算

语义动作时机统一

如果能够使所有语义动作都放在产生式的末尾,就可以使每次语义执行的时机统一
方法:
(1)添加一个产生式: M → ϵ M \to \epsilon Mϵ
(2)把嵌入在产生式中间的语义动作用 M 代替,并将这个动作放在产生式 M TO EPSILON 的末尾
在这里插入图片描述

消除翻译模式的左递归

在这里插入图片描述

这里可以理解 R.i 为继承属性,R.s 为综合属性,继承属性必须放在非终结符前,所以 Ri 的语义动作都在 Ri 前,Rs 则放在产生式最后给左部赋值
在这里插入图片描述

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

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

相关文章

数据链路层协议——以太网协议

1. 数据链路层 网络层用于将数据从一台主机发送到另一台主机。传输层用于将数据可靠的从一台主机发送到另一台主机。(网络层没有保证可靠性的策略,传输过程中可能会出现各种意外,例如:丢包,网络拥塞等。通过传输层可以…

跨域问题的4种解决方案

文章导读 前言 跨域问题指的是在Web开发中,由于浏览器的同源策略限制,当一个网页尝试访问与它不同源(协议、域名或端口不同)的资源时,可能会遇到安全限制导致无法正常访问的问题。这种策略旨在防止恶意网站读取或修改其…

订餐系统总结、

应用层: SpringBoot:快速构建Spring项目,采用“约定大于配置”的思想,简化Spring项目的配置开发。 SpringMvc:Spring框架的一个模块,springmvc和spring无需通过中间整合层进行整合,可以无缝集成。 Sprin…

完整的数据可视化方法集

在当前的大数据时代,了解如何可视化数据是UI/UX设计师技能的重要组成部分。如今,几乎所有的公司都需要良好的数据可视化作为确定业务方向和决策的参考。数据的可视化结果越好,用户的决策就越科学。 1、什么是数据可视化 数据可视化是将信息…

张量 t-product 积(matlab代码)

参考文献:Tensor Robust Principal Component Analysis with a New Tensor Nuclear Norm 首先是文章2.3节中 t-product 的定义: 块循环矩阵: 参考知乎博主的例子及代码:(t-product与t-QR分解,另一篇傅里叶对…

vue通过for循环生成input框后双向绑定失效问题

有些时候页面上有太多的表单元素&#xff0c;一个个的写太过繁琐&#xff0c;拿 input 框举例&#xff0c;众多的 input 框&#xff0c;无非就是输入框前的说明和 input 框的 name 属性不一样 <el-form :inline"true" :model"formInline" size"mi…

01-05.Vue自定义过滤器

目录 前言过滤器的概念过滤器的基本使用给过滤器添加多个参数 前言 我们接着上一篇文章01-04.Vue的使用示例&#xff1a;列表功能 来讲。 下一篇文章 02-Vue实例的生命周期函数 过滤器的概念 概念&#xff1a;Vue.js 允许我们自定义过滤器&#xff0c;可被用作一些常见的文本…

[协议]stm32读取AHT20程序示例

AHT20温度传感器使用程序&#xff1a; 使用i2c读取温度传感器数据很简单&#xff0c;但市面上有至少两个手册&#xff0c;我这个对应的手册贴出来&#xff1a; main: #include "stm32f10x.h" // Device header #include <stdint.h> #includ…

数智赋能内涝治理,四信城市排水防涝解决方案保障城市安全运行

由强降雨、台风造成城市低洼处出现大量积水、内涝的情况时有发生&#xff0c;给人们出行带来了极大不便和安全隐患&#xff0c;甚至危及群众生命财产安全。 为降低内涝造成的损失&#xff0c;一方面我们要大力加强城市排水基础设施的建设&#xff1b;另一方面要全面掌握城市内涝…

U-Boot menu菜单分析

文章目录 前言目标环境背景U-Boot如何自动调起菜单U-Boot添加自定义命令实践 前言 在某个厂家的开发板中&#xff0c;在进入它的U-Boot后&#xff0c;会自动弹出一个菜单页面&#xff0c;输入对应的选项就会执行对应的功能。如SD卡镜像更新、显示设置等&#xff1a; 目标 本…

Unity射击游戏开发教程:(20)增加护盾强度

在本文中,我们将增强护盾,使其在受到超过 1 次攻击后才会被禁用。 Player 脚本具有 Shield PowerUp 方法,我们需要调整盾牌在被摧毁之前可以承受的数量,因此我们将声明一个 int 变量来设置盾牌可以承受的击中数量。

微信小程序画布显示图片绘制矩形选区

wxml <view class"page-body"><!-- 画布 --><view class"page-body-wrapper"><canvas canvas-id"myCanvas" type"2d" id"myCanvas" classmyCanvas bindtouchstart"touchStart" bindtouchmo…

OpenFeign快速入门 替代RestTemplate

1.引入依赖 <!--openFeign--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency><!--负载均衡器--><dependency><groupId>org.spr…

【全网最全】2024电工杯数学建模B题问题一14页论文+19建模过程代码+py代码+2种保奖思路+数据等(后续会更新成品论文等)

您的点赞收藏是我继续更新的最大动力&#xff01; 一定要点击如下的卡片链接&#xff0c;那是获取资料的入口&#xff01; 【全网最全】2024电工杯数学建模B题问一论文19建模过程代码py代码2种保奖思路数据等&#xff08;后续会更新成品论文等&#xff09;「首先来看看目前已…

C++中的四种类型转换运算符

隐式类型转换是安全的&#xff0c;显式类型转换是有风险的&#xff0c;C语言之所以增加强制类型转换的语法&#xff0c;就是为了强调风险&#xff0c;让程序员意识到自己在做什么。但是&#xff0c;这种强调风险的方式还是比较粗放&#xff0c;粒度比较大&#xff0c;它并没有表…

MySQL中如何知道数据库表中所有表的字段的排序规则是什么?

查看所有表的字段及其排序规则&#xff1a; 你可以查询 information_schema 数据库中的 COLUMNS 表&#xff0c;来获取所有表的字段及其排序规则。以下是一个示例查询&#xff1a; SELECT TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, COLLATION_NAME FROM information_schema.COL…

【设计模式深度剖析】【5】【创建型】【原型模式】| 类比群发邮件,加深理解

&#x1f448;️上一篇:建造者模式 | 下一篇:创建型设计模式对比&#x1f449;️ 目录 原型模式(Prototype Pattern)概览定义英文原话直译 3个角色类图1. 抽象原型&#xff08;Prototype&#xff09;角色2. 具体原型&#xff08;Concrete Prototype&#xff09;角色3. 客户…

必示科技参与智能运维国家标准预研线下编写会议并做主题分享

近日&#xff0c;《信息技术服务 智能运维 第3部分&#xff1a;算法治理》&#xff08;拟定名&#xff09;国家标准预研阶段第一次编写工作会议在杭州举行。本次会议由浙商证券承办。 此次编写有来自银行、证券、保险、通信、高校研究机构、互联网以及技术方等29家单位&#xf…

Linux基础(四):Linux系统文件类型与文件权限

各位看官&#xff0c;好久不见&#xff0c;在正式介绍Linux的基本命令之前&#xff0c;我们首先了解一下&#xff0c;关于文件的知识。 目录 一、文件类型 二、文件权限 2.1 文件访问者的分类 2.2 文件权限 2.2.1 文件的基本权限 2.2.2 文件权限值的表示方法 三、修改文…

CSS3 新增背景属性 + 新增边框属性(如果想知道CSS3新增背景属性和新增边框属性的知识点,那么只看这一篇就够了!)

前言&#xff1a;CSS3在CSS2的基础上&#xff0c;新增了很多强大的新功能&#xff0c;从而解决一些实际面临的问题&#xff0c;本篇文章主要讲解的为CSS3新增背景属性和新增边框属性。 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要了解更多内容可以访问我的主页秋刀鱼不做梦-CSD…