只有理解了CPU、微架构、指令集等概念之后,再去理解编译器概念就更加容易了。
这些概念像盖房子一样,一层一层地建立,扩展。上层的概念以下层为基础。概念的分层是为了更好地解释复杂的事物。
并且集中精力理解该层次的内容,而忽略其他层次的内容。
编译器这层的概念就开始向软件层面迈进了。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
编译器:
源码要运行,必须先转成二进制的机器码。让计算机CPU能够读懂。这就是编译器要做的事情。
编译器本身是一个软件,一套程序,但是这个程序实现上述功能的过程也是很复杂的。
作为系统软件,编译器的设计与实现是非常复杂的。
对于一个相对复杂的系统,通常的解决方法是将系统分解成若干较小且便于处理的小系统,分别实现后将其组织成一个完整的复杂系统,这就是"分治法"的思想。
实际上,计算机科学家正是运用这种思想来设计与实现编译器、操作系统、网络通信协议等复杂的大型系统软件的。
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
编译器的工作过程:
移步下方参考链接。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
编译器的种类有哪些:
转自:http://bbs.szhome.com/80-130060-detail-176161562.html
简单讲,编译器就是将“一种语言(通常为高级语言)”翻译为“另一种语言(通常为低级语言)”的程序。一个现代编译器的主要工作流程:源代码 (source code) → 预处理器 (preprocessor) → 编译器 (compiler) → 目标代码 (object code) → 链接器 (Linker) → 可执行程序 (executables)
编译器可以生成用来在与编译器本身所在的计算机和操作系统(平台)相同的环境下运行的目标代码,这种编译器又叫做“本地”编译器。另外,编译器也可以生成用来在其它平台上运行的目标代码,这种编译器又叫做交叉编译器。交叉编译器在生成新的硬件平台时非常有用。“源码到源码编译器”是指用一种高级语言作为输入,输出也是高级语言的编译器。
编译器可分为以下几个种类:
1、处理器
作用是通过代入预定义等程序段将源程序补充完整。
2、前端
前端主要负责解析输入的源代码,由语法分析器和语
意分析器协同工作。语法分析器负责把源代码中的‘单词’找出来,语意分析器把这些分散的单词按预先定义好的语法组装成有意义的表达式,语句 ,函数等等。 例如“a = b + c;”前端语法分析器看到的是“a, =, b , +, c;”,语意分析器按定义的语法,先把他们组装成表达式“b + c”,再组装成“a = b + c”的语句。 前端还负责语义的检查,例如检测参与运算的变量是否是同一类型的,简单的错误处理。最终的结果常常是一个抽象的语法树,这样后端可以在此基础上进一步优化,处理。
3、后端
编译器后端主要负责分析,优化中间代码以及生成机器代码。
一般说来所有的编译器分析,优化,变型都可以分成两大类: 函数内还是函数之间进行。很明显,函数间的分析,优化更准确,但需要更长的时间来完成。
随着近两年各种智能手机、平板电脑、车载电子等各种消费品的蓬勃发展,ARM编译器体系结构的处理器,作为这些消费品的处理核心,也得到了长足的进步,甚至击败了Intel,在移动嵌入式领域独占鳌头。
亿道电子是国内最全面的开发工具提供商, 致力于将全球最先进的软件产品引荐给国内研发型企业使用,为企业提供研发、设计、管理过程中使用的各种软件工具,并致力于和客户一同提高研发、设计效率,缩短设计周期。亿道电子先后与ARM、Altium、Ansys、QT、TestPlant、CollabNet、Parasoft以及TouchGFX等多家全球知名公司建立战略合作伙伴关系,并成为他们在中国区的重要分销合作伙伴。简单讲,编译器就是将“一种语言(通常为高级语言)”翻译为“另一种语言(通常为低级语言)”的程序。一个现代编译器的主要工作流程:源代码 (source code) → 预处理器 (preprocessor) → 编译器 (compiler) → 目标代码 (object code) → 链接器 (Linker) → 可执行程序 (executables)
编译器可以生成用来在与编译器本身所在的计算机和操作系统(平台)相同的环境下运行的目标代码,这种编译器又叫做“本地”编译器。另外,编译器也可以生成用来在其它平台上运行的目标代码,这种编译器又叫做交叉编译器。交叉编译器在生成新的硬件平台时非常有用。“源码到源码编译器”是指用一种高级语言作为输入,输出也是高级语言的编译器。
编译器可分为以下几个种类:
1、处理器
作用是通过代入预定义等程序段将源程序补充完整。
2、前端
前端主要负责解析输入的源代码,由语法分析器和语
意分析器协同工作。语法分析器负责把源代码中的‘单词’找出来,语意分析器把这些分散的单词按预先定义好的语法组装成有意义的表达式,语句 ,函数等等。 例如“a = b + c;”前端语法分析器看到的是“a, =, b , +, c;”,语意分析器按定义的语法,先把他们组装成表达式“b + c”,再组装成“a = b + c”的语句。 前端还负责语义的检查,例如检测参与运算的变量是否是同一类型的,简单的错误处理。最终的结果常常是一个抽象的语法树,这样后端可以在此基础上进一步优化,处理。
3、后端
编译器后端主要负责分析,优化中间代码以及生成机器代码。
一般说来所有的编译器分析,优化,变型都可以分成两大类: 函数内还是函数之间进行。很明显,函数间的分析,优化更准确,但需要更长的时间来完成。
随着近两年各种智能手机、平板电脑、车载电子等各种消费品的蓬勃发展,ARM编译器体系结构的处理器,作为这些消费品的处理核心,也得到了长足的进步,甚至击败了Intel,在移动嵌入式领域独占鳌头。
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
参考链接:
编译器的工作过程:http://www.runoob.com/w3cnote/working-process-of-the-compiler.html
编译器介绍:https://blog.csdn.net/jia_guoqiang/article/details/79552054
编译器结构-百度百科:https://baike.baidu.com/item/%E7%BC%96%E8%AF%91%E5%99%A8%E7%BB%93%E6%9E%84/21506708