【编译原理】往年题汇总(山东大学软件学院用)

🌈 个人主页:十二月的猫-CSDN博客
🔥 系列专栏: 🏀编译原理_十二月的猫的博客-CSDN博客💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光
目录
1. 前言
2. 22-23年 编译原理
2.1.编译原理的程序框图
2.2.有穷自动机?DFA和NFA的区别?
2.3.推导和归约的概念
2.4.SDD,简述S-SDD和L-SDD
2.5. 划分基本块的算法
2.6. 正规式→DFA LL(1) LR(0) SLR(1) LR(1) LALR(1)
2.7. 简述语法制导翻译的思想
2.8. 简述四个优化代码的算法
3. 21-22年 编译原理
3.1 判断一个文法是不是二义文法
3.2 给一个句型,找它的句柄
3.3 消除左递归(看一下后面的例子)
3.4 正规式转化为DFA
4. 20-21年 编译原理
4.1 综合属性继承属性概念
4.2 用语法制导翻译思想,把语句翻译成三地址码序列。while a < b do if c > d then x = y * z
5. 19-20年 编译原理
5.1 编译的前端,后端,什么是一遍扫描
5.2 在语法制导翻译中,空返产生式的作用(M->ε)
6. 总结
1. 前言
为什么打算开始这一系列的文章——编译原理🎄🎄
其实本学期开始就一直想持续更新,陆陆续续主要更新了实验部分。
正好趁着快要考试,便和大家一起花费几天的时间回顾编译原理的知识点。
目前,十二月猫的回顾计划如下🔞🔞:

祝大家都能取得好成绩呀~~🥰🥰
参考书籍:
英文名:Compilers: Principles,Techniques,and Tools (龙书)🦖
作者:Alfred V.Aho,Ravi Sethi,Jeffrey D.Ullman
1.本课程介绍编译器构造的一般原理和基本实现方法,主要介绍编译器的各个阶段:词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成。
2.本课程在介绍命令式程序设计语言实现技术的同时,强调一些相关的理论知识,如形式语言和自动机理论、语法制导的定义和属性文法、类型论等。
3.本课程强调形式化描述技术,并以语法制导定义作为翻译的主要描述工具。
4.本课程强调对编译原理和技术在宏观上的理解,而不把读者的注意力分散到一些枝节的算法上,如计算开始符号集合和后继符号集合的算法,回填技术等。作为原理性的教材,本书介绍基本的理论和方法,而不偏向于某种源语言或目标机器。
2. 22-23年 编译原理
2.1.编译原理的程序框图

- 词法分析器:输入源程序,进行词法分析,输出单词符号;(扫描字符流,滤掉空白符、换行符、制表符、注释等,分离出词素,输出词法单元序列
-
语法分析器:根据文法构建分析表,对单词符号进行语法分析,检查程序是否符合语法规则;
-
语义分析与中间代码生成器:按照文法翻译规则对语法分析器归约出的语法单位进行语义分析,并把它们翻译成一定形式的中间代码;
-
优化器:对中间代码进行优化处理;
-
目标代码生成器:把中间代码翻译成目标代码。
2.2.有穷自动机?DFA和NFA的区别?
用于语法分析中转载在扫描仪中的程序算法,是语法分析的一种方式,与手工编写的语法分析不同。有穷自动机的语法分析更加通用,是自动生成语法分析器的一种方式。分为两类,非确定有限自动机和确定有限自动机。对于每个可以用正则表达式描述的语言,均可用某个NFA或DFA来识别。
- NFA:对边上的标号没有限制,一个符号可以作为标号出现在离开同一个状态的多条边上,ϵ可以做标号
- DFA:对于每个状态以及每个标号,有且只有一条边
2.3.推导和归约的概念
推导:将非终结符替换为它的某个产生式的体。分为直接推导、间接推导、最左推导、最右推导
- 最左推导:任何一步α => β都是对α中的最左非终结符进行替换
- 左右推导:任何一步α => β都是对α中的最右非终结符进行替换
归约:归约是推导的逆过程。分为直接、间接、最左、最右归约。![]()
2.4.SDD,简述S-SDD和L-SDD
- SDD:即语法制导定义,将每个产生式和一组语义规则相关联,这些规则用于计算该产生式中各文法符号的属性值。
- S-SDD:每个属性都是综合属性,都是根据子构造的属性计算出父构造的属性。
- L-SDD:每个属性是综合属性,或是继承属性,且A→X1 X2 … Xn 中计算Xi.a的规则只用到A的继承属性,或Xi左边的文法符号Xj的继承属性或综合属性,或Xi自身的继承或综合属性。
这个地方的记忆可以使用 树的深度优先遍历
2.5. 划分基本块的算法
- 找基本块的入口:一共有三类入口:①代码段的第一个指令;②条件跳转和无条件跳转的目标语句;③条件跳转语句的下一条语句;
- 根据划分的入口画流图,一个基本块的区间:从入口开始,至到遇到下一个入口结束;
2.6. 正规式→DFA LL(1) LR(0) SLR(1) LR(1) LALR(1)
见另外三篇文章:
【编译原理】编译原理知识点汇总·词法分析器(正则式到NFA、NFA到DFA、DFA最小化)-CSDN博客
【编译原理】一篇搞定LR分析法(LR(1)、LR(0)、SLR、LALR)-CSDN博客
【编译原理】编译原理知识点汇总·语法分析器(消除左递归、消除二义性、自顶向下语法分析、自下向上语法分析)-CSDN博客
2.7. 简述语法制导翻译的思想
从概念上讲,基于属性文法的处理过程如下:对单词符号串进行语法分析,构造语法分析树,然后根据需要遍历语法树并在语法树的各节点处按照语义规则进行计算。这种有源程序的语法结构驱动的处理办法就是语法制导翻译法。
2.8. 简述四个优化代码的算法
(1)删除公共子表达式
如果表达式 x op y 先前已被计算过,并且从先前的计算到现在,x op y 中变量的值没有改变,称为公共子表达式。可以将其删除。
(2)删除无用代码
无用代码,其计算结果永远不会被使用的语句。例如重复对多个变量赋相同的值。
(3)常量合并
如果在编译时刻推导出一个表达式的值是常量,就可以使用该常量来替代这个表达式。替换后,节省一次内存访问。
(4)代码移动
对于那些不管循环执行多少次都得到相同结果的表达式,在进入循环之前就对它们求值。
(5)强度削弱
用较快的操作代替较慢的操作。
3. 21-22年 编译原理
3.1 判断一个文法是不是二义文法
给定一个文法G,如果这个文法G的一些句子中存在不止一棵分析树,或者这些句子存在不止一种最左(最右推导), 我们就称该文法为二义性的,G也叫二义性文法。
注意:文法二义并不代表语言一定是二义的,只有当产生一个语言的所有文法都是二义时,这个语言才成为二义的。

3.2 给一个句型,找它的句柄
句柄,也是归约项,是指在进行归约操作时,被替换的右侧产生式的符号串。
【编译原理】一篇搞定短语、直接短语、句柄-CSDN博客
3.3 消除左递归(看一下后面的例子)
具体方法有:消除直接左递归、消除间接左递归
【编译原理】一篇搞定语法分析器对文法的要求(上下文无法文法、消除二义性文法、消除左递归)-CSDN博客
3.4 正规式转化为DFA
【编译原理】一篇搞定正规式到NFA、NFA到DFA、DFA最小化_正规式转化为nfa-CSDN博客
4. 20-21年 编译原理
4.1 综合属性继承属性概念
- 综合属性:假设分析树结点N对应非终结符A,只能通过N的子结点或N本身的属性值来定义的属性称为A的综合属性。终结符综合属性由语法分析器提供。
- 继承属性:假设解析树结点N对应非终结符A,只能通过N的父结点的继承属性、N的兄弟结点或N本身的继承属性和综合属性来定义的属性称为A的继承属性。终结符没有继承属性。
4.2 用语法制导翻译思想,把语句翻译成三地址码序列。while a < b do if c > d then x = y * z
5. 19-20年 编译原理
5.1 编译的前端,后端,什么是一遍扫描
前端:前端对源语言进行分析,并产生中间表示,处理与源语言相关的细节,与目标机器无关。
后端:后端对中间表示进行分析、优化,并产生新的中间表示;处理与目标机器相关的细节,生成目标机器代码。
记忆:输入输出+处理内容(和什么无关和什么有关)
一遍扫描:对源程序扫描一次被称为一遍扫描
5.2 在语法制导翻译中,空返产生式的作用(M->ε)
在语法制导翻译中,空返产生式(Epsilon production)的作用是允许语法分析树在不生成任何输出的情况下,从一个非终结符移动到另一个非终结符。这对于模拟语法的省略部分(如可选的子句)很有用。因此,空返产生式允许更灵活的语法分析,并且可以使语法分析过程更加简化。
6. 17-18年 编译原理
6.1 描述LR语法分析算法
LR语法分析法是编译原理中的一种语法分析方法,其全称为“自左至右扫描和自底向上规约”,是一种自底向上的分析方法。这种方法对文法的限制最少,适用于大部分的上下文无关文法。LR分析法的基本思想是在归约的过程中,一方面记住移入和归约的整个符号串,另一方面通过产生式推测未来可能的输入符号。
6.2 举例说明文法二义性
记住常见的例子:
S - >S and S | S or S | not S | p | q | (S)
句子:not p and q
关键点:
- 存在and和or还有not
- 这几个的优先级和结合性都没有确定
6.3 符号表作用
- 收集符号属性
- 上下文语义的合法性检查的依据
- 作为目标代码生成阶段地址分配的依据
记录符号本身特性
辅助分配空间
语义检查
6.4 解释LL(1)文法
一个文法满足下面条件:
(1)文法不含左递归
(2)对于文法中每一个非终结符A的各个产生式的候选首符集不相交
(3)对于于文法中每一个非终结符A,若它存在的某个候选首符集包含ε,那么first(A)∩follow(A)=空
6.5 写出语言L的上下文无关文法

6.6 正规式的概念
正则表达式是一种用来描述正则语言的更紧凑的表示方法。
6.7 语言和文法的概念
语言:语言 (language) 是某个给定字母表上的串的可数集合
文法:文法(Grammar)是一种形式化的表达式,用于描述一种语言的语法规则。文法由一组产生式组成,每个产生式定义了一种语法结构及其对应的生成方式。
一般包括四个部分:终结符、非终结符、产生式、开始符
6.8 现有一个词法分析方法GetToken(),和ACTION和GOTO的LR(0)预测分析表,请用伪代码完成自底向上的语法分析

6.9 代码优化目的是什么
提高程序的性能;减小程序的体积;提高程序的可维护性和可读性;降低程序的错误率.
6.10 DAG做目标代码生成
设DAG有N个内部节点,线性表T[N] 记录计算顺序,初始为空值。
- 最后T[1],T[2], …,T[N] 即为节点计算顺序

6.10 简述算符优先文法原理
7. 总结
本文到这里就结束啦~~
本系列专栏将专注于【编译原理】知识。
内容包括:知识点讲解、习题练习、重点知识带练等~~目前已完成:
【编译原理】编译原理知识点汇总·概论与文法-CSDN博客
【编译原理】编译原理知识点汇总·词法分析器(正则式到NFA、NFA到DFA、DFA最小化)-CSDN博客
【编译原理】编译原理知识点汇总·语法分析器(消除左递归、消除二义性、自顶向下语法分析、自下向上语法分析)-CSDN博客
【编译原理】编译原理知识点汇总·属性文法和语法制导翻译-CSDN博客
【编译原理】编译原理知识点汇总·中间代码(中间代码+翻译)-CSDN博客
【编译原理】编译原理知识点汇总·代码优化-CSDN博客
【编译原理】词法分析器设计(山东大学实验一)_山东大学编译原理实验-CSDN博客
【编译原理】语法、语义分析器设计(山东大学实验二)_语法分析实验-实现一个简单语法分析器(自上而下方法)实验小结-CSDN博客
【编译原理】代码生成器的构建与测试(山东大学实验三)_编译原理实验语义分析代码-CSDN博客 【编译原理】一篇搞定正规式到NFA、NFA到DFA、DFA最小化-CSDN博客
【编译原理】一篇搞定语法分析器对文法的要求(上下文无法文法、消除二义性文法、消除左递归)-CSDN博客
【编译原理】一篇搞定LR分析法(LR(1)、LR(0)、SLR、LALR)-CSDN博客
【编译原理】一篇搞定注释分析树-CSDN博客
【编译原理】一篇搞定短语、直接短语、句柄-CSDN博客
期待您的关注~~🥰🥰
猫猫陪你永远在路上💪💪
如果觉得对你有帮助,友友们可以点个赞,收个藏呀~

相关文章:
【编译原理】往年题汇总(山东大学软件学院用)
🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀编译原理_十二月的猫的博客-CSDN博客 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前言 2. …...
【漏洞复现】F5 BIG-IP Next Central Manager SQL注入漏洞(CVE-2024-26026)
免责声明 请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任。工具来自网络,安全性自测,如有侵权请联系删除。本次测试仅供学习使用,如若非法他用,与平台和本文作…...
设计模式-创建型-单例模式
1. 单例模式简介 单例模式(Singleton Pattern)是一种常见的创建型设计模式,它确保一个类只有一个实例,并提供全局访问点。在很多情况下,我们只希望某个类在整个应用程序中有一个唯一的实例,且该实例需要在…...
VBA技术资料MF243:利用第三方软件复制PDF数据到EXCEL
我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套,分为初级、中级、高级三大部分,教程是对VBA的系统讲解&#…...
【2024最新】基于Python+Mysql+django的水果销售系统Lw+PPT
作者:计算机搬砖家 开发技术:SpringBoot、php、Python、小程序、SSM、Vue、MySQL、JSP、ElementUI等,“文末源码”。 专栏推荐:SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:Java精选实战项…...
一种寻路的应用
应用背景 利用长途车进行货物转运的寻路计算。例如从深圳到大连。可以走有很多条长途车的路线。需要根据需求计算出最合适路线。不同的路线的总里程数、总价、需要的时间不一样。客户根据需求进行选择。主要有一些细节: 全国的长途车车站的数据的更新: …...
编译openssl遇到错误Parse errors: No plan found in TAP output的解决方法
在编译openssl时 tar -zxvf openssl-1.1.1p.tar.gz cd openssl-1.1.1p ./config --prefix/usr --openssldir/etc/ssl --shared zlib make make test 遇到错误 Parse errors: No plan found in TAP output 解决方法: yum install perl-Test-Simple...
一文大白话讲清楚防抖和节流,设计封装防抖和节流,以及防抖和节流的应用场景
文章目录 一文大白话讲清楚防抖和节流,设计封装防抖和节流,以及防抖和节流的应用场景1. 防抖和节流的背景2. 节流3. 节流的应用场景4. 防抖5. 防抖应用场景 一文大白话讲清楚防抖和节流,设计封装防抖和节流,以及防抖和节流的应用场…...
Windows开启IIS后依然出现http error 503.the service is unavailable
问题背景 已启用IIS服务,配置步骤可以参考Windows10 IIS Web服务器安装配置 问题描述 在这一步浏览网站时,并没有出现默认首页,而是 http error 503 the service is unavailable 问题解决 参考 成功解决http error 503.the service is un…...
C++的封装(十四):《设计模式》这本书
很多C学习者学到对C语言有一定自信后,会去读一下《设计模式》这本书。希望能够提升自己的设计水平。 据我所知,围绕C语言出了很多书。因为正好赶上泡沫经济时代。大家一拥而上,自己半懂不懂就出书,抢着出书收割读者,出…...
牛客周赛73B:JAVA
链接:登录—专业IT笔试面试备考平台_牛客网 来源:牛客网 题目描述 \hspace{15pt}小红拿到了正整数 xxx ,她希望你找到一个长度为 kkk 的区间,满足区间内恰好有 nnn 个数是 xxx 的倍数。你能帮帮她吗? 输入描述: …...
【Ubuntu 20.4安装截图软件 flameshot 】
步骤一: 安装命令: sudo apt-get install flameshot 步骤二: 设置快捷方式: Ubuntu20.4 设置菜单,点击 号 步骤三: 输入软件名称, 软件快捷命令(flameshot gui)&am…...
剑指Offer|LCR 014. 字符串的排列
LCR 014. 字符串的排列 给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的某个变位词。 换句话说,第一个字符串的排列之一是第二个字符串的 子串 。 示例 1: 输入: s1 "ab" s2 "eidbaooo" 输出: True 解…...
【Agent】Chatbot、Copilot与Agent如何帮助我们的提升效率?
人工智能(AI)技术的迅猛发展正在深刻改变我们的生活和工作方式。你是否曾想过,未来的工作场景会是什么样子?AI的崛起不仅仅是科技的进步,更是我们生活方式的革命。今天,我们将深入探讨三种主要的AI能力&…...
QT笔记- QTreeView + QFileSystemModel 当前位置的保存与恢复 #选中 #保存当前索引
保存当前位置 QString currentPath model->filePath(view->currentIndex()); // 获得当前位置路径 恢复位置 view->setCurrentIndex(model->index(currentPath)); // 设置此路径所在位置为当前位置...
OpenResty开发环境搭建
简介 OpenResty 是一个基于 Nginx的高性能 Web 平台,用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。官方地址:http://openresty.org/cn/ 具备下列特点: 具备Nginx的完整功能基于Lua语言进行扩展&#…...
linux提示结构需要清理
1. df -hT 查看出问题的文件夹所在的挂载磁盘及文件格式 2. umount 挂载磁盘,如果提示在忙, lsof 目录查看正在使用的进程,将其kill掉 3. 修复磁盘 根据文件格式修复磁盘fsck.ext4 /dev/sda1 或者 xfs_repair /dev/sda1 4. 重启系统 “结构需要清理…...
【扩展卡尔曼滤波理论推导与实践】【理论】【2/3 公式推导】
目录 非线性系统泰勒展开卡尔曼滤波卡尔曼增益模型误差协方差矩阵 公式总结 本节默认你能够完整推导标准卡尔曼滤波,将会简化一些推导的描述。如果你还不会完整推导标准卡尔曼滤波,请先从 【卡尔曼滤波理论推导与实践】系列开始看起。 非线性系统 扩展…...
springboot494基于java的综合小区管理系统(论文+源码)_kaic
摘 要 如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统综合小区管理系统信息管理难度大,容错率低&am…...
深度学习blog-Transformer-注意力机制和编码器解码器
注意力机制:当我们看一个图像或者听一段音频时,会根据自己的需求,集中注意力在关键元素上,以获取相关信息。 同样地,注意力机制中的模型也会根据输入的不同部分,给它们不同的权重,并集中注意力在…...
Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...
跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...
OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...
