文章目录

  • 1.几种基本的翻译程序
    • 1.1翻译程序
    • 1.2汇编程序(Assembler)
    • 1.3编译程序(Compiler)
    • 1.4解释程序(Interpreter)
    • 1.5总结
  • 2.编译程序的运行过程
    • 2.1词法分析(Lexical analysis)
    • 2.2语法分析(Syntax Analysis)
    • 2.3语义分析与中间代码产生(Semantic Analysis and Intermediate Generator)
    • 2.4优化(Optimization)
    • 2.5目标代码生成(Code Generation)
  • 3.表格管理 (symbol-table manager)
  • 4.出错处理(error handler)
  • 5.编译前端与后端

要在计算机上执行用 高级语言(或汇编语言)编写的程序,必须通过特定的途径来进行,也就是要通过 翻译程序把用高级语言(或汇编语言)编写的程序翻译成为机器语言构成的程序,计算机才能执行。
在计算机上执行一个高级语言程序一般要分为两步:
第一步,用一个编译程序把高级语言翻译成机器语言程序;
第二步,运行所得的机器语言程序求得计算结果。

1.几种基本的翻译程序

1.1翻译程序

通常所说的翻译程序是指这样的一个程序,它能够把某一种语言程序(称为源语言程序或源程序)转换成另一种语言程序(称为目标语言程序或目标程序)

1.2汇编程序(Assembler)

如果源语言是某种汇编语言,而目标语言是某种计算机的机器语言,这样的一个翻译程序就称为汇编程序。

1.3编译程序(Compiler)

如果源语言是某种高级语言,而目标语言是某种低级语言(汇编语言或机器语言),这样的一个翻译程序就称为编译程序。

1.4解释程序(Interpreter)

这是另外一种类型的翻译程序,在翻译过程它按照高级语言源程序在计算机上执行的动态顺序对源程序的语句逐条翻译(解释),边解释边执行直至结束,它不产生目标程序,它的工作结果就是源程序的执行结果,这样的一个翻译程序就称为解释程序。

1.5总结

编译程序与其他几种翻译程序的区别在于源语言和目标语言的不同,编译程序的源语言是某种高级语言,功能是将其翻译成某种低级语言。
根据不同的用途,编译程序可进一步分类:
(1)诊断编译程序(Diagnostic Compiler): 专门用于帮助程序开发和调试的编译程序。
(2)优化编译程序(Optimizing Compiler): 着重于提高目标代码效率的编译程序。
(3)交叉编译程序(Cross Compiler): 如果一个编译程序产生不同于其宿主机的机器代码。
(4)可变目标编译程序(Retargetable Compiler): 不需重写编译程序中与机器无关的部分就能改变目标机。

2.编译程序的运行过程

编译程序的工作过程一般可以划分为五个阶段:
1.词法分析——2.语法分析——3.语义分析——4.中间代码产生、优化——5.目标代码生成。

2.1词法分析(Lexical analysis)

此阶段的任务是: 输入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个的单词。在词法分析阶段的工作中所依循的是语言的词法规则(或称构词规则)。描述词法规则的有效工具是正规式,识别词法规则的有效工具是有限自动机。

2.2语法分析(Syntax Analysis)

此阶段的任务是:在词法分析的基础上,根据语言的语法规则,把单词符号串分解成各类语法单位(语法范畴),如“短语”、“子句”、“句子”(“语句”)、“程序段”和“程序”等。通过语法分析,确定整个输入串是否构成语法上正确的“程序”。
语法分析所依循的是语言的语法规则。语法规则通常用上下文无关文法描述。词法分析是一种线性分析,而语法分析是一种层次结构分析。
例如,在很多语言中,符号串 z:=X十0.618*Y 代表一个“赋值语句”,而其中的 X+0.618*Y代表一个“算术表达式”。因而,语法分析的任务就是识别 X+0.618*Y为算术表达式,同时,识别上述整个符号串属于赋值语句这个范畴。

2.3语义分析与中间代码产生(Semantic Analysis and Intermediate Generator)

此阶段的任务是:对语法分析所识别出的各类语法范畴,分析其含义,并进行初步翻译(产生中间代码)。
语义处理:
①变量的存储分配 ②表达式的求值 ③语句的翻译(中间代码的生成)
中间代码
中间代码是一种独立于具体硬件的记号系统。
常用的中间代码:三地址码(四元式、三元式、间接三元式),逆波兰式,树形表示等。所谓“中间代码”是一种含义明确、便于处理的记号系统,它通常独立于具体的硬件。这种记号系统或者与现代计算机的指令形式有某种程度的接近,或者能够比较容易地把它变换成现代计算机的机器指令。

2.4优化(Optimization)

优化的任务:对产生的中间代码进行加工变换,以期在最后阶段能产生出更为高效(省时间和空间)的目标代码。
优化的主要方面有:公共子表达式提取、循环优化、删除无用代码等等。有时,为了便于“并行运算”,还可以对代码进行并行化处理。优化所依循的原则:程序的等价变换规则。

2.5目标代码生成(Code Generation)

这一阶段的任务是:把中间代码(或经优化处理之后)变换成特定机器上的低级语言代码。
目标代码的三种形式:
1.汇编语言代码 2.能够立即执行的机器语言代码 3.待装配的机器代码模块

3.表格管理 (symbol-table manager)

编译程序在工作过程中需要保存一系列的表格,以登记源程序的各类信息和编译各阶段的进展状况。合理地设计和使用表格是编译程序构造的一个重要问题。在编译程序使用的表格中,最重要的是符号表。它用来登记源程序中出现的每个名字以及名字的各种属性。

4.出错处理(error handler)

一个编译程序不仅应能对书写正确的程序进行翻译,而且应能对出现在源程序中的错误进行处理。
源程序中的错误通常分为语法错误和语义错误两大类。
语法错误是指源程序中不符合语法(或词法)规则的错误,它们可在词法分析或语法分析时检测出来。例如,词法分析阶段能够检测出“非法字符”之类的错误;语法分析阶段能够检测出诸如“括号不匹配”、“缺少;”之类的错误。
语义错误是指源程序中不符合语义规则的错误,这些错误一般在语义分析时检测出来,有的语义错误要在运行时才能检测出来。语义错误通常包括:说明错误、作用域错误、类型不一致等等。

5.编译前端与后端

编译过程划分为前端和后端的目的:在多种源语言和多种目标语言的开发过程中,可以灵活搭配前端和后端,消除重复开发的工作量,提高编译系统的开发效率。
前端主要由与源语言有关但与目标机无关的那些部分组成。这些部分通常包括词法分析、语法分析、语义分析与中间代码产生,有的代码优化工作也可包括在前端。
后端包括编译程序中与目标机有关的那些部分,如与目标机有关的代码优化和目标代码生成等。通常,后端不依赖于源语言而仅仅依赖于中间语言。

什么是编译程序(含翻译程序、解释程序和中间代码的定义介绍)相关推荐

  1. 编译程序,翻译程序,解释程序,目标程序解释

    目标程序: 又称为"目的程序",是源程序被编译后能够被机器直接运行的机器码的集合,在计算机上以.obj作扩展名.由语言程序(编译程序,汇编程序,解释程序)处理成与之等价的机器码构成 ...

  2. 编译程序与翻译程序、汇编程序的联系与区别,编译过程包括的几个主要阶段,解释程序与编译程序的区别...

    1)简述编译程序与翻译程序.汇编程序的联系与区别. 翻译程序指把高级语言源程序翻译成机器语言源程序(目标代码)的软件.翻译程序有两种:一种是编译程序,它将高级语言源程序一次性全部翻译成目标程序,每次执 ...

  3. 编译程序原理VS解释程序原理

    引言 在备战软考的过程中在复习程序设计语言的时候遇到这么一个考点--解释和编译的原理,并且在做真题的过程 中频繁的考查两者的区别,由于复习的不是很到位所以导致丢分,所以小编又重新复习了这一块的知识,现 ...

  4. 数据分析利器Python——爬虫(含爬取过程、Scrapy框架介绍)

    文章目录 一.基础知识 1.定义 2.基本架构 二.URL管理模块 三.网页下载模块 Python中的requests模块 四.网页解析模块 1.结构化网页解析 2.BeautifulSoup使用步骤 ...

  5. python实现音乐定时开关,模拟上下课铃声(含程序打包微小exe文件方法介绍)

    本文分两部分,先介绍python实现模拟上下课定时铃声播放与关闭,再讲python程序打包成小型exe文件. 一.python实现模拟上下课定时铃声播放与关闭 不说废话,完整代码奉上. import ...

  6. python数据分析师工作内容_小白入行数据分析师3年-工作内容复盘分享含代码(一)-Python篇介绍...

    前言 个人作为互联网行业数据分析师工作已有3年之久,日常工作中碰到过问题,也在解决的问题过程中学到了很多.作为组内技术较为资深的组员,也经常在周会中安排环节给组内人员进行知识分享,以及日常帮助同事解决 ...

  7. 【编译原理】-- 第一章(翻译程序、编译程序、汇编程序、解释程序、编译过程概述)

    编译系统 高级语言的优点是有代价的,必须有一个"翻译程序",也就是高级语言必须有相应的软件支持系统,"编译程序+相应的支持用户程序"---编译系统. 一般这种编 ...

  8. 编译程序与解释程序区别

    目录 前言 一.编译程序定义 二.解释程序定义 总结 前言 举例: A想去外国看演出,但是他不会英文,只能花钱去请翻译. B给出了两种解决办法: 1.购买一本已经翻译完成的英语书,可以直接借用这本书进 ...

  9. 源程序、目标程序、汇编程序、编译程序、解释程序

    源程序.目标程序.汇编程序.编译程序.解释程序之间的关系 翻译程序是这样一种程序:它能把用甲种语言编写的程序翻译成在功能上与之等价的用乙种语言编写的程序.我们把甲种语言称为源语言,把乙种语言称为目标语 ...

最新文章

  1. 暑期集训1:C++STL 例1:UVA-10815
  2. PICRUSt2分析实战:16S扩增子OTU或ASV预测宏基因组、新增KEGG层级
  3. 深入Ajax架构和最佳实践读书笔记
  4. Fiddler无法抓取HTTPS的问题,Fiddler证书无法安装终极解决方案,
  5. Cordova学习--iOS自定义插件
  6. 洛谷P3414 SAC#1 - 组合数
  7. iOS UI基础-7.0 UIScrollView
  8. 《.NET Core 和前后端那些事儿》技术交流活动纪实
  9. iOS MBProgressHUD 之带底板的加载提示
  10. python调用shell脚本
  11. Java华丽转身 —— GUI编程宝典
  12. 行为设计模式 - 模板方法设计模式
  13. tictac 立体井字棋
  14. git pull时候报错443
  15. php 图片外链限制,如何解决新浪微博图床限制图片外链的问题 | 骤雨打新荷
  16. 不一样的feign,获取返回code非200的响应
  17. WPF 实现无边框窗口两种方法
  18. 寻找 Web3 的灵魂
  19. matlab中水平垂直线,关于Matlab:水平-垂直线
  20. windows10系统-12-WPS文档编辑排版

热门文章

  1. 某bobo在线视频APP下载暴力流逆向
  2. 使用开源激光SLAM方案LIO-SAM运行KITTI数据集,如有用,请评论雷锋
  3. admin.php生成地址,FastAdmin隐藏后台登录入口地址的方法
  4. 艾孜尔江在腾讯网上的影视作品
  5. php 正则匹配座机号、手机号
  6. 浏览器安全之网络安全(HTTPS)
  7. 如何说服老板页面兼容IE9+
  8. LQ0139 油漆面积【枚举】
  9. python中欧拉-罗德里格斯的代码详解
  10. mysql学习ppt摘抄笔记