第3章-程序設計語言課件_第1頁
第3章-程序設計語言課件_第2頁
第3章-程序設計語言課件_第3頁
第3章-程序設計語言課件_第4頁
第3章-程序設計語言課件_第5頁
已閱讀5頁,還剩39頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第3章

程序設計語言學習目標了解計算機程序設計語言、編譯原理的基本知識。掌握程序的概念、高級語言程序設計的基本內容。第3章

程序設計語言3.1程序設計語言概述

3.1.1程序的概念

程序就是能夠實現特定功能的一組指令序列的集合。其中,指令可以是機器指令、匯編語言指令,也可以是高級語言的語句命令,甚至還可以是用自然語言描述的運算、操作命令等。3.1.2計算機程序設計語言

程序設計語言使得人們能夠與計算機進行交流,其種類非常繁多,總來說可以分為低級語言和高級語言兩大類。低級語言

低級語言包括兩種類型:機器語言和匯編語言。

(1)機器語言機器語言面向機器,可由CPU直接識別和執(zhí)行。不同的機器能夠識別的機器語言是不相同的。機器指令都是用一串0、1構成的二進制位串來表示的,也稱為機器碼。用機器指令編寫的程序稱為機器語言程序,或稱為目標程序,這是計算機能夠直接執(zhí)行的程序。缺點:機器語言難以閱讀和理解,編寫和修改都比較困難,

而且通用性較差。3.1.2計算機程序設計語言(2)匯編語言匯編指令是由英文單詞或其縮寫符號表示的指令。也稱為符號指令或助記符,比機器指令便于記憶、閱讀和理解。大多數情況下,一條匯編指令直接對應一條機器指令,少數對應幾條機器指令。匯編語言,也稱符號語言,它使用字母、數字和英文單詞或其縮寫符號來替代由0、1構成的指令操作碼、寄存器、數據和地址等信息,這樣編寫出來的程序就稱為符號語言程序或匯編語言程序。3.1.2計算機程序設計語言匯編與匯編程序計算機無法“識別”和“執(zhí)行”匯編語言,因而需要能將用匯編語言編寫的程序“翻譯”成機器語言的特殊程序。這種特殊程序稱為匯編語言翻譯程序、匯編程序或匯編器。程序員手工編寫的程序統(tǒng)稱為源程序,用匯編語言編寫的源程序稱為匯編語言源程序,匯編程序將源程序翻譯得到的機器語言程序稱為目標程序,翻譯的過程稱為匯編。3.1.2計算機程序設計語言反匯編程序用于將目標代碼程序轉換成相應的匯編語言源程序,這一過程稱為反匯編。反匯編主要用于識別源程序代碼,常用的調試工具程序DEBUG就提供了反匯編功能。3.1.2計算機程序設計語言低級語言的特點

都與特定的計算機硬件系統(tǒng)緊密相關,來自于特定系統(tǒng)的指令系統(tǒng),可移植性差。對程序員專業(yè)知識要求高,要求對計算機硬件的結構和工作原理非常熟悉。每條指令的功能比較單一,程序員編寫源程序時指令非常繁瑣。由于直接針對特定硬件編程,所以最終的可執(zhí)行代碼非常精煉,并且執(zhí)行效率高。

兩者主要的區(qū)別在于:機器語言編寫的程序無需翻譯或編譯,CPU能夠直接識別和執(zhí)行。而匯編語言源程序必須經過匯編才能得到目標程序。3.1.2計算機程序設計語言高級語言(1)高級語言的產生一個問題:如何解決程序的可移植性,即:程序員編寫的源程序如何可以從一臺計算機很容易地轉到另一臺計算機上工作。所謂高級語言是一種由表達各種意義的“詞”和“公式”,按照一定的“語法規(guī)則”來編寫程序的語言,又稱為程序設計語言或算法語言。高級語言之所以“高級”,就是因為它使程序員可以完全不用與計算機的硬件打交道,可以不必了解機器的指令系統(tǒng)。

3.1.2計算機程序設計語言(2)高級語言的常見類型FORTRAN語言BASIC語言COBOL語言PASCAL語言C語言C++和C#語言其他高級語言基于視窗類操作系統(tǒng)的,如VisualBasic、VisualC++、Delphi、PowerBuilder、Java等3.1.2計算機程序設計語言高級語言的優(yōu)點:語句的功能強,程序員編寫的源程序比較短,容易學習,使用方便,可移植性較好,便于推廣和交流。高級語言的缺點:編譯程序比匯編程序復雜,而且編譯出來的目標程序往往效率不高,長度和運行時間都較長。因此,在很多對時間要求比較高的系統(tǒng),如某些實時控制系統(tǒng)或者大型計算機控制系統(tǒng)中,低級語言(主要是匯編語言)仍然得到了一定的應用。3.1.2計算機程序設計語言3.1.3高級語言程序設計的基本內容高級語言程序設計依賴于各自特定的語句和語法。語句是構成源程序的基本單位。語法是指管理語言結構和語句的一組規(guī)則。1.高級語言的基本符號

高級語言的語法成分都是由基本符號組成的,分為單字符和多字符兩種。單字符基本符號由單個字符組成。字母:英文字母A~Z、a~z,共52個符號。數字:0~9,共10個數字符號。

特殊字符:+、-、*、/、^、=、(、)、>、<、,、空格等。

多字符基本符號由兩個或兩個以上的字符組成,如:GOTO(轉移)、<=(小于或等于)、AND(與)等。3.1.3高級語言程序設計的基本內容2.高級語言的基本元素

基本元素由基本符號組成,可分為數、邏輯值、名字、標號和字符串等5大類:數:由0~9共10個基本數字和其他一些符號(如小數點“.”、正負號“+、-”及指數符號“E”等所構成。邏輯值:由真(True)和假(False)兩個值構成。3.1.3高級語言程序設計的基本內容

名字

由字符組成,一般約定名字的開頭是字母或者下劃線,其后可為字母或數字,如XYZ、A123、_C等。名字可用來定義常量、變量、函數、過程或子程序的名字,故也稱為標識符。標號是在高級語言中的程序語句前所加的一個名字,主要用來指示程序可能的轉移方向。字符串

由一串字符所組成。字符串中的多個字符常放在一對單引號或雙引號中,作為常量來使用。3.1.3高級語言程序設計的基本內容3.基本的數據類型通常,一種高級語言都會定義一些基本的數據類型,通常包括整數類型、實數類型和字符類型等。高級語言中,在使用變量前,必須為每個變量分配所需的內存單元空間。因此,幾乎任何一種高級語言都要求變量必須先定義后使用。定義變量實質上就是根據變量的類型來為其分配一定大小的空間,并可通過變量名找到該空間的起始地址。3.1.3高級語言程序設計的基本內容4.結構數據類型

結構數據類型是在基本數據類型的基礎上構造出來的數據類型。如數組、結構體、枚舉、集合、隊列和堆棧等:數組類型

數組是若干個相同類型數據的集合。如:inta[10];用戶自定義的結構體類型。

結構體是隸屬于同一個事物的多個不同類型數據的集合,用來表示具有若干個屬性的一個事物。3.1.3高級語言程序設計的基本內容StructStudent{intSno;charSname[20];charSex[2];intAge;};5.運算符與表達式

高級語言的表達式由基本符號、基本元素和各種數據通過運算符連接而成,運算符大致包括以下幾類:邏輯運算:與、或、非、異或等。算術運算:加、減、乘、除、取模等。數據比較:大于、小于、等于、不等于等。數據傳送:輸入、輸出、賦值等。

通過各種運算符連接而得到的表達式有以下幾種:算術表達式:表達式的運算結果是數值。關系運算表達式:表達式的運算結果是邏輯值。字符串表達式:表達式的運算結果是字符串。3.1.3高級語言程序設計的基本內容6.語句語句是構成高級語言源程序的基本單位,是由基本元素、運算符、表達式等組成。任何一種高級語言往往都支持賦值、條件判斷、循環(huán)、輸入輸出等語句。程序員利用這些語句的結合,能夠很方便地編制出功能強大的程序。3.1.3高級語言程序設計的基本內容7.庫函數和用戶自定義的函數為了支持用戶編寫出功能強大的源程序,幾乎所有的高級語言都為用戶提供了豐富的庫函數,這些庫函數能夠實現某些特定的功能,比如數學函數。在源程序中,用戶也可以自己定義自己的函數(子程序或過程),以便以后可以反復調用這些代碼集合。3.1.3高級語言程序設計的基本內容

8.注釋任何一種程序設計語言都強調注釋的重要性。在源程序中添加必要的注釋不僅有助于閱讀程序,更重要的是在修改程序時,可以幫助程序員理解原始程序。3.1.3高級語言程序設計的基本內容9.程序設計風格(詳見4.2.4節(jié))養(yǎng)成良好的編程習慣,有助于提高程序的正確性、可讀性、可維護性和可用性。

10.高級語言程序的運行

使用高級語言編寫程序的一般過程可以歸納為以下幾個步驟:使用文本編輯工具,逐條編寫源程序的語句。保存源程序的文件時,文件的后綴名與所用的高級語言有關。編譯源程序文件,生成目標文件,文件后綴名通常為obj。鏈接目標文件,生成可執(zhí)行文件,文件后綴名通常為exe。在計算機上運行可執(zhí)行程序,并進行調試和維護3.1.3高級語言程序設計的基本內容3.1.4高級語言的數據表示手段1.常量常量也稱常數,是一種恒定的、不隨時間改變的數值或數據項。2.變量變量是指在程序的運行過程中可以發(fā)生改變的量,是程序中數據的臨時存放場所。3.數據類型用來約束數據的解釋。4.表達式表達式是操作符、操作數和標點符號組成的序列,其目的是用來說明一個計算過程。3.2聲明和類型1.聲明聲明用于說明每個標識符的含義,而不必為每個標識符預留存儲空間。預留存儲空間的聲明稱為定義。2.類型類型檢查是利用一組邏輯規(guī)則來推理一個程序在運行時刻的行為。3.3類型系統(tǒng)

類型系統(tǒng)用于定義如何將程序語言中的數值和表達式歸類為許多不同的類型、如何操作這些類型、這些類型如何互相作用。類型系統(tǒng)提供的主要功能如下:

安全性。

最佳化。

可讀性。

抽象化。3.4編譯原理

3.4.1編譯程序概述高級語言編寫的源程序需要“翻譯”成計算機能夠識別的機器語言,機器才能執(zhí)行,這種“翻譯”程序被稱為語言處理程序。將高級語言編寫的源程序翻譯為機器語言程序的方式有解釋和編譯。(1)解釋解釋程序在處理源程序時,執(zhí)行方式類似于日常生活中的“同聲翻譯”。解釋一句、執(zhí)行一句,立即產生運行結果。解釋程序不產生目標代碼,不能脫離其語言環(huán)境獨立執(zhí)行。解釋程序對源程序的解釋執(zhí)行比編譯程序產生的目標代碼程序的執(zhí)行速度要慢。3.4編譯程序概述(2)編譯編譯程序是把高級語言程序(源程序)作為一個整體來處理,首先將程序源代碼“翻譯”成目標代碼(機器語言),編譯后與系統(tǒng)提供的代碼庫鏈接,形成—個完整的可執(zhí)行的機器語言程序(目標程序代碼)。目標程序可以脫離其語言環(huán)境獨立執(zhí)行,使用比較方便、效率較高。相應地,由于每次執(zhí)行之前必須通過編譯得到可執(zhí)行程序,所以,可執(zhí)行程序一旦需要修改,必須先修改源代碼,再重新編譯生成新的目標文件(*.obj)才能執(zhí)行。3.4編譯程序概述

編譯程序的功能如圖所示:3.4編譯程序概述

編譯程序的工作過程

如圖:3.4編譯程序概述3.4.2詞法分析其任務是從左到右一個字符、一個字符地對源程序進行掃描,讀入源程序,對構成源程序的字符流進行掃描和分解,通過詞法分析從而識別出一個個單詞(指邏輯上緊密相連的一組字符)。

例1對表達式:position:=initial+rate*100;進行詞法分析,得到以下結果:

單詞類型

單詞值標識符1(id1) position

算符(賦值) :=

標識符2(id2) initial

算符(加) +

標識符3(id3) rate

算符(乘) *

整數 100

分號 ;3.4.2詞法分析3.4.3語法分析

語法分析是編譯過程的第二個階段,任務是在詞法分析的基礎上將單詞序列分解成各類語法短語,如“程序”、“語句”、“表達式”等等。一般這種語法短語也稱為語法單位。例2對語句:position:=initial+rate*100;進行語法分析。需要用到的語法規(guī)則:<賦值語句>::=<標識符>“:=”<表達式>;<表達式>::=<表達式>“+”<表達式>

<表達式>::=<表達式>“*”<表達式>

<表達式>::=“(”<表達式>“)”

<表達式>::=<標識符>

<表達式>::=<整數>

<表達式>::=<實數>3.4.3語法分析依據源程序的語法規(guī)則把源程序的單詞序列組成語法短語(表示成語法樹),見圖:3.4.3語法分析position:=initial+rate*100;;把id1:=id2+id3*N轉換成語法樹見圖:3.4.3語法分析position:=initial+rate*100;3.4.4語義處理

在詞法分析程序和語法分析程序對源程序的語法結構進行分析之后,一般要由語法分析程序調用相應的語義子程序進行語義處理。編譯過程中的語義處理實現兩個功能:審查每個語法結構的靜態(tài)語義,即驗證語法結構合法的程序是否真正有意義,有時把這個工作稱為靜態(tài)語義分析或靜態(tài)審查。如果靜態(tài)語義正確,則語義處理要執(zhí)行真正的翻譯,要么生成程序的一種中間表示形式(中間代碼),要么生成實際的目標代碼。例3對表達式:position:=initial+rate*100;作語義處理。Programp();Varrate:real;Varinitial:real;Varposition:real;…position:=initial+rate*100;3.4.4語義處理進行類型審查語義分析階段審查源程序有無語義錯誤,為代碼生成階段收集類型信息。比如語義分析的一個工作是進行類型審查,審查每個算符是否具有語言規(guī)范允許的運算對象,當不符合語言規(guī)范時,編譯程序亦報告錯誤。如有的編譯程序要對實數用作數組下標的情況報告錯誤。又比如某些語言規(guī)定運算對象可被強制,那么當二目運算施于整型和實型時,編譯程序應將整型轉換成實型而不能認為是源程序的錯誤。3.4.4語義處理3.4.5中間代碼生成所謂“中間代碼”是一種結構簡單、含義明確的記號系統(tǒng),其復雜性介于源程序語言和機器語言。中間代碼生成不是編譯過程的必需階段,但采用中間代碼可將與機器相關的某些實現細節(jié)置于目標代碼生成階段處理,并且可對中間代碼進行優(yōu)化,從而最終提高目標代碼的質量。采用三地址指令表示t2:=id3*t1,會得到以下的結果:(*id3t1t2)表達式id1:=id2+id3*100按照三地址指令生成中間代碼:(1)(inttoreal 100 - t1)(2)(* id3 t1 t2)(3)(+ id2 t2 t3)(4)(:= t3 - id1)3.4.5中間代碼生成3.4.6中間代碼優(yōu)化中間代碼優(yōu)化的任務是對中間代碼進行變換或進行改造,目的是使生成的目標代碼更為高效,即節(jié)省時間和空間。常用的優(yōu)化技術有刪除多余運算、強度削弱、變換循環(huán)控制條件、合并已知量與復寫傳播、刪除無用賦值等。3.4.5節(jié)的中間

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論