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

🌈 个人主页:十二月的猫-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. 划分基本块的算法

  1. 找基本块的入口:一共有三类入口:①代码段的第一个指令;②条件跳转和无条件跳转的目标语句;③条件跳转语句的下一条语句
  2. 根据划分的入口画流图,一个基本块的区间:从入口开始,至到遇到下一个入口结束

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

 关键点:

  1. 存在and和or还有not
  2. 这几个的优先级和结合性都没有确定

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博客

期待您的关注~~🥰🥰 

猫猫陪你永远在路上💪💪

如果觉得对你有帮助,友友们可以点个赞,收个藏呀~

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

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

相关文章

适用于Synology NAS的在线办公套件:ONLYOFFICE安装指南

使用 Synology NAS 上的 ONLYOFFICE 文档&#xff0c;您能在私有云中直接编辑文本文档、电子表格、演示文稿和 PDF&#xff0c;确保工作流程既安全又高效。本指南将分步介绍如何在 Synology 上安装 ONLYOFFICE 文档。 关于 Synology Synology NAS&#xff08;网络附加存储&…

SpringbBoot如何实现Tomcat集群的会话管理

在使用 Tomcat 集群时&#xff0c;由于每个 Tomcat 实例的 Session 存储是独立的&#xff0c;导致无法实现 Session 的共享&#xff0c;这可能影响到用户跨节点的访问。为了实现跨 Tomcat 实例共享 Session&#xff0c;可以使用 Spring Session 配合 Redis 进行集中式会话管理。…

机器人C++开源库The Robotics Library (RL)使用手册(三)

进入VS工程,我们先看看这些功能函数及其依赖库的分布关系: rl命名空间下,主要有八大模块。 搞定VS后将逐个拆解。 1、编译运行 根据报错提示,配置相应错误的库(根据每个人安装位置不同而不同,我的路径如下:) 编译所有,Release版本耗时大约10分钟。 以rlPlan运动…

零基础微信小程序开发——页面导航之声明式导航(保姆级教程+超详细)

&#x1f3a5; 作者简介&#xff1a; CSDN\阿里云\腾讯云\华为云开发社区优质创作者&#xff0c;专注分享大数据、Python、数据库、人工智能等领域的优质内容 &#x1f338;个人主页&#xff1a; 长风清留杨的博客 &#x1f343;形式准则&#xff1a; 无论成就大小&#xff0c;…

Ch9 形态学图像处理

Ch9 形态学图像处理 blog点此处&#xff01;<--------- 四大算子相应性质。 腐蚀、膨胀、开闭之间的含义、关系 文章目录 Ch9 形态学图像处理预备知识(Preliminaries)膨胀和腐蚀(Dilation and Erosion)腐蚀膨胀膨胀与腐蚀的对偶关系 开闭操作(Opening and Closing)开运算闭…

【UE5 C++课程系列笔记】14——GameInstanceSubsystem与动态多播的简单结合使用

效果 通过在关卡蓝图中触发GameInstanceSubsystem包含的委托&#xff0c;来触发所有绑定到这个委托的事件&#xff0c;从而实现跨蓝图通信。 步骤 1. 新建一个C类 这里命名为“SubsystemAndDelegate” 引入GameInstanceSubsystem.h&#xff0c;让“SubsystemAndDelegate”继承…

实战举例——vue.js组件开发

有很多人在问有关Vue的组件开发&#xff0c;虽然之前我的文章里讲过关于前端组件开发的例子&#xff0c;不过作为一个前端技术小白&#xff0c;还是有很多内容需要学习和巩固。我这里用我之前开发过的组件举例&#xff0c;再次为大家简单分享一下基于Vue2和elementUI开发的组件…

devops和ICCID简介

Devops DevOps&#xff08;Development 和 Operations 的组合&#xff09;是一种软件开发和 IT 运维的哲学&#xff0c;旨在促进开发、技术运营和质量保障&#xff08;QA&#xff09;部门之间的沟通、协作与整合。它强调自动化流程&#xff0c;持续集成&#xff08;CI&#xf…

设计宝藏解压密码

设计宝藏官网的解压密码是多少&#xff1f; 设计宝藏解压密码是&#xff1a;memm 设计宝藏一个致力于提供免费资源的宝藏网站。 无论你是Blender、After Effects (AE)、Cinema 4D (C4D)、Premiere Pro (PR)、Photoshop (PS)、Illustrator (AI)的爱好者&#xff0c;还是对CG影…

Android OpenGLES2.0开发(十):FBO离屏渲染

人生是一场单程的旅行&#xff0c;即使有些遗憾我们也没有从头再来的机会&#xff0c;与其纠结无法改变的过去不如微笑着珍惜未来。 Android OpenGLES开发&#xff1a;EGL环境搭建Android OpenGLES2.0开发&#xff08;一&#xff09;&#xff1a;艰难的开始Android OpenGLES2.0…

Magnet: 基于推送的大规模数据处理Shuffle服务

本文翻译自&#xff1a;《Magnet: Push-based Shuffle Service for Large-scale Data Processing》 摘要 在过去的十年中&#xff0c;Apache Spark 已成为大规模数据处理的流行计算引擎。与其他基于 MapReduce 计算范式的计算引擎一样&#xff0c;随机Shuffle操作&#xff08;即…

Pytorch | 利用VA-I-FGSM针对CIFAR10上的ResNet分类器进行对抗攻击

Pytorch | 利用VA-I-FGSM针对CIFAR10上的ResNet分类器进行对抗攻击 CIFAR数据集VA-I-FGSM介绍相关定义算法流程 VAI-FGSM代码实现VAI-FGSM算法实现攻击效果 代码汇总vaifgsm.pytrain.pyadvtest.py 之前已经针对CIFAR10训练了多种分类器&#xff1a; Pytorch | 从零构建AlexNet对…

WebPack3项目升级webpack5的配置调试记录

文章目录 前言一、webpack3环境1.1、知识点记录1.1.1、配置解释1.1.2、webpack与sass版本对应关系1.1.3、CommonJS与ESModule1.1.4、node版本管理nvm1.1.5、sass-loader、sass与node-sass 1.2、其他1.2.1、.d.ts是什么文件1.2.2、react与types/react版本对应关系1.2.3、webpack…

MySQL 数据”丢失”事件之 binlog 解析应用

事件背景 客户反馈在晚间数据跑批后,查询相关表的数据时,发现该表的部分数据在数据库中不存在 从应用跑批的日志来看,跑批未报错,且可查到日志中明确显示当时那批数据已插入到数据库中 需要帮忙分析这批数据丢失的原因。 备注:考虑信息敏感性,以下分析场景测试环境模拟,相关数据…

微信小程序的轮播图学习报告

微信小程序轮播图学习报告 好久都没分享新内容了&#xff0c;实在惭愧惭愧。今天给大家做一个小程序轮播图的学习报告。 先给大家看一下我的项目状态&#xff1a; 很空昂&#xff01;像一个正在修行的老道&#xff0c;空的什么也没有。 但是我写了 4 个 view 容器&#xff0c;…

【RAII | 设计模式】C++智能指针,内存管理与设计模式

前言 nav2系列教材&#xff0c;yolov11部署,系统迁移教程我会放到年后一起更新&#xff0c;最近年末手头事情多&#xff0c;还请大家多多谅解。 上一节我们讲述了C移动语义相关的知识&#xff0c;本期我们来看看C中常用的几种智能指针&#xff0c;并看看他们在设计模式中的运…

微软 CEO 萨提亚・纳德拉:回顾过去十年,展望 AI 时代的战略布局

近日&#xff0c;微软 CEO 萨提亚・纳德拉与著名投资人比尔・格里和布拉德・格斯特纳进行了一场深度对话&#xff0c;回顾了过去十年微软的转型历程&#xff0c;并展望了 AI 时代的战略布局。在这次访谈中&#xff0c;纳德拉分享了他在微软的早期经历&#xff0c;包括他加入微软…

【Java-tesseract】OCR图片文本识别

文章目录 一、需求二、概述三、部署安装四、技术细节五、总结 一、需求 场景需求:是对识别常见的PNG,JPEG,TIFF,GIF图片识别&#xff0c;环境为离线内网。组件要求开源免费&#xff0c;并且可以集成Java生成接口服务。 二、概述 我不做选型对比了,我筛选测试了下Tesseract(v…

iOS开发代码块-OC版

iOS开发代码块-OC版 资源分享资源使用详情Xcode自带代码块自定义代码块 资源分享 自提&#xff1a; 通过网盘分享的文件&#xff1a;CodeSnippets 2.zip 链接: https://pan.baidu.com/s/1Yh8q9PbyeNpuYpasG4IiVg?pwddn1i 提取码: dn1i Xcode中的代码片段默认放在下面的目录中…

如何借助边缘智能网关实现厂区粉尘智能监测告警

在诸如木制品加工、纺织品加工、塑料橡胶制品加工等多种工业生产场景中&#xff0c;粉尘问题的隐患和风险不可小觑。如果缺少对生产环境中粉尘的监测和管理&#xff0c;可能发生易燃易爆、环境污染和工人尘肺等生产事故。 针对工业场景中的粉尘状况监测、管理及预警&#xff0c…