高級程序設計語言概述
一、常用的高級程序設計語言
高級程序設計語言的優點
相對機器語言或匯編語言,高級程序設計語言更接近於數學語言和工程語言,更直觀、自然和易於理解
更容易驗證其正確性、改錯
編寫程序的效率更高
更容易移植
二、程序設計語言的定義
語法
程序本質上是一定字符集上的字符串
語法:一組規則,用它可以形成和產生一個合式(well-formed)的程序
詞法規則∶單詞符號的形成規則
◆單詞符號是語言中具有獨立意義的最基本結構
◆一般包括︰常數、標識符、基本字、算符、界符等
◆描述工具∶有限自動機
語法規則︰語法單位的形成規則
◆語法單位通常包括:表達式、語句、分程序、過程、函數、程序等
◆描述工具∶上下文無關文法
(第四條說明一個算術表達式外面加上括號構成的還是一個算術表達式)
語法規則和詞法規則定義了程序的形式結構
定義語法單位的意義屬於語義問題
語義
一組規則,用它可以定義一個程序的意義
描述方法
自然語言描述
◆二義性、隱藏錯誤和不完整性
形式描述
◆操作語義
◆指稱語義
◆代數語義
程序語言的基本功能和層次結構
程序,本質上說是描述一定數據的處理過程
程序語言的基本功能
描述數據和對數據的運算
程序語言成分的邏輯和實現意義
抽象的邏輯的意義
數學意義
計算機實現的意義
具體實現
(計算思維和數學思維不同,許多計算機上成立的規律,在計算機上未必成立,計算思維求解問題時,要考慮一定的物理現實,這在數學家看來,可能並不關心)
三、高級程序設計語言的一般特性
1.高級語言的分類
強制式語言(Imperative Language)/過程式語言
應用式語言(Applicative Language)
◆注重程序所表示的功能,而不是一個語句接一個語句地執行
◆LISP、ML
基於規則的語言(Rule-based Language)
◆檢查一定的條件,當它滿足值,則執行適當的動作
◆Prolog
面向對象語言(Object-Oriented Language)
◆封裝、繼承和多態性
2.程序結構
FORTRAN
◆—個程序由一個主程序段和若干輔程序段組成
◆輔程序段可以是子程序、函數段或數據塊
◆每個程序段由一系列的說明語句和執行語句組成,各段可以獨立編譯
◆模塊結構,沒有嵌套和遞歸
◆各程序段中的名字相互獨立,同一個標識符在不同的程序段中代表不同的名字
PASCAL
PASCAL程序本身可以看成是一個操作系統調用的過程,過程可以嵌套和遞歸
一個PASCAL過程
同一個標識符在不同過程中代表不同的名字
作用域:一個名字能被使用的區域范圍
名字作用域規則——"最近嵌套原則"
◆一個在子程序B1中說明的名字X只在B1中有效(局部於B1)
◆如果B2是B1的一個內層子程序且B2中對標識符X沒有新的說明,則原來的名字X在B2中仍然有效
◆如果B2對X重新作了說明那么,B2對X的任何引用都是指重新說明過的這個X
JAVA
面向對象的高級語言類( Class )
繼承(Inheritance)
3.數據結構與操作
數據類型通常包括三要素
用於區別這種類型數據對象的屬性
這種類型的數據對象可以具有的值
可以作用於這種類型的數據對象的操作
初等數據類型
數值類型
整型、實型、復數、雙精度
運算:+,-,*,/等
邏輯類型
true、false
布爾運算:∨,∧,┐等
字符類型:符號處理
指針類型
標識符與名字
標識符
以字母開頭的,由字母數字組成的字符串
名字
標識程序中的對象
名字的意義和屬性
值:單元中的內容
屬性:類型和作用域
名字的說明方式
由說明語句來明確規定的
int score
隱含說明
FORTRAN 以I,J,K,...N為首的名字代表整型,否則為實型
動態確定
走到哪里,是什么,算什么
標識符:以字母開頭的,由字母數字組成的字符串
標識符與名字兩者有本質區別
◆標識符是語法概念
◆名字有確切的意義和屬性
數據結構
數組
邏輯上,數組是由同一類型數據組成的某種n維矩形結構,沿着每一維的距離,稱為下標
數組可變與不可變:編譯時能否確定其存貯空間的大小
訪問:給出數組名和下標值,如A[10,i+ j]
存放方式:按行存放,按列存放
數組元素地址計算
設A為n維數組,按行存放,每個元素寬度為w
lowi為第i維的下界
upi為第i維的上界
ni為第i維可取值的個數(ni = upi -lowi+ 1),
base為A的第一個元素相對地址
內情向量
登記維數,各維的上、下限,首地址,以及數組(元素)的類型等信息
記錄
由已知類型的數據組合在一起的一種結構
記錄或者結構的元素,也叫做域(field)
訪問:復合名cards[k].name
存儲:連續存放
域的地址計算:相對於記錄結構起點的相對數OFFSET
字符串、表格、棧
字符串:符號處理、公式處理
表格:本質上是一種記錄結構
線性表:一組順序化的記錄結構
棧:一種線性表;后進先出,POP, PUSH
抽象數據類型
抽象數據類型(Abstract Data Type)A set of data values and associated operations that are precisely specified independent of any particular implementation.
抽象數據類型由數據集合、及其相關的操作組成,這些操作有明確的定義,而且定義不依賴於具體的實現。
一個抽象數據類型包括
◆數據對象集合
◆作用於這些數據對象的抽象運算的集合
◆這種類型對象的封裝,即,除了使用類型中所定義的運算外,用戶不能對這些對象進行操作
程序設計語言對抽象數據類型的支持
◆Ada通過程序包(package)提供了數據封裝的支持
◆Smalltalk、C++和Java通過類(Class)對抽象數據類型提供支持
4.語句與控制結構
表達式
表達式由運算量(也稱操作數,即數據引用或函數調用)和算符(運算符,操作符)組成
形式︰中綴、前綴、后綴
表達式形成規則:
變量(包括下標變量)、常數是表達式。
若E1、E2為表達式,0是一個二元算符,則E1θE2,是表達式。
若E是表達式,0為一元算符,則0E(或E0)是表達式。
若E是表達式,則(E)是表達式。
算符的優先次序
一般的規定
PASCAL:左結合A+B+C=(A+B)+C
FORTRAN:對於滿足左、右結合的算符可任取一種,如A+B+C就可以處理成(A+B)+C,也可以處理成A+(B+C)
代數性質
代數性質能引用到什么程度視具體的語言而定
在數學上成立的代數性質在計算機上未必完全成立
A+B = B+A
語句
賦值語句
◆A:= B
◆名字的左值︰該名字代表的存儲單元的地址
◆名字的右值︰該名字代表的存貯單元的內容
控制語句
◆無條件轉移語句 goto L
◆條件語句 if B then s if B then Si else S2
◆循環語句 while B do S repeat S until B for i:=E1 step E2 until E3, do S
◆過程調用語句 call P(X1,X2,... ,Xn)
◆返回語句 return (E)
語句的分類
功能
執行語句∶描述程序的動作
說明語句∶定義各種不同數據類型的變量或運算,定義名字的性質
形式
簡單句∶不包含其他語句成分的基本句
復合句:句中有句的語句