编译器将原始程序作为输入,翻译产生目标语言的等价程序。原始程序一般为高级语言编写,一个现代的编译器的主要工作流程如下:源代码→预处理器→编译器→汇编程序→目标代码→链接器→可执行文件[1]。其中编译器的主要工作包括词法分析、语法分析、语义分析、和目标代码的生成。
如同不同的程序设计语言一样,也存在着各种各样的编译程序,根据用途或侧重面,大致可以把编译程序分成如下几类[2]:
诊断型编译程序:此类编译程序专门设计用来帮助开发人员开发与调试程序,诊断程序只在程序开发的初始阶段使用,当程序已接近完成或完成时,其相应目标程序中不应该再包含诊断用代码。
优化型编译程序:此类编译程序专门设计出来产生高功效的机器代码,其代价是增加编译程序复杂性和编译时间。功效指时空功效,即期望目标程序占用的存储空间少,而运行时间短。
可重定目标编译程序:通常一个编译程序是为一个特定的程序设计语言和一种特定的目标计算机而设计的,从源程序编译生成的目标程序只能在某种特定计算机上运行,而另一种架构的机器无法运行,可重定目标型编译程序是易移植的编译程序。
交叉型编译程序:编译程序在一种型号计算机上运行,却生成另外一种型号计算机运行的目标程序。
增量型编译程序:增量型编译程序发现源程序错误时,仅从源程序错误修改附近的正文开始重新编译。
应用并行技术的编译程序:此编译程序能够处理并行和通信成分,实现共享变量、消息传递和同步等。
1.2 关于程序设计语言
在计算机领域里,程序是指一系列指令或语句,它规定了依次要进行的一系列工作,由计算机执行特定的指令或语句序列以获得某种预期的效果。程序设计语言是用来书写计算机程序的语言,它可以是与具体计算机特性紧密相关的低级语言,如各种特定计算机的机器语言与汇编语言,也可以是接近日常用语与数学表示法的高级语言。用户可以根据应用领域实际问题的特定情况,选择合适的程序设计语言,如用于工程计算的Fortran,用于教学和科学计算的Pascal,用于开发系统或嵌入式产品的C,等等。
一般程序语言的定义涉及语法、语义、语用、和语境四个方面[2]:源'自:优尔:"论-文'网www.youerw.com
语法:语法是指如何由程序设计语言基本符号组成程序中各个语法成分(包括程序)的一组规则,其中由符号(单词)构成语法成分的规则为一般的语法规则,而由基本符号构成符号(单词)的书写规则称为词法规则。语法规则可用形式的方式描述,也可用语法图这样的非形式的方式描述,甚至口语方式描述。
语义:语义是程序设计语言中按语法规则所构成的各个语法成分的意义。一个程序执行的效果说明了该程序的含义,也就是程序的语义。程序的语义取决于相应程序设计语言各种语法成分的语义定义,即取决于程序设计语言的语义。语义又分为静态语义和动态语义,静态语义指编译时刻可确定的语法成分的含义;运行时刻才能理解与确定的含义称动态语义。语义通常用非形式的口语方式来定义。
语用:语用表示语言符号及其使用者之间的关系,设计符号的来源、使用和影响。对于程序设计语言,语用表示程序和使用者之间的关系。在程序中往往用注解形式解释某些变量的物理意义与用途等。
语境:语境是指理解与实现程序设计语言的环境,这种环境包括编译环境和运行环境。