在編譯器設計中,過程式語言和非過程式語言有什麼區別?
過程式語言
過程式語言是命令驅動型或語句導向型語言。程式包含一系列語句,每個語句的執行都會導致直譯器修改其記憶體中一個或多個區域的值,從而進入新的狀態。
過程式語言的格式為
statement1;
statement2;
C、Pascal、FORTRAN 及類似語言都是過程式語言。語言中的每個語句都指示計算機執行某些操作。過程式語言中的程式是一系列指令的列表。對於非常小的程式,不需要其他組織原則。此類語言包含一系列在被呼叫時執行的過程。每個過程都包含一系列語句,其中每個語句都操作資料,這些資料可以是過程的區域性資料,如果來自呼叫過程則為引數,或者在全域性範圍內定義。
非過程式語言
在非過程式語言中,並非所有指令都以確定的順序編寫。它被稱為宣告式和函式式語言。非過程式語言不需要編寫傳統的程式邏輯。使用者專注於描述輸入和輸出,而不是程式的步驟。非過程式語言的示例,如 Java、C++、SQL、RGP 等。
過程式語言 | 非過程式語言 |
---|---|
過程式語言是命令驅動型或語句導向型的。 | 非過程式語言是面向事實的。 |
過程式語言中的程式指定程式要完成什麼,並指示計算機如何準確地完成評估。 | 非過程式語言中的程式指定要做什麼,但沒有說明如何準確地評估結果。 |
過程式語言用於應用程式和系統程式設計。 | 非過程式語言用於 RDBMS、專家系統、自然語言處理和教育。 |
它很複雜。 | 它比過程式語言更簡單。 |
這些是指令式程式設計語言。 | 這些是宣告式程式語言。 |
會考慮文字上下文或執行順序。 | 無需考慮文字上下文或執行順序。 |
例如,排序是透過在 C++ 程式中定義某個排序演算法的所有元素來完成的,這些元素傳遞給具有 C++ 編譯器的計算機。計算機在將 C++ 程式翻譯成機器碼或某種解釋性中間程式碼後,會遵循這些指令並生成排序列表。 | 在非過程式語言中,只需要定義排序列表的特徵。根據此描述,非過程式語言系統可以生成排序列表。 |
機器效率良好。 | 僅使用解析的邏輯程式面臨嚴重的機器效率問題。 |
如果存在許多函式和許多全域性資料項,則過程式正規化會導致函式和資料之間大量可能的網路。 | 非過程式正規化中不存在此類連線。 |
過程式語言的示例包括 C、ADA、Pascal、C++ 等。 | 非過程式語言的示例包括 Prolog、USP、SQL Scheme 等。 |
廣告