我们通常使用的编程语言(例如C)是高级语言(high-level language):
- 语义清晰,贴近自然语言(即人类使用的语言),易于理解,编程方便。
- 其程序无法被计算机理解和直接执行。
计算机使用机器语言(machine language):
- 机器语言程序本质上是一串0,1串,它可以被计算机理解并执行。
- 人类理解机器语言比较困难,因而直接使用机器语言编程是困难而效率低下的。
编译器的作用:高级语言只有被转换为机器语言之后才能被机器理解执行。而执行转换这一过程的是编译器。(在此过程中被转换的程序我们称之为源程序,其编译语言通常为高级语言,称为源语言(source language),而转换后的程序称为目标程序,其语言称为目标语言(target language))
解释程序:使用解释程序,对源程序逐个语句边解释边执行;
编译程序: 使用翻译程序,将源程序翻译成为低级语言目标程序,然后执行目标程序;
编译程序和解释程序最主要的区别:是否生成目标程序,运行时的存储分配;
高级语言程序的处理过程:需要预处理的源程序–>【预处理程序】–>源程序–>【编译程序】–>目标汇编程序–>【汇编程序】–>可在装配的机器代码–>【装配/连接-编译程序<–可在装配的目标文件】–>绝对机器代码。
- 词法分析:
根据语言的词法规则对源程序的字符进行扫描和分解,识别出一个个的单词(单词内部表示形式为二元式 “(class,value)” )。
(Class代表单词的类型(大致有5种类:界符(分隔符),保留字,标识符,算符(运算符),常量)。
- 语法分析:
根据语法规则对单词符号串进行扫描分解,识别出各类语法单位。
语法单位内部表示为语法树。
语义分析:
输入各类语法范畴;根据语言的语义规则,分析其含义,并进行初步翻译;产生中间代码。(中间代码用四元式表示(*,value1,T1,T2),Ti为语义分析程序为存放中间结果而生成的临时变量).
语义分析:
输入各类语法范畴;根据语言的语义规则,分析其含义,并进行初步翻译;产生中间代码。(中间代码用四元式表示(*,value1,T1,T2),Ti为语义分析程序为存放中间结果而生成的临时变量)
优化:
输入中间代码;进行等价变换;输出更高效的中间代码。(用以提高目标代码的时、空效率,也就是希望完成同样功能的程序,代码优化后比优化前运行的时间短,占用的存储空间少,有时二者不能同时达到,需根据实际情况取舍)。
目标代码生成:
输入优化后的中间代码;变换成特定机器上的低级语言代码,实现最后的翻译;产生目标代码(依赖与机器硬件系统;通常使用汇编语言作为目标程序的实现语言)
- /表格管理和错误处理:/