? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?一、概述
1、匯編、編譯、解釋系統的基礎知識和基本工作原理。
2、程序設計語言的基本成分:數據、運算、控制和傳輸,程序調用的實現機制。
3、各類程序設計語言的主要特點和適用情況:過程式程序語言、面向對象程序設計語言、函數式程序設計語言、邏輯程序設計語言的基本特點、腳本語言的特點。
? ? ? ? ? ? ? ? ? 二、匯編、編譯、解釋系統基礎
1. 解釋與編譯
? ? ?在計算機中,使用高級語言開發的程序都是不能直接運行的。需要經過一系列的處理,才能運行。這個過程,根據其處理方式的不同,可分為:解釋型和編譯型。
解釋型:接受所輸入的用程序語言編寫的源程序,然后直接解釋執行;這類語言中的最典型代表是BASIC.??
編譯型:它是將用某種程序語言編寫的源程序直接翻譯成為另一種語言(目標語言程序),而且兩者在邏輯上等價。如:C語言。
2. 編譯過程
所謂編譯過程,就是使用編譯程序將高級語言源程序翻譯為等價的機器語言程序的過程。一般來說,編譯程序分為以下幾個部分:詞法分析、語法分析、語義分析、中間代碼生成、代碼優化、目標代碼生成以及貫穿始終的表格管理與出錯處理。各部分之間的關系如圖3-2所示。
詞法分析:從左到右逐字符讀入源程序,識別出一個個單詞符號;它是根據語言的詞法規則(單詞結構規則)進行的。本節第4部分對詞法分析進行了詳細介紹。
語法分析:在詞法分析的基礎上將單詞符號序列分解成各類,諸如"程序"、"語句"、"表達式"等
語法單位。
語義分析:審查源程序有無語義錯誤,為代碼生成階段收集類型信息。
中間代碼生成:在語法分析過程中,隨著分析的進展,一條產生式獲得匹配或用于歸約時,根據這條產生式所對應的語義子程序進行翻譯的方法稱為語法制導翻譯。通過翻譯后,將生成中間代碼。不同的高級程序語言可能生成同樣的中間代碼。編譯程序使用的中間代碼通常有逆波蘭、三元式、四元式和樹形四種表示法。
代碼優化:代碼優化是對程序進行等價變換,使其生成更有效(運行時間更短、占用空間更小)的目標代碼。根據優化所涉及的程序范圍,可以分為局部優化、循環優化和全局優化三個不同的級別。
目標代碼生成:目標代碼生成是把經過語法分析或優化后的中間代碼作為輸入,將其轉換成特定機器的機器語言或匯編語言代碼作為輸出,這樣的轉換程序稱為代碼生成器。
3. 形式語言基本知識
抽象地說,語言是按照一定規則排列的符號和集合。要形式化地描述一個語言,就需要借助以下一些基本概念。
字母表∑ :非空的有窮集合,例如 ∑ = {a,b}.
字符串:由∑ 的符號組成的有窮序列叫做字母表∑ 上的字符串。其中包含的字符數,稱為長度。記做|字符串名|.長度為0的為空串,記做e.要注意的是,e中包括一個元素!而 ?才是沒有元素的空串。
形式語言: 上的字符串的全體記為∑ *, ∑*的任何子集都稱做字母表?上的形式語言,簡稱語言。
前綴、后綴:設v是一個字符串,由v左邊若干連續符號組成的字符串稱做v的前綴。由v右邊若
干連續符號組成的字符串稱為v的后綴。
連接:設a=a1a2...an,b=b1b2...bn,則ab表示它們的連接,值為:a1a2...an b1b2...bn.
連續重復(方冪):把n個a的連接記做an.
下面是幾個常見的字集運算(設A,B?S*,即A、B是字母表S上的字集):
或操作:AxB={a |axA或a∈B}.
積運算:AB={ab |axA且b∈B}.
冪運算:An=A·An-1=An-1·A,A0={e}.??
正則閉包:A+=A1∪A2∪A3∪...∪An∪...(也就是所有冪的組合)。?
?閉包:A*=A0∪A+(在正則閉包的基礎上,加上A0)。
(1)什么是形式文法
文法就是用來描述語言的語法結構的形式規則。我們可以從一個簡單的例子來理解文法,如下所示:
張三和李四是工程師。
由五個詞組成:張三 和 李四 是 工程師? 組成一個句子:由主語、謂語構成。我們知道中文的文法:
<句子>→<主語><謂語>
<主語>→<名詞詞組>
<名詞詞組>→<名詞><連詞><名詞詞組>
<謂語>→<動賓詞組>
<動賓詞組>→<動詞><賓語>
<賓語>→<名詞>
<名詞>→張三|李四|工程師
<連詞>→和
<動詞>→是
而在上面的例子中:所有用<>包括起來的都是"非終結符",而所有直接寫出來的就是"終結符",以上規則就是產生式。從上面的例子中,我們通過感性認識理解。
非終結符:它不是語言的組成部分,而是在推導過程中的占位符,最終要替換成終結符。? 終結符:語言是組成部分,是最后的內容。
產生式:用終結符替代非終結符的規則。? 起始符:能夠用于語言開頭的符號,在本例中的<主語>就是起始符。? 總結而言,整個推導的過程為:
<句子> <主語><謂語>
<名詞詞組><謂語> <主語>→<名詞詞組>
<名詞><連詞><名詞詞組><謂語>
<名詞詞組>→<名詞><連詞><名詞詞組>
<名詞><連詞><名詞詞組><動賓詞組> <謂語>→<動賓詞組>? <名詞><連詞><名詞詞組><動詞><名詞>
<動賓詞組>→<動詞><賓語>
張三和李四是工程師? 我們可以從中發現,它也可以推導出:"張三和工程師是李四",很顯然,它屬于文法正確,但語義是錯誤的。
(2)文法的分類
根據喬姆斯基的分類法,文法可以分成四種類型,如表3-3所示
? ? ? ? ?要根據這樣的定義來對文法進行判斷,總是讓許多考生無從下手,其實只要掌握一些規律,就能夠更好地完成這一任務。
? ? ? ? 0型文法:就是一般形式的方法,只要符合我們前面的定義,就屬于0型文法。因此也稱為無限制文法、短語文法。由0型文法生成的語言稱為0型語言。
? ? ? ?1型文法:它的每一個產生式應該滿足以下條件:jAf→jaf;其中:A?V (也就是說,A屬于非終結符),f,j,a (VxT)* (也就是說,f,j,a是非終結符或終結符的組合)。由于這些產生式在替換非終結符時,需要考慮它的前一個、后一個元素(也就是產生式替換的非終結符的前、后均有一個不變的符號),因此又稱為上下文有關文法,其產生的就是上下文有關語言,即1型文法。
? ? ? 2型文法:如果它的所有產生式都形如:A→a;其中:A?V(也就是說,A屬于非終結符),a ?(V?T)* (也就是說,a是非終結符和/或終結符的組合)。那么,它就是一個2型方法,由于轉換與前后元素沒有關系(也就是產生式的前后都是空的),因此,也稱之為上下文無關文法。
3型文法:它也是一個2型方法。??
右線性文法:如果它的所有產生式都形如:A→aB或A→a(也就是除了A→a這種特殊形式外,每個產生式的右邊都有一個非終結符);其中:A,BxV(也就是說,A,B屬于非終結符),a(VxT)* (也就是說,a是非終結符和/或終結符的組合)。??
左線性文法:如果它的所有產生式都形如:A→Ba或A→a(也就是除了A→a這種特殊形式外,每個產生式的左邊都有一個非終結符);其他與上面一樣。?
?右線性、左線性都稱做3型文法或正則文法。
4. 詞法分析
? ? ? ? 詞法分析是整個分析過程的一個子任務,它把構成源程序的字符串轉換成語義上關聯的單詞符號(包括關鍵字、標識符、常數、運算符和分界符等)的序列。詞法分析可以借助于有限自動機的理論與方法進行有效的處理。
(1)有限自動機
? ? ? ? 有限自動機是一種自動識別裝置,能夠準確地識別正規集。它與3型文法對應,可以分為確定的有限自動機和不確定的有限自動機兩種。
?確定的有限自動機(DFA)
M=(S,S, δ,S0,Z)
1)S是一個有限集,每個元素為一個狀態? 2)S是一個有窮字母表,每個元素為一個輸入字符
3)δ是轉換函數:是一個單值對照
4)S0,屬于S,是其唯一的初態
5)Z是一個終態集(可空)??
有限狀態自動機可以形象地用狀態轉換圖表示,設有限狀態自動機:
DFA = ({S, A, B, C, f}, {1, 0},δ,S, {f}),
其中:
δ(S, 0) = B, δ(S, 1) = A, δ(A, 0) = f, δ(A, 1) = C, δ(B, 0) = C, δ(B, 1) =f,δ(C, 0) = f, δ(C, 1) = f
其對應的狀態轉換圖如圖3-3所示。
不確定的有限自動機(NFA)
M=(S,S, δ,S0,Z)
1)S是一個有限集,每個元素為一個狀態? 2)S是一個有窮字母表,每個元素為一個輸入字符
3)δ是轉換函數,是多值對照
4)S0,屬于S,是非空初態集
5)Z是一個終態集(可空)
? ? ? ? 與確定的有限自動機一樣,不確定有限自動機同樣可以用狀態轉換圖表示,所不同的是,在圖
中一個狀態結點可能有一條以上的邊到達其它狀態結點。
? ? ? ? 從定義的角度來區分NFA與DFA,我們發現:DFA是單值對照,NFA是多值對照(其實也就對應
著上面所述的"NFA圖中一個狀態結點可能有一條以上的邊到達其它狀態結點")。
NFA可以轉換為等價的DFA.
(2)正規式
對于字母表而言,正規則式和它所表示的正規集的遞歸定義是:
空集是正規表達式。
任何屬于的a,都是其正規式。?
?假定U和V都是上的正規式,那它們的或、連接、閉包都是正規式。
? 通常在正規表達式中,一元運算符"*"具有最高的優先級,連接運算具有次優先級,運算符"|"具有最低優先級,這三個運算都是左結合的。每一個正規表達式R都對應一個有限自動機M,使M所接受的語言就是正規表達式的值。經過以下步驟可以從一個正規表達式R構造出相應的有限自動機M.
首先定義初始狀態S和終止狀態f,并且組成有向圖:
然后反復應用以下規則:
? ? ? 直到所有的邊都以Σ中的字母或ε標記為止。由此產生了一個帶ε–轉移的非確定有限自動機,然后可以通過上面介紹的方法,把該自動機轉換成確定有限狀態自動機。
? ? 下面舉一個例子說明自動機理論在詞法分析程序中的應用。C語言中對標識符的規定為由"_"或以字母開頭的由"_"、字母和數字組成的字符串,該標識符的定義可以表示為下面的正則表達式:
? ? ?式中的α代表字母字符{A,...,Z,a,...,z},d代表數字字符{0,1,...,9}.利用前面的方法構造出如圖3-4所示的有限自動機。
該自動機所接受的語言就是C語言中的標識符。
? ? ?在有限自動機的狀態轉換過程中,需要執行相關的語義動作。例如當識別到一個標識符時,需要在符號表中添加該標識符,并且向語法分析程序輸送表示該標識符的單詞。
5. 語法分析
? ? ? 語法分析的任務是識別由詞法分析給出的單詞符號序列是否為給定文法的正確句子(程序),語法分析可以分為自底向上分析和自頂向下分析兩大類。
(1)自底向上分析
? ? ? ?自底向上分析也稱為移進--歸約分析法。它的基本思想是:對輸入符號串自左向右進行掃描,并將輸入符號逐一移進一個后進先出的棧中,邊移進邊分析;一旦棧頂符號串形成某個句型的可歸約串時,就用某產生式的左部非終結符來替代(這稱之為歸約)。一直重復這個過程,直到棧中只剩下文法的開始符號。
由于"可歸約串"的不同,也就形成了幾種不同的自底向上分析法。
規范歸約分析法:用"句柄"來刻畫"可歸約串".
?規范歸約是規范推導的逆過程。LR分析法是一種規范歸約分析法,它根據當前分析棧中的符號串和向右順序查看輸入串的k個符號,就可以確定分析器的移進還是歸約。
常用的LR分析器有LR(0),SLR(1),LALR(1)和LR(1)四種。一個LR分析器由總控程序、分析表、分析棧三個部分組成。
算符優先分析法:用"最左素短語"來刻畫"可歸約串".
算符優先分析法是定義文法中終結符之間的優先關系,利用這種關系定義和操作可歸約串,從而達到語法分析的目的。
如果文法G中不存在形如P→...QR...的產生式(P,Q,R均為非終結符),也就是產生式中沒有非終結符連續出現的情況,則稱G為算符文法。
對于一個不含e產生式的算符文法G,任何一對終結符a和b之間具有如下的優先關系,如表3-4所示
(2)自頂向下分析
自頂向下分析法也稱為面向目標的分析方法,也就是從文法的開始符號出發嘗試推導出與輸入
的單詞串相匹配的句子。它可以分為確定和不確定兩種,如表3-5所示。
有一類稱為LL(1)的文法可用遞歸子程序方法或預測分析方法來實現確定的自頂向下的語法分
析。要采用自頂向下的分析,必須消除左遞歸、提取公共左因子,然后采用下列方法之一進行分
析,如表3-6所示。