![](https://img-blog.csdnimg.cn/20190716112520251.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
编译原理笔记
编译原理笔记,课程来源于哈工大在中国大学MOOC的视频,主讲为陈鄞老师。
土豆洋芋山药蛋
理性的生存,诗意的栖居。
展开
-
SMT Solver-Z3入手教程
Z3是一种SMT Solver,用于在给定背景逻辑的情况下,求解改组理论解释下的公式可满足性。下载安装从下面链接中下载新的Z3版本:https://github.com/Z3Prover/z3/releases安装:1.cd z32.python scripts/mk_make.py3.cd build(切换到build文件夹)4.make看到Z3 was successfull...原创 2019-11-27 19:49:59 · 4677 阅读 · 0 评论 -
【编译原理】第一章:绪论
一、绪论1.1什么是编译?计算机程序语言可以自顶向下可以分为高级语言、汇编语言和机器语言三种,其中开发程序员最长接触的为高级语言,如JAVA,高级语言经过编译就会生成汇编语言或机器语言,具体关系如下图:译的过程就是将高级语言翻译成汇编语言或机器语言的过程 ,即将源语言转化为目标语言的过程。编译器在语言处理系统中的位置如下图所示:可重定位(Relocatable): 在内存中存放的起始...原创 2019-07-04 20:05:12 · 404 阅读 · 0 评论 -
【编译原理】第二章 语言及其文法
第二章 语言及其文法2.1 基本概念字母表字母表∑\sum∑是一个又穷的符号集合,其中符号包括字母、数字和标点符号等如➢二进制字母表:{ 0,1 } ;➢ASCII字符集 ;➢Unicode字符。字母表上的运算➢字母表∑1\sum_1∑1和∑2\sum_2∑2的乘积( product)∑1∑2={ab∣a∈∑1,b∈∑2}\sum_1\sum_2=\{ab|a \in \sum_...原创 2019-07-04 22:16:36 · 728 阅读 · 0 评论 -
【编译原理】第三章 词法分析
第三章 词法分析词法分析这一张从正则表达式到有穷自动机,讲述了如何利用确定性的有穷自动机来进行单词的识别。其中正则表达式和有穷自动机之间也有相应的转化关系。3.1 正则表达式(RE)正则表达式(Regular Expression,RE)是一种用来描述正则语言的更紧凑的表示方法 ,正则表达式可以由较小的正则表达式按照特定规则递归地构建。每个正则表达式 r定义(表示)一个语言,记为L(r )。...原创 2019-07-05 15:04:49 · 950 阅读 · 0 评论 -
【编译原理】第四章 语法分析
第四章 语法分析语法分析的任务是构造语法分析树,构造的方法主要分为2类,包括自顶向下分析和自底向上分析。4.1 自顶向下分析概述自顶向下的分析是指从分析树的顶部(根节点)向底部(叶节点)方向构造分析树,可以看做是从文法开始符号S推导出单词串w的过程,例如:输入为id+(id+id),可以理解为通过语法分析树可以最终得到id+(id+id),即将叶子节点连接起来就可以构成id+(id+i...原创 2019-07-09 01:26:47 · 3281 阅读 · 0 评论 -
【编译原理】第五章 语法制导翻译
第五章 语法制导翻译5.1 语法制导翻译概述将语义分析和中间代码生成统称为语义翻译,而语义翻译和语法分析统称为语法制导翻译语法制导翻译使用CFG来引导对语言的翻译, 是一种面向文法的翻译技术。语法制导翻译的基本思想包括1)如何表示语义信息?2)如何计算语义属性?Q1:如何表示语义信息?为CFG中的文法符号设置语义属性,用来表示语法成分对应的语义信息比如说一个变量,它的属性包括变量...原创 2019-07-10 14:34:21 · 8747 阅读 · 0 评论 -
【编译原理】第六章 中间代码生成
第六章 中间代码生成中间代码也叫中间语言(Intermediate code /language)是:源程序的一种内部表示,不依赖目标机的结构,复杂性介于源语言和机器语言之间。中间代码常见的几种形式1、后缀式2、图表示法抽象语法树、DAG图3、三地址代码三元式、四元式、间接三元式后缀式6.1 声明语句的翻译6.1.1 类型表达式各类语句的翻译,包括声明语句、控制语句等。声明语...原创 2019-07-11 23:58:30 · 4554 阅读 · 0 评论 -
【编译原理】 第七章 运行存储分配
第七章 运行存储分配7.1 概述编译器在工作过程中,必须为源程序中出现的一些数据对象分配**运行时的存储空间 **,对于那些在编译时刻就可以确定大小的数据对象,可以在编译时刻就为它们分配存储空间,这样的分配策略称为静态存储分配如果不能在编译时完全确定数据对象的大小,就要采用动态存储分配的策略。即在编译时仅产生各种必要的信息,而在运行时刻,再动态地分配数据对象的存储空间。栈式存储分配...原创 2019-07-13 11:35:54 · 2275 阅读 · 0 评论 -
【编译原理】第八章 代码优化
本章基本框架为:第八章 代码优化8.1 流图在代码优化之前,需要先分析代码的控制流程,因此需要流图。流程中每一个基本结点为基本块。基本块(Basic Block)基本块是满足下列条件的最大的连续三地址指令序列:控制流只能从基本块的第一个指令进入该块。也就是说,没有跳转到基本块中间或末尾指令的转移指令。除了基本块的最后一个指令,控制流在离开基本块之前不会跳转或者停机。基本块划...原创 2019-07-15 12:34:51 · 3746 阅读 · 1 评论 -
【编译原理】第九章 代码生成
第九章 代码生成9.1 代码生成器的主要任务任务1:指令选择选择适当的目标机指令来实现中间表示(IR)语句三地址语句 x= y+ z目标代码 :LD R0,y /* 把y的值加载到寄存器R0中*/ ADD R0,R0 ,z /* z加到R0上*/ST x ,R0 /* 把R0的值保存到x中*/但如上图所示,目标代码中可能有冗余现象,如a已经保存到R0中,不需要在加载一次。...原创 2019-07-15 14:48:06 · 894 阅读 · 1 评论