程序设计语言基础知识复习
(一) 程序設計語言基本概念
1、計算機硬件只識別機器指令序列,因此機器指令是最基本的計算機語言。機器語言設計程序效率很低,程序可讀性很差,很難修改和維護,因此,用符號代替0、1序列來表示機器指令。用符號表示的指令稱為匯編指令,匯編指令的集合稱為匯編語言。匯編語言和機器語言是低級語言。此基礎上,開發出功能更強、抽象級別更高的語言以支持程序設計,稱為高級語言。eg:JAVA、C、C++、PHP、Python、Delphi、PASCAL等。
2、計算機只能理解機器語言,因此高級程序設計語言需要翻譯,擔任這一任務的程序稱為“語言處理程序”。語言之間的翻譯形式有多種,基本方式為匯編、解釋和編譯。高級語言或匯編語言編寫的程序稱為源程序。匯編語言編寫的源程序需要一個匯編程序將其翻譯成目標程序后才能執行,高級語言編寫的源程序則需要對應的解釋程序(解釋器:直接解釋執行源程序或者將源程序翻譯成某種中間代碼后加以執行)或編譯程序(編譯器:將源程序翻譯成目標語言程序,然后在計算機上運行目標程序)對其進行翻譯,然后在機器上運行。
解釋程序與編譯程序的根本區別:編譯方式下,機器上運行的是與源程序等價的目標程序,源程序和編譯程序都不再參與目標程序的執行過程,解釋方式下,解釋程序和源程序要參與到程序的運行過程中,運行程序的控制權在解釋程序。簡單說:在解釋方式下,翻譯源程序時不生成獨立的目標程序,而編譯器則將源程序翻譯成獨立保存的目標程序。
3、程序設計語言的定義涉及語法(程序設計語言的基本符號組成程序中的各個語法成分的一組規則)、語義(按語法規則構成的各個語法成分的含義,可分為靜態語義和動態語義)和語用(表示構成語言的各個記號和使用者的關系)等方面。
4、根據設計程序的方法將程序語言分為:命令式和結構化程序設計語言(通常說的結構化程序設計語言屬于命令式語言類,其結構特性反映在以下幾點:1、用自頂向下逐步精化的方法編程 2、模塊組織的方法編程 3、程序只包含順序、判定(分支)及循環構造)、面向對象的程序設計語言(對象、類)、函數式程序設計語言(特點:表達式中出現的任何函數都可以用其他函數來代替,只要這些函數調用產生相同的值)和邏輯型程序設計語言(以形式邏輯為基礎)等范型。
5、程序設計語言的基本成分包括:數據、運算、控制和傳輸等。
數據成分指一種程序設計語言的數據類型,數據類型用于代表數據對象,還用于在基礎機器中完成對值的布局,同時可用于檢查表達式中對運算的應用是否正確。數據是程序操作的 對象,使用時要為它分配內存空間。數據名稱由用戶通過標識符 命名,類型 說明數據占用內存的大小和存放形式,存儲類型說明 數據在內存中的位置和生存期。 數據可分為:常量和變量、 全局量和局部量。數據類型有:基本類型(int、char、float、double、bool)、特殊類型(void)、用戶定義類型(enum)、構造類型(數組、結構、聯合)、指針類型(type*)和抽象數據類型(類類型)。
運算成分指明允許使用的運算符號及運算規則。
控制成分指明語言允許表達的控制結構,程序員使用控制成分 來構造程序中的控制邏輯。
傳輸成分指明語言允許的數據傳輸方式,如賦值處理、數據的輸入和輸出等。
6、函數
C程序有一個或多個函數組成,每個函數都有有個名字,有且僅有一個名字為mian的函數作為程序運行的起點。函數是程序模塊的主要成分,它是一段具有獨立功能的程序。函數使用涉及:函數定義、函數聲明和函數調用。
?函數定義包括:函數首部和函數體。C 程序中不允許函數的嵌套定義。
函數應該先聲明后引用。如果程序中對一個 函數的調用在該函數的定義之前進行,則應該在調用前對 被調用函數進行聲明。
調用函數需要使用被調用函數的功能時,以名字進行調用,稱為函數調用。函數體調用自己稱為遞歸調用。函數調用時實參與形參間交換信息的方法有值調用和引用調用。
(二) 語言處理程序基礎
語言處理程序主要將高級語言或匯編 語言編寫的程序翻譯成某種機器語言程序,使程序 可在計算機上運行。語言處理程序主要分為 匯編程序、編譯程序和解釋程序3種基本類型。
1、匯編程序
匯編語言是為特定的計算機設計的面向機器的符號化的 程序設計語言。匯編語言源程序需要匯編程序進行翻譯。匯編語言源程序由若干條語句組成, 其中有三類:指令語句(機器指令語句,匯編后能產生相應的機器代碼,可分為傳送指令、算數運算指令、邏輯運算指令、移位指令、轉移指令和處理機控制指令等類型)、偽指令語句(指示匯編程序在匯編源程序完成某些工作)和宏指令語句(用戶將多次重復使用的程序段定義為宏,每個宏有相應的宏名。宏指令語句就是宏的引用)。 ? ?偽指令語句匯編后不產生機器代碼,指令語句匯編后要產生相應的機器代碼。
匯編程序的功能是將匯編語言編寫的源程序翻譯成機器指令程序,處理源程序中出現的偽指令。 匯編程序一般需要兩次 兩次掃描源程序才能完成翻譯過程。
2、編譯程序
編譯程序把某高級語言書寫的源程序翻譯 成與之等價的目標程序。編譯程序的工作過程6個階段:詞法分析、語法分析、語義分析、中間代碼生成、代碼優化和目標代碼生成。
詞法分析:對源程序從前到后逐個 字符地掃描,從中識別出一個個單詞符號(程序設計語言的基本語法單位)。詞法分析輸出的單詞常以二元組的方式輸出, 即單詞種別和單詞自身的值。
語法分析:在詞法分析 的基礎上,根據語言的語法規則將單詞符號序列分解 成各類語法單位。語法 規則就是各類各種語法單位的構成規則。通過語法分析確定 整個輸入串是否構成一個語法上的正確的程序。
?語法分析和詞法分析本質上都是對源程序的結構進行分析。
語義分析:分析各語法結構的含義, 檢查源程序是否 包含靜態語義錯誤,并收集類型信息供后面的代碼生成階段使用。語法語義都正確的源程序才能翻譯成正確的目標代碼。
中間代碼生成:根據語義分析的輸出生成中間代碼。中間代碼特征:與具體的機器無關。
語義分析和中間代碼生成所依據的是語言的語義規則。
?代碼優化:中間代碼往往在時間和空間上有較大的浪費,當需要生成高效的目標代碼時,必須進行優化。優化過程可以在中間代碼生成階段 進行,也可以在目標代碼生成 階段進行。
目標代碼生成:這是編譯器的最后一個階段,任務是把中間代碼變換成特定機器上的絕對指令代碼、可重定位的指令代碼或 匯編指令代碼, 這一階段工作與具體的機器密切相關。
符號表管理:符號表作用是記錄源程序中各個符號的必要信息,以輔助語義的正確性檢查和代碼生成,在編譯過程中需要對符號表進行快速有效地查找、插入、修改和刪除等操作。
出錯處理:源程序錯誤大致可分為靜態錯誤和動態錯誤。動態錯誤也稱為動態語義錯誤,它們發生在程序運行。靜態錯誤指在編譯階段發現的 程序錯誤,可分為語法錯誤和靜態語義錯誤。
3、解釋程序
解釋程序是 另一種語言處理程序,在詞法、語法和語義分析方面與編譯程序的工作 原理基本相同,在是在運行用戶程序時,它直接執行源程序或源程序的中間表示形式。因此,解釋程序不產生源程序的目標程序,這是它和編譯程序的主要區別。
解釋程序實現高級語言的方式:源程序被直接解釋執行(解釋程序對源程序進行逐個字符的檢查,然后執行程序語句規定的動作。運行效率很低)、解釋程序也可將源程序翻譯成某種中間代碼形式,然后對中間代碼進行解釋來實現用戶程序的的運行。
解釋程序通常可以分為兩個部分:第一部分是分析部分,包括通常的詞法分析、詞法分析和語義分析程序, 經語義分析后把源程序翻譯成中間代碼,中間代碼常采用逆波蘭表示形式。第二部分是解釋部分,用來對第一部分產生的中間代碼進行解釋執行。
高級語言編譯與解釋方式的比較:(1)效率:編譯比解釋方式可能取得更高的效率。解釋方式下運行程序時,解釋程序可能需要反復掃描源程序;編譯方式下,雖然編譯程序創建的目標程序運行的時間一般更長,需要占用的存儲空間更多,但源程序只需要被編譯程序翻譯一次就可以運行,因此總體來講,編譯方式比解釋方式可能取得更高的效率(2)靈活性:由于解釋程序需要反復檢查源程序,使得解釋方式比編譯方式更靈活。且解釋器直接在源程序上工作時,它可以對 錯誤進行更精準的定位。(3)可移植性:解釋器一般也是用某種程序設計語言編寫的,因此只要對解釋器進行重新編譯,就可以使解釋器運行在不同的環境中。
總結
以上是生活随笔為你收集整理的程序设计语言基础知识复习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux驱动开发学习笔记十六:gpio
- 下一篇: 用友nc很慢跟java_大家觉得用友NC