
编译原理
文章平均质量分 92
DWQY
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
优化
在前面的绪论中简单介绍过优化,先解释下优化有什么必要性。在前面一部分中间代码生成中,会生成大量的中间变量,缺点是占据大量的存储空间和计算资源。并且编写代码的人有可能在编写代码的过程中不合理的安排结构。在为了在更短的时间内完成编译,需要优化技术的参与。 本文对于优化技术的介绍主要围绕例子来进行,并未每个例子附带文字说明。 在介绍优化方法之前,先介绍和优化相关的一些概念: 优化的分类: 优化的三个原则: 优化常用的技术名称: 下面先介绍一些简单的优化技术: 1.常数合并:主原创 2020-12-27 21:57:02 · 698 阅读 · 1 评论 -
运行时存储空间组织
对于存储空间这章不是课程的重点,老师讲授的内容比较少。不过还是做一点儿整理,供以后复习参考使用。 学习本章的重点在于了解不同情况下的内存分配策略,大致分为三种:静态分配、动态栈式分配、动态堆式分配。对于栈式只介绍一些很简单的,对于堆式没有介绍。其实这样也没有什么考点,权当扩充知识,了解在编译过程中内存的变化情况。 学习存储分配,有几个基本的概念是要了解的(不一定要背下来,至少说出来要知道是啥吧~): 这里面提到一个概念叫生存期,之前学高级语言的时候都讲变量都有作用域。那这两个有什么区别呢?原创 2020-12-27 21:47:29 · 643 阅读 · 0 评论 -
语法分析与中间代码生成
这章和上一章(属性文法和语法制导翻译)是紧密联系的,共同完成了编译过程的第三步——语义分析与中间代码产生。 开篇先解释两个问题: 1. 什么是语义分析?它和之前几部分有什么不同呢? 2. 什么是中间代码?为什么需要产生中间代码? 问题一:什么是语义分析?它和之前几部分有什么不同呢? 词法分析主要完成的是标识符/算符等等定义是否符合规定。语法分析是看程序的结构是否符合文法的要求,也就是下一部分接这个对不对?语义分析就上升到概念层了,我以C语言举个例子:使用一个变量之前必须对这个原创 2020-12-27 21:28:19 · 3580 阅读 · 0 评论 -
属性文法和语法制导翻译
截至到上一章,说完了语法分析的全部内容。从第一章的结构图可以了解到,紧接着语法分析的是语义分析与中间代码的生成。书中用了两章讲述该内容(属性文法和语法制导翻译、语义分析和中间代码生成)。本节描述的主要是进行语法分析与中间代码的生成的一些储备知识。 先聊聊语法分析和本章的关系:在第一章的时候,我们讲述了“遍”的概念。之前只是简单的说了可将语法分析与中间代码生成放到一遍中完成,这章的内容就会解释到其原因。也可分为自上而下和自下而上两种类型。会在后续的内容里慢慢体现。 回到本章来,希望通过看完这篇文章原创 2020-12-02 23:58:26 · 3477 阅读 · 0 评论 -
语法分析——自下而上
这一章作为上一章的姐妹篇,本以为会有很大的关联。但整体下来后发现还是比较独立的,属于两种方法,用不同的思想实现同一个作用。 还是要吐槽一下~我感觉这章的内容比较多,乍一听一大堆一大堆的。但梳理过后,都是一块一块的内容。下面就开始吧! 在正式开始之前,我先梳理下内容的主线。第一瞬间不太了解也是正常的,希望读完本篇文章后能够明白。 主线:自下而上的主要思想是移进-规约。移进-规约的关键在于如何选择合适的规约字符串以及规约到哪个非终结符。算符优先分析法告诉了你什么时候进行规约,LR分析法告诉了你具原创 2020-10-27 00:36:17 · 1554 阅读 · 0 评论 -
语法分析——自上而下
衔接上一章的词法分析,这章就到了语法分析。语法分析大体上分了两种:自上而下和自下而上。这章的主要内容是前者,下一章会对后者进行介绍。其实学到了这里应该清楚语法分析和词法分析的关系了。在实际编译的过程中并不是先进行一遍词法分析,再来一遍语法分析。两者其实是并行的。从缓冲区中读入一定字符串,经过词法分析合格后进行语法的审核。符合语法规则通过,不符合就报错。这样周而复始直至结束。 语法分析要联系到第二章的内容了,还记得什么是文法吗?就是那个使用四元式表示(不过四元式在本章中没什么地位),表示语法规则的文法原创 2020-09-30 00:44:40 · 4366 阅读 · 0 评论 -
词法分析
开篇按规矩先说点没用的,词法分析不愧为编译过程的第一步啊。上来就给了一个下马威,上课的时候听得懵懵的,只有课后慢慢消化。不过它有一个我喜欢的特点:特别有条理,从头连到尾。 我列举下本章的关键词:词法分析器、状态转换图、正规式、正规集、确定有限自动机、非确定有限自动机。 希望这篇文章能够成功的梳理清楚各部分的关系。希望这篇文章能讲清楚这么几个问题: 1. 词法分析器的结构 2. 状态转换图在后面各个阶段的体现 3. 正规式和有限自动机之间的关系 4. 确定有限自动机和非确定原创 2020-09-27 20:57:37 · 2486 阅读 · 0 评论 -
高级语言及其语法描述
先扯点没用的:这是本书的第二章,给我的第一个感觉就是乱,抓不到内容的主线。但后来仔细想想,第二章是在介绍很多概念,在慢慢的为后铺路。和第一章的框架概念不同,第二章更为具体,讲的是方法的概念。虽说是乱,可每一个新节点又连着旧的知识,有种剪不断,理还乱的感觉。hhh,下面开始进入主题吧! 本文的主题之一是高级语言的特性,但我感觉书上对于高级语言的特性更像是普及性的讲解,会了固然好,不会也影响不大。懒虫上身,这篇文章就只谈谈语法描述吧! 在开始之前,请先记住一句话:文法是语法规则。感觉很多初学的人学了原创 2020-09-16 08:24:23 · 1237 阅读 · 0 评论 -
动态链接库
一直在用库,也一直不知道到啥是库。今天有时间,就了解一下库吧!(以动态链接库为题,但内容中也相关与静态库)。 希望能通过这篇博客,说明白这么几个问题: 1. 什么是静态链接库?什么是动态链接库? 2. 静态链接库和动态链接库的区别(两者各自的优点,缺点)? 3. 动态链接库的调用方式(隐式调用,显式调用两者区别及优缺点)。 4. 关于链接库一些相关的文件说明(比如.lib,.dll等)。一、什么是静态链接库,什么是动态链接库?+ 二、两者区别 要想明白两者,先要懂什么原创 2020-09-05 22:24:11 · 648 阅读 · 0 评论 -
编译原理绪论
之前一直在写程序,了解到运行程序的两个步骤:编译,运行。在Microsoft visual C++中编译和运行是分开的两部分。在DEV C++中集成为一个按键。在之前的印象中,编译就是寻找语法错误的过程。只要程序语法有错误,程序就无法通过编译。并会提示相应的信息,告诉写程序的人去哪里修改什么类型的错误。这学期开始,开设了编译原理课程。按照之前的习惯,通过写博客,及时梳理自己的思路并希望能在某些方面有所提高。下面开始吧! 学东西先问自己几个问题:什么是编译原理?为什么需要编译原理?怎么才能实现编译原理原创 2020-09-05 21:58:30 · 2422 阅读 · 1 评论