【编译原理】编译是怎么一个过程?
一、编译程序的概念与操作
概念:
计算机语言分成:高级语言
和低级语言
。
低级语言又分成汇编语言
和机器语言
。
因为计算机只能读懂机器语言的程序,所以所有高级语言的程序都必须转成机器语言的程序。
这个转换过程是由一个程序来自动完成的。
要说计算机要把一个源程序翻译成机器语言的程序,首先需要读懂该程序,所以计算机应该怎么去读懂一个源程序呢?
操作:
第一步:词法分析
首先明白,计算机翻译程序开始工作,先需要把待翻译的程序读到内存去,由于翻译程序不知道什么是一个句子或一个单词,所以读源程序的时候只能一个一个字符去读,把源程序的一个一个字符读进来后,先需要分清楚哪些字符串是一个整体,如main,int,x,10等都是一个独立的整体,编译程序把这个字符串整体叫做单词word,要拼出一个一个称作单词的字符串:int,main,(,),
{,int,x,=,10,;,x,=,x,+,10 etc.
这些单词有都有自己的组成规则,以字母打头的不是关键字就是自定义标识符,以数字大头的肯定是数字,其他的要么是运算符要么是标点符号等。
程序举例:
int main()
{int x=10;x=x+10...
}
第二步:语法分析
经过第一步词法分析后就有了单词,然后根据语言的句法或者句型结构(每个语言都有)再拼出一个一个的句子。如果拼不出一个完整的句子,就是语法错误。
第三步:语义分析
分析判断前面符合句型结构的句子有没有语义,简单点就是你说的符不符合逻辑,有没有废话等。
第四步:中间代码生成
为了方便代码生成所作的前期准备工作,这个阶段可以没有。
第五步:目标代码生成和代码优化
代码优化就是将生成的目标代码优化一下,使得生成的目标代码更加短小精炼,执行速度更快等。代码优化阶段并不是所有编译程序必须的,现在很多程序的编译程序中,就没有包含代码优化这个步骤,或者是编译选项等。
第六步:目标代码生成和代码优化
所有过程中都会涉及到表格管理和错误处理两个功能模块。翻译每一个阶段出了问题都会调用错误处理来完成相应的提示信息(位置,错误代码和信息等)或者更进一步的自动修正程序等。表格是用来记录每个自定义标识符的内存地址,初值,作用域,可见性等,这个表格需要记录,查询等。
综上所述,一个编译程序至少包含词法分析、语法分析和代码生成3个阶段,其他阶段或功能模块都可以不包含。
二、编译程序名称
- 将汇编程序转成机器语言的程序叫做
汇编程序
; - 将高级语言的程序转换成机器语言的程序叫做
翻译程序
。
三、翻译方法
翻译程序有2种不同的翻译方法,分别叫做编译
和解释
。
解释方法
类似于同声实时翻译,一句一句翻译解释给计算机去执行。这种方法的特点就是计算机一边翻译一边执行,只有执行结果,没有产生任何中间结果。
编译方法
类似于小说翻译,首先生成中间结果,就是.obj的目标文件,计算机执行的不是高级语言的程序,而是中间结果(.obj的目标文件)。
翻译方法的优缺点:
不同高级语言采用不同的翻译方式,有的语言采用编译,如c,c++,dephi等,有的采用解释方式,如Basic,MATLAB,HTML、XML、Perl、Python、Ruby和Java等。
||每次点击“compile”后等待的那几秒背后不为人知的故事:||
程序分成系统程序
和应用程序
,编译程序属于系统程序。了解了编译程序是干什么的以后,我们就需要了解编译程序到底是怎么一步一步翻译成机器语言的程序的:
先编辑一个源程序,然后将源程序compile编译成.obj的目标程序,再接着将.obj的目标程序和库函数等Linking连接成.exe的可执行程序。最后再执行.exe的可执行程序得到程序运行结果了。
【编译原理】编译是怎么一个过程?相关推荐
- 编译原理课程实践——实现一个初等函数运算语言的解释器或编译器
编译原理课程实践--实现具有初等函数运算语言的解释器或编译器 作者:Sylvan Ding |转载请注明文章出处! 摘要:本文主要内容是设计词法分析器.语法分析器(LL(1).SLR(1))和语义分析 ...
- 编译原理 yacc lex 制作一个计算器
这篇文档是我从别的地方摘抄的,留给自己以后回忆使用.(写的非常详细!) Flex工具的使用方法 Lex 是一种生成扫描器的工具. Lex是Unix环境下非常著名的工具,主要功能是生成一个扫描器(Sca ...
- 基于LLVM的编译原理简明教程: 写一个自己的编译器
LLVM简介 进入21世纪,新的编程语言如雨后春笋一样不停地冒出来.需求当然是重要的驱动力量,但是在其中起了重要作用的就是工具链的改善. 2000年,UIUC的Chris Lattner主持开发了一套 ...
- c语言实现编译器编译原理,编译原理课程设计--C语言编译器实现.doc
编译原理课程设计--C语言编译器实现 甘肃政法学院 编译原理课程设计 题 目 C语言编译器实现 计算机科学学院计算机科学与技术专业10 级 计本 班 学 号: 201081010137 姓 名: 杨青 ...
- html解析器编译原理,编译原理实验报告词法分析器(内含源代码).docx
编译原理实验报告词法分析器(内含源代码) 编译原理实验(一) --词法分析器 实验描述 运行环境:vc++2008 对某特定语言A ,构造其词法规则. 该语言的单词符号包括: 1该程序能识别的单词符号 ...
- php 编译原理,编译原理
编译原理是计算机科学中历史最悠久,也是最高度发展的学科之一.编译器的设计与实现集中体现了计算机科学中的最核心的思想和技术,并且和计算机科学的其他研究领域,如形式语言与自动机.算法.数据结构.程序设计语 ...
- 编译原理——编译基础知识
编译基础知识 语言是什么 1.1,高级语言 语言就是一个记号系统 通过语法来组成语义 1.2,语法规则 如何语言程序可以看成一定字符集 语法使得这串字符串形成一个形式上正确的程序 1.3,词法规则 规 ...
- c语言注释的正规文法 编译原理,编译原理:正规式、正规文法与自动机
1.正规式转换到正规文法 对任意正规式R选择一个非终结符Z生成规则Z→R 1.对形如A→ab的规则,转换成A→aB,B→b 2.将形如A→a|b的规则,转换成A→a,A→b(A→a|b) 3.将形如A ...
- 从编译原理看一个解释器的实现
『设计模式』中有一个模式可以解释特定的语法规则,它就是解释器模式(Interpreter Pattern).不同于常见的策略模式或者是工厂模式,解释器模式在.NET或者JDK中并不常见,而且在业务上也 ...
- 计算机编译原理有必要学吗,计算机程序编译原理学习心得
计算机程序编译原理学习心得 <编译原理>是计算机专业的一门重要课程,正如教材:第一章的引论所述,"编译程序是现代计算机系统的基本组成部分之一"."一个编译程序 ...
最新文章
- c语言中描述y是奇数,4章选择结构程序设计C语言入门习题
- 今年阿里双十一CDN要冲历史之最,峰值带宽达到5000G+,来高手分析一下他们的CDN节点数量和规模...
- 细说Sql Server中的视图(下)转载
- MySQL运算符,SQL,算术比较逻辑位,优先级,正则表达式,完整详细可收藏
- 为什么35岁的C++依然能主导编程世界
- VC++动态库封装及调用
- MTK 功耗优化(1)---MTK PerfService
- Madagascar的自定义浮点型函数--绝对值函数和最值函数
- Unity2018新功能抢先预览 | Preset功能
- 达摩院发布AI Earth地球科学云平台
- DXP-2004软件安装
- Structured Streaming任务GC问题
- 常用的网络进行广告推广的落实措施都有哪些渠道呢
- 初学者之路—————Cycle GAN
- win7系统调整屏幕刷新率方法
- 程序减肥,strip,eu-strip 及其符号表
- graphpad如何检测方差齐_SPSS和GraphPad如何比较组内和组间差异「杏花开生物医药统计」...
- “75后”院士,任顶级大学副校长
- 开关电源学习——基本元件之电容
- 经典好文!手把手教你写Android项目文档,小白也能看明白
热门文章
- lamda过滤_java 使用Lambda和filter对对象集合过滤
- python爬虫贴吧_Python爬虫简单实现,贴吧图片一键下
- 怎么把python程序发给别人_想把你写的Python程序发给别人用?打包成exe啊!
- html5 js保存token,vue生成token并保存到本地存储中
- affine工程难点、亮点汇总
- 基于PHP MySQL在线考试系统,基于PHP和MySQL的考试系统的研究
- linux 实时功能,linux – 什么是同时具有实时循环和非实时功能的更好方法
- 关于Xcode上的Other linker flags
- NSNotification、delegate和KVO的区别
- swagger-bootstrap-ui 1.9.3 发布,i18n及自定义文档支持