编译原理之SLR(1)和语法制导的翻译

1.SLR(1)思想:

基于容许LR(0)规范集中有冲突的项目集,用向前查看一个符号的办法进行处理,解决冲突,因为只对有冲突的状态才查看一个符号,是一种简单的LR(1)分析法,用SLR(1)表示

2.SLR(1)分析的简单方法:

简单向前看1集合:一类是文法符号X下的转换,集合是{X}(移进项)

                                另一类是U ::= u的转换,集合是follow(U)(归约项)

3.SLR(1)的判断:

(1)如果对于一个文法LR(0)项目及规范族的某些项目集或LR(0)分析表中含有的冲突能用上述方法解决,则称这个文法是SLR(1)文法

(2)SLR(1)分析表中无重复定义

4.在上下文无关文法G[S]的基础上,为文法符号关联有特定意义的属性(大多数是非终结符),并为产生式关联相应的语义动作或条件谓词(语义规则),称之为属性文法,并称文法G[S]是这一属性文法的基础文法。

5.属性的分类

综合属性:重写规则(产生式)左部的属性是综合属性(自底向上)

继承属性:产生式右边的符号(非终结符)的属性是继承属性(自顶向下)

内在属性:不会再属性定义中出现集合中的属性,通常是终结符的属性,如digit.val,由词法分析程序提供的属性值

例一:

判断属性只看赋值符号(:=)的左边,看左边的式子在产生式中的位置即可,在本例子中,全是综合属性

例二:

在本例子中,第一条语义规则中赋值符号的左侧是L的式子,在产生式中,L位于右侧,因此是继承属性

补充:有时语义规则的目的是为了产生一个副作用,比如打印一个计算结果(print)或者是添插符号表(addtype),此时,语义规则通常写成函数调用的形式function(c1,c2...),可看作是产生式做不文法符号的虚综合属性

6.遍历语法树进行语义计算

无圈依赖图(没有于一动作也就是虚节点构建的依赖图)以及语义计算

1.建立语法树,一般会给我们一个文法G[S]附带语义规则和一串要推导的式子,我们先建立一个语法树

2.直接看语义规则,如果非终结符含有某个属性,就将这个属性写在这个非终结符的附近,并且进行连接

3.在语法树中,将赋值语句中的式子指向被赋值的值,建立有向线段

4.如果依赖图是无圈的,从未被指向的点出发,进行式子的值的判断

这是课本中描写的步骤:

这是我们写出来的节点后的大概图像:

根据这个我们就知道,语义规则中与N有关的式子只有N.v,与S有关的式子有S.f,S.l,S.v三个式子

连接后的有向边如图:

如果我们知道有向边的起点,我们就可以求出有向边的终点,求的方法就运用的是语义规则中给我们提供的方法。

最后经过计算,我们写出了这样的带标注的语法分析树,这也是我们的最终结果

了解了这些,让我们一起来看一道例题吧

1.先建立语法分析树

2.标注语义规则中含有的值

3.建立有向边

4.求值

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

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

相关文章

荣耀MWC发布AI使能的全场景战略

【2024年2月25日,巴塞罗那】荣耀在2024 MWC世界移动通信大会上正式发布了全新的AI使能的全场景战略,推出平台级AI赋能,以人为中心的跨操作系统体验和基于意图识别的全新人机交互,以及与全球合作伙伴合作的荣耀Magic6 Pro&#xff…

Easy-Jmeter: 性能测试平台

目录 写在开始1 系统架构2 表结构设计3 测试平台生命周期4 分布式压测5 压力机管理6 用例管理6.1 新增、编辑用例6.2 调试用例6.3 启动测试6.4 动态控量6.5 测试详情6.6 环节日志6.7 实时数据6.8 测试结果 7 测试记录7 用例分析8 系统部署8.1普通部署8.2容器化部署 写在最后 写…

CAS5.3使用JPA实现动态注册服务

cas同时支持cas协议和OAuth2协议,官方默认是通过扫描json文件的形式注册客户端服务,但是此种方式需要重启服务才能生效,此次我们将使用JPA来完美实现动态注册服务,如果不知道cas如何部署,可以擦看之前的文章 cas-client基于CAS协议客户端搭建-CSDN博客 cas-server5.3自定义密…

GPIO通用输入输出管脚

GPIO 文章目录 GPIO单片机的工作方式CPU是通过读写寄存器来控制GPIO的GPIO硬件框架 8种模式结构推挽/推挽复用输出模式开漏/开漏复用输出输入结构 单片机是如何访问寄存器的?GPIO输出速度 GPIO,General Purpose lnput Outpu,指的是芯片的通用输入输出管脚。 单片机的…

TLS1.2抓包解析

1.TLS1.2记录层消息解析 Transport Layer SecurityTLSv1.2 Record Layer: Handshake Protocol: Client HelloContent Type: Handshake (22)Version: TLS 1.0 (0x0301)Length: 253Content Type:消息类型,1个字节。 i 0Version:协议版本&…

第二代80KM高效远距离传输:100G ZR4光模块的应用与发展

随着信息时代的发展,数据传输的需求日益增长,而光模块作为数据中心和网络基础设施的关键组成部分,其性能和应用范围也在不断扩大。易天光通信的第二代100G ZR4 80KM光模块很好的满足了当代社会通信网络的需求。本文易天光通信将探讨第二代高效…

数学建模【插值与拟合】

一、插值与拟合简介 在数学建模过程中,通常要处理由试验、测量得到的大量数据或一些过于复杂而不便于计算的函数表达式,针对此情况,很自然的想法就是,构造一个简单的函数作为要考察数据或复杂函数的近似。插值和拟合就可以解决这…

快速启动-后台管理系统

目录 Gitee人人开源 后端快速启动 1.clone仓库到本地 2.初始化数据库 3.更改数据库连接 4.启动项目验证 前端快速启动 1.克隆仓库 2.vsCode打开 3.控制台npm install 4.验证测试 时代已然不同,后台管理也可以使用脚手架方式快速启动。 Gitee人人开源 地…

京东 h5st 4.1 4.2 4.3 4.4逆向算法分析、API接口、商品详情、价格API接口(2024-02-26)

一、最新京东h5st 4.4逆向 1、h5st 4.4的位置 搜索关键字h5st很快找到: (h5st 4.4所在位置) 2、签名代码如下: , r JSON.stringify(a), c (new Date).getTime() || "1", d {appid: "pc-item-soa",functio…

洛谷C++简单题小练习day21—梦境数数小程序

day21--梦境数数--2.25 习题概述 题目背景 Bessie 处于半梦半醒的状态。过了一会儿,她意识到她在数数,不能入睡。 题目描述 Bessie 的大脑反应灵敏,仿佛真实地看到了她数过的一个又一个数。她开始注意每一个数码(0…9&#x…

短链接的背后故事:为互联网用户带来的便捷与安全

title: 短链接的背后故事:为互联网用户带来的便捷与安全 date: 2024/2/26 14:58:58 updated: 2024/2/26 14:58:58 tags: 短链接技术起源长URL问题解决链接分享便利性链接跟踪与分析链接管理效率提升链接安全保障应用领域广泛 一、短链接的起源 短链接是一种将长UR…

WampServer环境下载安装并结合内网穿透实现远程访问管理界面

文章目录 前言1.WampServer下载安装2.WampServer启动3.安装cpolar内网穿透3.1 注册账号3.2 下载cpolar客户端3.3 登录cpolar web ui管理界面3.4 创建公网地址 4.固定公网地址访问 前言 Wamp 是一个 Windows系统下的 Apache PHP Mysql 集成安装环境,是一组常用来…

【前端】一文学懂HTML与CSS选择器基础

文章目录 1. 前言与准备工作1.1 前言1.2 准备工作1.2.1 工具选用1.2.2 VSCode下载与配置 2. 基本概念2.1 通过HelloWorld理解HTML基本概念2.1.1 HTML是什么2.1.2 如何理解"超文本"?2.1.3 HTML基础结构2.1.3 学习第一组标签:段落p与标题h1~h6 2.2 CSS基础…

(202402)多智能体MetaGPT入门1:MetaGPT环境配置

文章目录 前言拉取MetaGPT仓库1 仅仅安装最新版2 拉取源码本地安装MetaGPT安装成果全流程展示 尝试简单使用1 本地部署大模型尝试(失败-->成功)2 讯飞星火API调用 前言 感谢datawhale组织开源的多智能体学习内容,飞书文档地址在https://d…

实习日志30

概要 高拍仪硬件通信原理,WebSocket源码解析(JavaScript) WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。 WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据…

DWT硬件延时

DWT硬件延时 文章目录 DWT硬件延时软件&硬件延时方案软件延时硬件延时方案 DWT硬件延时方案DWT硬件延时方案DEMCR寄存器DWT硬件延时方案实现延时初始化:US延时:MS延时: 软件&硬件延时方案 软件延时 static void Delay(uint32_t cou…

Leetcode刷题笔记题解(C++):6. Z 字形变换

思路:遍历时候需要更新步进长度 到达0行的时候步进长度为1;到达最后一行numRows-1行的时候步进长度为-1;代码如下所示: class Solution { public:string convert(string s, int numRows) {//如果字符串长度为1或者所给行数为1 …

vscode更新至1.86版本后,ssh远程连接服务器出现异常

问题 you are connected to an OS version that is unsupported by Visual Studio Code 你已连接到不受Visual Studio Code支持的OS 版本 原因是vscode更新到1.86版本后要求远程连接服务器的内核版本和库版本需要符合下面条件。 解决方法 因此有两种方法解决 1.更新服务器…

开源MBG----renrenGenerator

目录 1.克隆项目到本地 2.编辑数据库连接 3.定义生成的代码模版 4.验证生成结果 5.多说一句 项目简介:人人开源项目的代码生成器,可在线生成entity、xml、dao、service、vue、sql代码,减少70%以上的开发任务。 项目地址:ren…

免费SSL证书申请流程及地址

1,选择证书提供商:有许多机构提供免费的SSL证书,如JoySSL。选择一个可靠的提供商是第一步。 免费SSL证书申请地址https://www.joyssl.com/certificate/select/free.html?nid5 2,验证域名:根据提供商的要求&#xff…