1. 程式人生 > >編譯原理第2講——高階程式設計語言概述

編譯原理第2講——高階程式設計語言概述

常用的高階程式設計語言

在這裡插入圖片描述 在這裡插入圖片描述

程式語言的定義

語法

程式本質上是一定字符集上的字串 語法:一組規則,用它可以形成和產生一個合式(well-formed)的程式

詞法規則:單詞符號的形成規則

  • 單詞符號是語言中具有獨立意義的最基本結構。
  • 一般包括:常數、識別符號、基本字、算符、界符等。
  • 描述工具:有限自動機。

語法規則:語法單位的形成規則

  • 語法單位通常包括:表示式、語句、分程式、過程、函式、程式等
  • 描述工具:上下文無關文法

E ----> i 一個算數表示式可以用識別符號構成 E ----> E+E 一個算數表示式可以由兩個子表示式通過加號連線而成 E ----> E*E 一個算數表示式可以有兩個子表示式通過星號 ‘*’ 連線構成

這裡將*唸作星號,表示是一個語法概念,念成乘號就變成了語義概念

E ----> (E) 一個算數表示式加上括號還是算數表示式

  • 語法規則和詞法規則定義了程式的形式結構
  • 定義語法單位的意義屬於語義問題

語義

語義:一組規則,用它可以定義一個程式的意義 描述方法

  • 自然語言描述:二義性、隱藏錯誤和不完整性
  • 形式描述

程式語言成分的邏輯和實現意義

抽象的邏輯意義 數學意義 計算機實現的意義 具體實現

高階程式設計語言的一般特性

高階語言的分類

  1. 強制式語言/過程式語言
  2. 應用式語言
  3. 基於規則的語言
  4. 面嚮物件語言

程式結構

FORTRAN

  • 一個程式由一個主程式段和若干輔程式段組成
  • 輔程式段可以是子程式、函式段或資料塊
  • 每個程式段由一系列的說明語句和執行語句組成,各段可以獨立辨析
  • 模組結構,沒有巢狀和遞迴
  • 各程式段相對獨立,命名

PASCAL

  • 程式本身可以看成是一個作業系統呼叫的過程,過程可以巢狀和遞迴
  • 一個PASCAL過程
  • 同一個識別符號在不同過程中代表不同的名字
  • 作用域:一個名字能被使用的區域範圍

最近巢狀原則 一個在子程式B1中說明的名字X只在B1中有效(區域性於B1)

如果B2是B1的一個內層子程式且B2中隊識別符號X沒有新的說明,則原來的名字X在B2中仍然有效 在這裡插入圖片描述 如果對B2對X重新作了說明,那麼B2對X的任何引用都是指重新定義的X

JAVA

  • 面向物件的高階語言

資料結構與操作

資料型別通常包括三要素

  • 用於區別這種型別資料物件的屬性
  • 這種型別的資料物件可以具有的
  • 可以用於這種資料物件的操作

初等資料型別

資料型別

  • 整型、實型、複數、雙精度
  • 運算:+ - * /

邏輯型別

  • true false
  • 布林型別

字元型別:符號處理

指標型別

陣列

邏輯上,陣列是由同一型別資料組成的某種n維矩形機構,沿著每一維的距離,稱為下標。

編譯時能否確定其存貯空間的大小分為可變/不可變陣列。

存放方式

  • 按行存放:C\PASCAL
  • 按列存放:FORTRAN

陣列元素地址計算

設A為n維陣列,按行存放,每個元素寬度為w

  • lowi為第i維下界
  • upi為第i維上界
  • ni為第i維可取值的個數(ni=upi-lowi+1)
  • base為A的第一個元素相對地址

元素A[I1,I2,…IK]相對地址公式 在這裡插入圖片描述 其中con為固定部分

內情向量

登記維數、各維的上下限,首地址,以及陣列元素的型別等資訊

記錄

由已知型別的資料組合在一起的一種結構 記錄或者結構的元素,也叫做域(field)

record{ 
	char name[20];
	integer age;
	bool married; 
}cards[1000]

訪問:複合名 儲存:連續存放 域的地址計算:相對於記錄結構七點的相對數OFFSET

字元、表格、棧

字串:符號處理、公式處理 表格:本質上是一種記錄結構 線性表:一組順序話的記錄結構 棧:一種線性表,後進先出

抽象資料型別(Abstract Data Type)

抽象資料型別由資料集合、及其相關的操作組成,這些操作有明確的定義,而且定義不依賴於具體的實現。

一個抽象資料型別包括

  1. 資料物件集合
  2. 作用於這些資料物件的抽象運算的集合
  3. 這種型別物件的封裝,即除了使用型別中所定義的運算外,使用者不能對這些物件進行操作

程式設計語言對抽象資料型別的支援

  • Ada通過程式包提供封裝機制來提供抽象支援
  • 面嚮物件語言通過類提供支援

語句與控制結構

表示式

  • 表示式由運算量(運算元,即資料引用或函式呼叫)和算符(運算子、操作符)組成。
  • 形勢:中綴、字首、字尾
  • 表示式形成規則 在這裡插入圖片描述

算符的優先次序

一般的規定

  • PASCAL:左結合 A+B+C=(A+B)+C
  • FORTRAN:對於滿足左右結合的算符可任取一種

代數性質

  • 代數性質能引用到什麼程度視具體的語言而定
  • 在數學上成立的代數性質在計算機上未必完全成立:A+B=B+A

語句

賦值語句:A:=B

  • 名字的左值:該名字代表的儲存單元的地址
  • 名字的右值:改名字代表的存貯單元的內容

控制語句

  • 無條件轉移語句 goto L
  • 條件語句 if then else
  • 迴圈語句
  • 過程呼叫語句
  • 返回語句 return

語句的分類

  • 執行語句:描述程式的動作
  • 說明語句:定義各種不同資料型別的變數或運算,定義名字的性質
  • 簡單句:不包含其它語句成分的基本句
  • 複合句:句中有句的語句

識別符號與名字

識別符號

  • 以字元開頭的,由字元數字組成的字串

名字

  • 標識程式中的物件
  • 由識別符號和資料物件繫結而成(binding)

名字的意義和屬性

  • 值:單元中的內容
  • 屬性:型別和作用域

名字的說明方式

  • 由說明語句來明確規定的:int a、
  • 隱含說明:FORTRAN
  • 動態確定:走到那裡,是什麼,算什麼

名字的繫結(binding)可以發生在編譯過程或者執行過程中 靜態繫結:變數宣告、型別定義、函式的定義 動態繫結:多型性、虛擬函式