更新时间:2022年11月30日14时55分 来源:传智教育 浏览次数:
高级语言被广泛应用于众多领域,但使用高级语言编写的程序无法被计算机识别与执行。在执行之前需要先将高级语言代码翻译成机器语言代码。根据不同的翻译方式,执行分为编译执行和解释执行两种。
编译执行是指通过编译程序(也称为编译器)将源代码(source code)一次性编译成目标程序(objectcode),再由计算机运行目标程序的过程,其中源代码指由高级语言编写的代码。编译执行过程如图1所示。
图1 编译执行
图1中的“执行”指计算机运行程序的一次过程,其中编译器内部的执行过程大致可分为以下5个阶段。
(1)词法分析。词法分析程序逐个读取源代码中的字符产生助记符表,例如逐个读取的5个字符w、h、il、e会被作为助记符 while放人助记符表,x、a等无法串成字符串的字符也会被视为由单个字符构成的助记符放人助记符表。词法分析完成后,源程序由单个字符组成的字符串转换成由助记符串联而成的符号串。
(2)语法分析。语法分析程序以词法分析程序生成的单词符号串作为输人,分析单词符号串是否能够形成指令。例如num、=、5这3个助记符经语法分析后构成赋值语句“num=5。
(3)语义检查和中间代码生成。语义分析程序对语法分析程序生成的语句进行检查,确保语句不存在二义性,之后生成中间代码。中间代码也称为中间语言,是源程序在计算机内部的一种表现形式,其作用是帮助编译程序优化代码、产生目标代码常用的中间语言有逆波兰记号、四元式、三元式和树。
(4)代码优化。代码优化是指对程序进行多种等价变换,在不改变程序运行结果的前提下提升代码运行效率、降低代码所占空间。经优化后的代码更易于生成有效的目标代码。
(5)目标代码生成。目标代码生成程序将经语法分析或优化后的中间代码转换成目标代码并存储在计算机中。大多数编译程序直接生成由机器语言编写的目标代码但也有编译程序先生成汇编语言代码,再调用汇编程序将汇编语言代码翻译成机器语言编写的目标代码。
简而言之,编译即编译器读取源代码至生成目标程序的过程。
编译执行方式的特点是:一次解释,多次执行。源程序经编译后不再需要编译器和源代码,目标程序可以在同类型操作系统中自由使用。编译过程只执行一次。相比编译速度,更重要的是编译后生成的目标代码的执行效率。因此编译器一般会集成尽可能多的优化技术,以提高目标代码的性能。
解释执行(interpreter)与编译执行主要的区别是翻译时的解释程序不产生目代码,且解释器在翻译源代码的同时执行中间代码。解释执行过程如图 2所示。
图2 解释器执行过程
解释器在读入源程序时会先调用语言分析程序进行词法分析和部分语法检查,建立助记符表,将源程序字符串转换为中间代码;再调用解释执行程序进行语法检查并逐条解释执行中间代码。简而言之,解释器逐条读取源程序中的语句并翻译,同时逐条执行翻译好的代码。
解释执行的特点是:边解释,边执行。解释器中通常不会集成过多优化技术,以免解释过程过多耗费时间,影响程序的执行速度。与编译执行相比,解释执行主要具有以下优点。
(1)保留源代码,程序维护和纠错比较方便。
(2)可移植性好,只要存在解释器,源代码可以在任意系统上运行。
根据不同的翻译执行方式,高级语言被分为静态语言和脚本语言两类。静态语言采用编译执行方式,常见的静态语言有 C、Java等;脚本语言采用解释执行方式,常见的脚本语言有JavaScript、PHP等。