编译原理-2022期末考试解析

【前言】

这是2022年的期末考试卷,题目还是比较正的,涵盖了词法分析,语法分析,语法制导翻译,优化。从这一年开始,优化的部分分值开始提高(这是最后学的部分)。

一、词法分析(15 分)

(1) 为下列正则表达式构造一个NFA。
( aa | b )* ( a | cc )* 
(2) 将下图中的 NFA 转换为相应的正则表达式。
(3) 将下图中的 NFA 转换为 DFA。

作答如下:

(1)

(2)

( aa | v )* ( a | bb )* 

(3)

使用子集构造法

最后获得DFA

二、语法分析(25 分)

考虑下列文法 G:
A → ( S ) | ( B ]
B S | ( B
S → ( S ) | ϵ
A, B, S 为非终结符,A 为开始符号,(、)、]是终结符。
(1) 给出 4 个文法 G 的语句, 尽可能多的用到不同的产生式, 并分别加以说明。
(2) 构建 A, B, S 的 FIRST 集和 FOLLOW 集, 𝜖 参与使用(无需解释, 只给出结果即可)。
(3) 画出文法 G 的 LR(0)有限自动机(LR(0)-DFA)。
(4) 从 0 开始依次命名每个状态,考虑所有的状态并且简述哪些状态有着至少一个 LR(0)冲突? 其中的哪些状态同时也有 SLR(1)冲突? 文法 G 是 SLR(1)文法吗?
(5) 构造文法 G 的 SLR(1)分析表。若文法 G 非 SLR(1),标出表中的冲突项。

我的作答:

三、语法制导翻译(15 分)

考虑以下语法制导定义 SDD,

 为该 SDD 写出一个翻译模式。

我的作答:

四、优化(45 分)

考虑下面这个三地址码程序:

1 a := input
2 b := input
3 t1 := a + b
4 t2 := a * 2
5 c := t1 + t2
6 if a < c goto 8
7 t2 := a + b
8 b := 25
9 c := b + c
10 d := a - b
11 if t2 = 0 goto 17
12 d := a + b
13 t1 := b - c
14 c := d – t1
15 if c < d goto 3
16 c := a + b
17 output c
18 output d

(1)指出每个基本块从哪一行开始,并给出每一个基本块的第一条指令的行号。
(2)用 B 1 ,B 2 ,…来依次命名每个基本块,并用这样的表示画出这些基本块的控制流图。
(3)检查是否有可以进行的优化手段, 写出优化后的代码。
(4)对每个基本块做出活性分析。
(5)根据活性分析实现一个最优化的寄存器分配方案。

 

 作答如下

另外,根据第5题分配寄存器的意思,这道题我感觉是需要进行逐句分析的。(不同班组教的不一样,我们老师教的按块分析,另一个班组的老师教的逐句分析,这里按照实际情况我觉得逐句分析会更好一些),下面我写出了逐句分析的,红字是迭代一次之后变更的。

关于本题,我是把第(3)问当作独立的来做的,也就是说,我后面的活性分析,并没有在优化的基础上进行,还是用的原来的图和代码。但是对于这个有不同的理解,我的学霸同学(@段神)按照优化之后的来做的,并且是逐句分析,在这里,也可以参考:

 另一位同学(@郑神)使用按块分析做的,也放在这里,供参考。

感觉主要是考察一个对于活性分析的方法,这道题没有太明确具体的做法。但是方法要掌握。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数学经典教材有什么?

有本书叫做《自然哲学的数学原理》&#xff0c;是牛顿写的&#xff0c;读完之后你就会感叹牛顿的厉害之处! 原文完整版PDF&#xff1a;https://pan.quark.cn/s/5d5eac2e56af 那玩意真的是人写出来的么… 现代教材把牛顿力学简化成三定律&#xff0c;当然觉得很简单。只有读了原…

GNSS最终、快速、超快速星历下载地址汇总

GNSS最终、快速、超快速星历下载地址汇总 igs综合产品 ftp://cddis.gsfc.nasa.gov/pub/gps/products GPS单系统 igs 最终产品 igr 快速产品&#xff08;rapid&#xff09; igu 超快速产品&#xff08;Ultra Rapid&#xff09; ftp://cddis.gsfc.nasa.gov/pub/glonass/produc…

从学习投研流程的角度学习Qlib

许多同学只是把Qlib当做一个简单的工具来学习。其实Qlib隐含了一套正规的投研流程&#xff0c;从投研流程的视角去学习Qlib,则不仅能加深对Qlib的理解&#xff0c;而且能够掌握正确的投研流程&#xff0c;哪怕以后不使用Qlib而是使用其他系统了&#xff0c;这套流程还是适用的。…

React之自定义路由组件

开篇 react router功能很强大&#xff0c;可以根据路径配置对应容器组件。做到组件的局部刷新&#xff0c;接下来我会基于react实现一个简单的路由组件。 代码 自定义路由组件 import {useEffect, useState} from "react"; import React from react // 路由配置 e…

基于Springboot的课程答疑系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的课程答疑系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&…

(25)Linux IPC 进程间通信系统调用:pipe接口

一、进程间通信&#xff08;IPC&#xff09; 1、为什么要进程间通信&#xff1f; 我们在之前讲过 "进程之间是具有独立性" 的&#xff0c;如果进程间想交互数据&#xff0c;成本会非常高&#xff01; 因为独立性之本质即 "封闭"&#xff0c;进程们你封闭…

极客时间-读多写少型缓存设计

背景 内容是极客时间-徐长龙老师的高并发系统实战课的个人学习笔记&#xff0c;欢迎大家学习&#xff01;https://time.geekbang.org/column/article/596644 总览内容如下&#xff1a; 缓存性价比 一般来说&#xff0c;只有热点数据放到缓存才更有价值 数据量查询频率命中…

2000-2021年全国各省环境相关指标数据(890+指标)

2000-2021年全国各省环境相关指标数据&#xff08;890指标&#xff09; 1、指标时间&#xff1a;2000-2021年 2、范围&#xff1a;31省市 3、来源&#xff1a;2001-2022年环境统计年鉴 4、指标&#xff1a;工业废水排放总量、工业废水排放达标量、工业废水处理量、化学需氧…

golang 生成一年的周数

// GetWeekTimeCycleForGBT74082005 获取星期周期 中华人民共和国国家标准 GB/T 7408-2005 // 参数 year 年份 GB/T 7408-2005 func GetWeekTimeCycleForGBT74082005(year int) (*[]TimeCycle, error) {var yearstart time.Time //当年最开始一天var yearend time.Time //当年…

Python知识点(史上最全)

Python期末考试知识点&#xff08;史上最全&#xff09; python简介 Python是一种解释型语言 Python使用缩进对齐组织代码执行&#xff0c;所以没有缩进的代码&#xff0c;都会在载入时自动执行 数据类型&#xff1a;整形 int 无限大 浮点型 float…

Javaweb之SpringBootWeb案例开发规范的详细解析

1.2 开发规范 了解完需求也完成了环境搭建了&#xff0c;我们下面开始学习开发的一些规范。 开发规范我们主要从以下几方面介绍&#xff1a; 1、开发规范-REST 我们的案例是基于当前最为主流的前后端分离模式进行开发。 在前后端分离的开发模式中&#xff0c;前后端开发人员…

Vue3 父事件覆盖子事件,Vue2 的 v-on=“$listeners“ 的替代方案

在 Vue3 中&#xff0c;$listeners 被删除 子组件代码&#xff0c;需要特别注意的是事件名为 on 开头&#xff0c;例如 onBack。不确定的可以通过给父组件传递 事件或属性&#xff0c;再打印子组件的 attrs useAttrs()&#xff0c;来确定传值 // template v-bind"newA…

Netty-Netty组件了解

EventLoop 和 EventLoopGroup 回想一下我们在 NIO 中是如何处理我们关心的事件的&#xff1f;在一个 while 循环中 select 出事 件&#xff0c;然后依次处理每种事件。我们可以把它称为事件循环&#xff0c;这就是 EventLoop 。 interface io.netty.channel. EventLoo…

【自学笔记】01Java基础-08Java常用API:04包装类

记录Java基础-常用API-有关时间日期的类。 1 包装类 其实就是8种基本数据类型对应的引用类型&#xff0c;因为基本数据类型不能直接参与面向对象编程。具有将基本数据类型转换为对象的功能&#xff0c;并且实现了多种接口&#xff0c;支持集合框架和泛型。 包装类的主要特点和…

记录汇川:H5U与Fctory IO测试8

主程序&#xff1a; 子程序&#xff1a; IO映射 子程序&#xff1a; 出料程序 子程序&#xff1a; 重量程序 子程序&#xff1a; 自动程序 Fctory IO配置&#xff1a; HMI配置 实际动作如下&#xff1a; Fctory IO测试8

【一】创建Python TK GUI窗口,并简单设置窗口

文章目录 背景系统环境开始一个简单GUI启动一个GUI窗口&#xff08;不完成功能&#xff09;简单配置GUI窗口&#xff08;大小、位置、图标&#xff09; 运行示例 背景 这是一个系列文章。下一篇【【二】为Python Tk GUI窗口添加一些组件和绑定一些组件事件】 使用pyth…

AIGC大模型必备知识——LLM ,你知道它是如何训练的吗?小白必读深度好文

Look&#xff01;&#x1f440;我们的大模型商业化落地产品&#x1f4d6;更多AI资讯请&#x1f449;&#x1f3fe;关注Free三天集训营助教在线为您火热答疑&#x1f469;&#x1f3fc;‍&#x1f3eb; 近年来&#xff0c;人工智能&#xff08;AI&#xff09;领域经历了令人瞩目…

FineBI实战项目一(17):热门商品Top10分析开发

点击新建组件&#xff0c;创建热门商品Top10组件。 选择柱状图&#xff0c;拖拽cnt&#xff08;总数&#xff09;到横轴&#xff0c;拖拽goodName到纵轴。 选择排序规则。 修改横轴和纵轴的标签名称 切换到仪表板&#xff0c;拖拽组件到仪表板 效果如下&#xff1a;

今天去面一个点工,HR要我会数据库,Linux还有Python,这合理吗

软件测试出路在哪&#xff1f; 业务编程&#xff01;&#xff01; 1、软件测试的变化趋势 变化趋势1&#xff1a; 功能测试是核心&#xff0c;但是价值降低 目前测试这个行业&#xff0c;还是有大量的点工。但是行业的进步&#xff0c;技术的创新&#xff0c;导致了企业的需求…

mapper向mapper.xml传参中文时的乱码问题

1.起因&#xff1a; 在idea中进行模糊查询传参时&#xff0c;发现在idea中查中文查不出记录&#xff0c;在navicate中可以查出来。 2.猜测&#xff1a; 1.idea中的编码问题导致的乱码。 2.idea和navicate的编码一致性导致的乱码。 3.mapper向mapper.xml传参后出现乱码。 3.解…