编译程序基本原理的知识笔记

编译程序的作用是把某高级语言书写的源程序翻译成与之等价的目标程序。

              

1、编译过程

1.1 词法分析

编译过程的第一阶段主要任务是对源程序从前往后(从左往右)逐个字符扫描,从中识别出一个个单词符号。“单词”是程序设计语言的基本语法单位,如关键字、标识符等。

1.2 语法分析

语法分析的任务是在词法分析的基础上,根据语言的语法规则将单词符号序列分解成各类语法单位,比如表达式、语句。

语法规则是各类语法单位的构成规则。

词法分析和语法分析的本质都是对源程序的结构进行分析。

1.3 语义分析

语义分析阶段分析各语法的含义,检查源程序是否包含静态语义错误,并收集类型信息供后面的代码生成阶段使用。只有语法和语义都正确的源程序才能正确翻译成目标程序。

语义分析的主要工作进行类型分析和检查。

1.4 中间代码生成

中间代码生成阶段的主要任务是工作是根据语义分析的输出生成中间代码。最常用的中间代码是与汇编语法的指令非常相似的三地址码,常采用四元式。

格式为:(运算符,运算对象1,运算对象2,运算结果)

语义分析和中间代码的依据是语言的语义规则。

1.5 代码优化

由于编译器翻译中间代码的过程是机械式的、固定模式进行的,因此生成的中间代码往往在时间上、空间方面效率较差。如果需要生成高效率的目标代码,就必须进行优化。

1.6 目标代码生成

主要任务是把中间代码变换成特定机器上的绝对指令代码、可重定位的指令代码或汇编指令代码。

1.7 符号表管理

符号表的作用是记录源程序中各符号的必要信息,用来辅助语义的正确检查和代码生成。

1.8 出错处理

源程序不可避免会出现一些错误。分为两类:静态错误和动态错误。

静态错误:编译阶段发现的错误。比如:单词拼写错误、标点符号错误。

动态错误:在程序运行时发生的错误。比如 零做除数等。

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

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

相关文章

lamaba中reduce方法将集合中的所有整数相加,并返回其总和

reduce:也是对所有值进行操作,但它是将所有值,按照传入的处理逻辑,将结果处理合并为一个 如:将集合中的所有整数相加,并返回其总和 下面看个例子: 如:将集合中的所有整数相加,并返…

mx2 android os耗电,魅族MX3 Flyme OS 3.2充电慢、耗电快问题的解决方法详解

一个星期前刷了3.2,但充电和耗电问题一直困扰着我,我的魅兔主要出现以下问题:1.充电慢,基本四个小时充满。如果一边玩一边充,甚至会掉电。2.耗电极快,待机一小时掉电10%,待机一晚掉电50%。倒是出…

UML入门之类图教程

一 简单实例电话父类telphone 拥有发消息和打电话接口Playgame 能够打游戏AndroidPhone 重写了发消息 继承于telphoneMacPhone 除了基础打电话和发消息,还能打游戏 继承于telphone实现于playgame了接口GameMaching 能够打游戏 实现于playgame了接口 二解决问题 1. …

网络基础:Ping命令的7种基础用法,掌握了秒变大神!

现在不管安防工程还是弱电工程,与网络的联系也越来越密切了,网络基础知识中的网络命令ping命令在项目中是使用频率最高的,一般我们用的都是它的基本功能,今天和大家来详细看下Ping命令的7个基础用法,掌握了秒变大神&am…

java枚举返回字符串_Java新特性:数据类型可以扔掉了?

关注“脚本之家”,与百万开发者在一起作者 | 王磊来源 | Java中文社群(ID:javacn666)在很久很久以前,我们写代码时要慎重的考虑变量的数据类型,比如下面这些:枚举:尽管在 JDK 5 中增加了枚举类型&#xff0…

idea查看类和方法的结构图

查看类的结构图 1.选中需要查看的类或者方法 2.点击右键选中【Diagrams】 效果如下,绿色的是接口,蓝色的是类

华为新出的鸿蒙,华为发出新计划:2021年完成3亿鸿蒙用户,你会给你手机尝试吗...

随着2020年的首批内测结束,华为目前支持鸿蒙系统的机型再度扩大,在2021年3月份,举办的线下鸿蒙开发者论坛上,华为方负责人也明确表示,2021年是鸿蒙操作系统的起始。先来看一下鸿蒙系统的发展史,以及目前开发…

程序语言基础:解释程序基本原理笔记

1、解释程序的概念 解释程序是在运行用户程序时,直接执行源程序或源程序的中间表示。解释程序不产生源程序的目标程序。 解释程序实现高级语法的三种方式如下图: 方式A:直接对整个源程序进行逐个字符的检查、进行词法、语法分析和语义分析后就…

微软登录界面加载不出_微软要硬了,做出这个目前最好用的浏览器

众所周知,微软能打造出一个全球通用的系统,但就是做不出一个能用的浏览器。IE 浏览器的黑历史就不提了,即使后来洗心革面,推出了基于 Win 10 的 Edge 浏览器,也还是难以挽尊市场份额甚至不如老前辈 IE。Edge 虽然功能比…

阻塞队列(BlockingQueue)

阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。阻塞队列常用于生产者和消费者的场景,生产者是往队列里添…

一维数组对象转成二维数组

一、关于PHP把装着item为对象的一维数组转成二维数组的疑问 背景:新增帖子的时候,选择标签时,可以选择多个,后端接口是需要传入的是一个二维数组。 /*** Title 修改精选内容* Params $id 记录ID* Params $tags …

电脑操作系统维护10条基础知识!

电脑操作系统是电脑的核心,我们平时如何维护电脑操作系统?下面是小编分享是电脑系统维护基础知识,一起来看一下吧。1、经常进行“磁盘清理”和磁盘碎片整理”当硬盘用久了,无数次的新增、更改和删除程序和文件后,就会造成很多断断…

光子浏览器_烟台招聘信息烟台光子信息科技有限公司招聘(五险一金,餐补)...

↑烟台招聘信息网点击关注哦汇集烟台市招聘信息,含盖烟台人才网,烟台招聘会,烟台招聘网、烟台优秀企业、事业单位等优质工作岗位及招聘信息,烟台求职找工作和烟台兼职资讯平台… 【温馨提示】:因网络诈骗现象较多&…

DES加密

DES采用了64位的分组长度和56位的密钥长度,是对称加密的一种。 DES的理论进化主线是 1945年Shannon大神提出的交替使用混淆(使密文与密钥的统计关系变复杂)和扩散(使明文与密文的统计关系变复杂)的乘积密码&#xff08…

计算机系统基础:输入输出技术知识笔记

1、内存与接口的编址方式 1.1 内存和接口地址独立编址方法 内存地址和接口地址是两个完全独立和相互隔离的地址空间。访问数据的指令也不同,接口只有读写指令,其余都是内存指令。 特点:接口和内存指令容易区分,但接口指令太少、功…

小米max2 android p,这就是小米Max2?6.4英寸超大屏幕配置大升级

标签:小米手机(3463)小米(3233)虽说今年上半年小米6的重磅机型会是小米6,但随着小米Max在官方商城的下架,这款巨屏手机的更新换代产品已经在网络上浮出水面。根据知名图形测试网站GFXBench最新公布的信息显示,一款代号为Oxygen的小…

winform直接控制云台_速学指南,2分钟学会Feiyu pocket口袋云台的隐藏功能操作

上周三,Feiyu pocket口袋云台相机正式发布,重量仅115g,单手可持,可拍摄 4K/60fps高清画面;6轴混合防抖技术加持,赋予轨迹延时、全域模式、慢动作、全跟随等模式更专业、高效的拍摄体验。Feiyu pocket口袋云…

ThreadPoolTaskExecutor和ThreadPoolExecutor区别

初学者很容易看错,如果没有看到spring或者JUC源码的人肯定是不太了解的。 ThreadPoolTaskExecutor是spring core包中的,而ThreadPoolExecutor是JDK中的JUC。ThreadPoolTaskExecutor是对ThreadPoolExecutor进行了封装处理。 ThreadPoolExecutor ThreadP…

电脑技巧:如何解决大部分的电脑防弹窗广告

相信很多人都有这种情况,打开电脑,电脑上全部各种广告弹窗,或者在办公、追剧的时候,电脑突然就弹出了一条,是不是很烦人,这几招不用借助软件,就能解决弹窗的方法不防一试。 方法一: 第一种方法,可以对付部分…