在编译器设计中,过程式语言和非过程式语言有什么区别?
过程式语言
过程式语言是命令驱动型或语句导向型语言。程序包含一系列语句,每个语句的执行都会导致解释器修改其内存中一个或多个区域的值,从而进入新的状态。
过程式语言的格式为
statement1;
statement2;
C、Pascal、FORTRAN 及类似语言都是过程式语言。语言中的每个语句都指示计算机执行某些操作。过程式语言中的程序是一系列指令的列表。对于非常小的程序,不需要其他组织原则。此类语言包含一系列在被调用时执行的过程。每个过程都包含一系列语句,其中每个语句都操作数据,这些数据可以是过程的局部数据,如果来自调用过程则为参数,或者在全局范围内定义。
非过程式语言
在非过程式语言中,并非所有指令都以确定的顺序编写。它被称为声明式和函数式语言。非过程式语言不需要编写传统的程序逻辑。用户专注于描述输入和输出,而不是程序的步骤。非过程式语言的示例,如 Java、C++、SQL、RGP 等。
过程式语言 | 非过程式语言 |
---|---|
过程式语言是命令驱动型或语句导向型的。 | 非过程式语言是面向事实的。 |
过程式语言中的程序指定程序要完成什么,并指示计算机如何准确地完成评估。 | 非过程式语言中的程序指定要做什么,但没有说明如何准确地评估结果。 |
过程式语言用于应用程序和系统编程。 | 非过程式语言用于 RDBMS、专家系统、自然语言处理和教育。 |
它很复杂。 | 它比过程式语言更简单。 |
这些是命令式编程语言。 | 这些是声明式编程语言。 |
会考虑文本上下文或执行顺序。 | 无需考虑文本上下文或执行顺序。 |
例如,排序是通过在 C++ 程序中定义某个排序算法的所有元素来完成的,这些元素传递给具有 C++ 编译器的计算机。计算机在将 C++ 程序翻译成机器码或某种解释性中间代码后,会遵循这些指令并生成排序列表。 | 在非过程式语言中,只需要定义排序列表的特征。根据此描述,非过程式语言系统可以生成排序列表。 |
机器效率良好。 | 仅使用解析的逻辑程序面临严重的机器效率问题。 |
如果存在许多函数和许多全局数据项,则过程式范式会导致函数和数据之间大量可能的网络。 | 非过程式范式中不存在此类连接。 |
过程式语言的示例包括 C、ADA、Pascal、C++ 等。 | 非过程式语言的示例包括 Prolog、USP、SQL Scheme 等。 |
广告