一、程序设计语言与编译
计算机程序设计语言可以简单分类为:高级语言(类似于数学形式或者自然语言的简洁形式)、汇编语言(引入助记符和机器语言(可以被计算机直接理解)。
举个例子,让x等于2用这三种语言来表示的话就是:
-
高级语言:x = 2
-
汇编语言:MOV x,2
-
机器语言:C706 0000 0002
而把高级语言翻译成汇编语言或机器语言,就是编译
二、编译的大致流程
我们来看一个人工英汉翻译的例子
-
词法分析,翻译的第一步是分析源语言,各个单词的词性
-
语法分析,分析句子中各个部分的语法成分
-
语义分析,机器会生成一个中间表示,来表明句子的语义
而在二进制的世界中,编译这件事会略微复杂一点,但大体结构类似翻译。
第一步:词法分析,机器会识别源程序中各个类型符号(从左往右),然后转换成词法单元(token)的形式
举个例子:
sum=(10+20)*(num+square);
经过词法分析后,得:
具体单词类型和种别码的关系,如下图
第二步:语法分析,在上一步输出的token序列中识别出各类短语,并且构造语法分析树
第三步:语义分析,一般和语法分析同时进行,也称为语法制导翻译,他的任务是对结构上正确的源程序进行上下文有关性质的审查。
第四步:生成中间代码,一种结构简单、含义明确的记号系统,便于翻译为目标代码
还是那个例子:
sum=(10+20)*(num+square);
它的中间代码可以是以下几种:
第五步:目标代码的生成,也就是将中间代码转换为目标机上的机器指令代码或者汇编代码