编译程序原理VS解释程序原理
引言
在备战软考的过程中在复习程序设计语言的时候遇到这么一个考点——解释和编译的原理,并且在做真题的过程
中频繁的考查两者的区别,由于复习的不是很到位所以导致丢分,所以小编又重新复习了这一块的知识,现在将两者
的区别总结出来和大家分享。
一、编译程序原理
首先让大家看一张来自百度百科上面的编译工作阶段的示意图
这张图看起来不是很爽因为图比较小并且比较乱,所以我就给大家简化了一下,大致的描述了编译阶段的工作流
程,如下图:
1、词法分析
源程序可以简单的被看成一个多行的字符串,词法分析阶段是编译过程中的第一个阶段,这个阶段的任务是对源
程序从前到后(从左到右)诸葛字符的扫描,符号是程序设计语言的基本语法单位,如关键字,标识符,常数、运算
符等,词法分析过程一句的是语言的词法规则,即描述“单词”结构的规则。
2、语法分析
语法分析的任务是在词法分析的基础上,根据语言的语法规则将单词符号序列分解成各类语法单位,语法规则就
是各类语法单位的构成规则。通过语法分析确定整个输入串是否构成一个语法上正确的程序。
词法和语法分析的本质都是对源程序的结构进行分析
3、语义分析
语义分析阶段分析个语法结构的含义,检查源程序是否包含静态语义错误,并收集类型信息供后面的代码生成阶
段使用。只有语法和语意都正确的源程序才能翻译成正确的目标代码。语义分析的一个主要工作是进行类型分析和检
查。程序设计语言中的一个数据类型一般包含两个方面的内容:类型的载体极其上的运算。
4、中间代码生成
中间代码生成阶段的工作室根据语义分析的输出生成中间代码。“中间代码“是一种简单且含义明确的记号系
统,可以有若干中形式,他们的共同特征是于具体的机器无关,最常用的一种中间代码是汇编语言指令非常的相似的
三地址码。
5、代码优化
由于编译器将源程序翻译成中间代码的工作室机械的,按固定模式进行的,因此生成的中间代码往往在时间上和
空间上有较大的浪费,当需要生成高效的目标代码时,必须进行优化。优化过程可以在中间代码生成阶段进行,也可
以在目标代码生成阶段。
6、目标代码生成
目标代码生成是编译器工作的最后一个阶段,这一阶段的任务是把中间代码变换成特定机器上的绝对指令代码,
可重定位的指令代码或汇编指令代码,这个阶段的工作与具体的极其密切相关。
二、解释程序原理
解释程序原理是另一种语言处理程序,在词法、语法、语义分析方面与编译程序原理基本相同,但是在运行用户
程序时,它直接执行源程序或源程序的中间表示形式。因此,解释程序不产生源程序的目标程序,这是它和编译程序
的主要区别。
简单的说解释程序是高级语言翻译程序的一种,它将源语言书写的源程序作为输入,解释一句就提交计算机执行
语句,并不形成目标程序。就像外语翻译中的“口译”一样,不产生 全文的翻译文本。
解释程序也可以将源程序翻译成某种中间代码形式,然后对中间代码进行解释来实现用户程序 的运行,这样翻译
方式如图所示,通常,在中间代码和高级语言的语句存在一一对应的关系。解释方式B和C的不同之处在于中间代码的
级别,在方式C下,解释程序采用的中间代码更接近于机器语言,在这种实现方案中,高级语言和低级中间代码间存
在1-n的对应关系,它在词法分析、语法分析、语义分析基础之上,先将源程序翻译成中间代码,再由一个非常简单
的解释程序来解释执行这种中间代码,这类系统具有更好的移植性。
解释 VS 编译
两者在在词法、语法、语义分析方面相同,但是解释程序没有目标代码的生成,并且在执行过程中与源代码有非
常大的联系,而编译程序的运行时与源程序没有关系。
常见考点
1、两者的区别?
2、编译过程中那些步骤是必须有的,那些步骤是可以省略的?
2、有限自动机的出现是用在编译过程的那个阶段?
4、程序中的某类错误,在编译的那个阶段能检查出来?
5、。。。。。。。
小结
编译程序原理VS解释程序原理相关推荐
- 【编译原理】解释程序与编译程序的主要区别
[编译原理]解释程序与编译程序的主要区别 解释程序与编译程序的主要区别是: 编译程序将源程序翻译成目标程序后再执行该目标程序: 而解释程序则逐条读出源程序中的语句并解释执行,即在解释程序的执行过程中并 ...
- grpc通信原理_容器原理架构详解(全)
目录 1 容器原理架构 1.1 容器与虚拟化 1.2 容器应用架构 1.3 容器引擎架构 1.4 Namespace与Cgroups 1.5 容器镜像原理 2 K8S原理架构 2.1 K8S主要功能 ...
- BC之SC:区块链之智能合约——与传统合约的比较以及智能合约模型部署原理、运行原理相关配图
BC之SC:区块链之智能合约--与传统合约的比较以及智能合约模型部署原理.运行原理相关配图 目录 SC与传统合约的比较 SC模型部署原理.运行原理 SC与传统合约的比较 1.传统合约VS智能合约 特 ...
- 真香定律!Android动态换肤实现原理解析,原理+实战+视频+源码
自己项目中一直都是用的开源的xUtils框架,包括BitmapUtils.DbUtils.ViewUtils和HttpUtils四大模块,这四大模块都是项目中比较常用的.最近决定研究一下xUtils的 ...
- mapreduce原理_Hbase Bulkload 原理面试必备
当需要大批量的向Hbase导入数据时,我们可以使用Hbase Bulkload的方式,这种方式是先生成Hbase的底层存储文件 HFile,然后直接将这些 HFile 移动到Hbase的存储目录下.它 ...
- kafka分区与分组原理_Kafka工作原理
Kafka工作原理 Kafka工作原理 4.1. topic和消息 4.2. Producer 4.3. Consumer 4.4. Kafka核心特性 4.5. consumer.consumer ...
- 【重难点】【JUC 04】synchronized 原理、ReentrantLock 原理、synchronized 和 Lock 的对比、CAS 无锁原理
[重难点][JUC 04]synchronized 原理.ReentrantLock 原理.synchronized 和 Lock 的对比.CAS 无锁原理 文章目录 [重难点][JUC 04]syn ...
- bootloader功能介绍/时钟初始化设置/串口工作原理/内存工作原理/NandFlash工作原理...
bootloader功能介绍 初始化开发板上主要硬件(时钟,内存,硬盘), 把操作系统从硬盘拷贝到内存,然后让cpu跳转到内存中执行操作系统. boot阶段 1.关闭影响CPU正常执行的外设 -关闭看 ...
- TRIZ系列-创新原理-14~15-曲面化原理和动态性原理
一.曲面化原理的表述如下 1)用曲线部件代替直线部件,用球面代替平面,用球体代替立方体: 2)采用滚筒,球体,螺旋体: 3)利用离心力,用旋转物体代替直线运动 由于TRIZ的创新原理是基于专利分析的基 ...
最新文章
- 逆透视变换IPM模型
- 梯度下降算法的正确步骤是什么?
- subprocess 模块
- Android开发之通过Android Studio自带插件git创建分支,合并分支等
- HDU——1054 Strategic Game
- 自动配置原理---SpringBoot
- Linux创建多个子线程并回收
- 首师大2计算机考研分数线,2021考研分数线:首都师范大学2021年考研复试分数线...
- 不想让别人的闪盘或者移动硬盘在自己的电脑上识别
- 201671010443 徐明锦 词频统计软件项目报告
- C语言逻辑运算符: 和 ||
- 千树万树梨花开:二叉树的实现以及存储结构
- 2020年下半年网络工程师下午真题及答案
- 函数空间(巴纳赫空间、欧几里得空间、希尔伯特空间)
- 【汇正财经】证券市场的基本功能有哪些?
- 安防系统的定义及相关组成部分详解
- Arai2自动添加tracker链接的方法
- loadrunner+win2003虚拟机的安装
- 戒烟-这书能让你戒烟pdf
- 安卓.odex文件的反编译
热门文章
- escalating to SIGTERM问题出现的原因
- 凌晨 计算机博士,凌晨三点,被我的博士老婆喊起来写程序……
- ECCV2022论文列表(中英对照)
- 基于JAVA的校园二手交易平台(附:源码 论文 数据库文件)
- linux非yum安装svn,linux安装svn(yum安装)
- 精准营销的神器:小蜜蜂获客系统助你成功
- mysql按月份分组查询_mysql如何按月份分组查询
- 已解决AttributeError: ‘Rectangle‘ object has no property ‘laber‘
- C语言中快排函数——qsort()
- 逻辑思维能力选择题30道