翻譯程序:是指這樣的程序能夠把某一種語言程序(源語言程序)轉化成另一種語言程序(目標語言),而后者與前者在邏輯上是等價的
編譯程序:源語言是諸如Java、C、Ada、Pascal這樣的“高級語言”,目標語言是諸如匯編語言的“低級語言”,這樣的一個翻譯程序就稱為編譯程序
編譯程序的工作一般可以划分為5個階段:
詞法分析、語法分許、語義分析及中間代碼的生成、優化、目標代碼生成
編譯程序各個階段之間的關系:
下一階段將上一階段的結果進行處理
程序語言主要由語法、語義兩方面定義
詞法分析、語法分許、語義分析及中間代碼的生成、優化、目標代碼生成
編譯程序各個階段之間的關系:
下一階段將上一階段的結果進行處理
程序語言主要由語法、語義兩方面定義
高級程序語言是用來描述算法和計算機實現的雙重目的
語法分析樹(語法樹)是對句子的描述
文法描述語言的語法規則
上下文無關文法G包括四個組成部分:
終極符號,非終結符號(大寫符號),開始符號,產生式
箭頭“→”讀作“定義為”,直豎“|”讀作“或”,它們都是源語言符號
終極符號,非終結符號(大寫符號),開始符號,產生式
箭頭“→”讀作“定義為”,直豎“|”讀作“或”,它們都是源語言符號
句型:由終結符號和非終結符號組成的文法
句子:僅含終極符號的句型
語言:由文法產生的所有句子組成
最左推導是指:對於任何a ==> b,都對a的最左非終結符號進行迭代
如果一個文法存在一個句子對應兩棵不同的語法樹,則稱這個文法是二義的
二義文法:
1、最左端是一個非終結符號
2、左邊的個數≤右邊的個數
確定有限自動機(DFA),非確定有限自動機(NFA)
1、最左端是一個非終結符號
2、左邊的個數≤右邊的個數
確定有限自動機(DFA),非確定有限自動機(NFA)
一個LEX源程序主要包括兩部分
1、正規定義式
2、識別規則
閉包:由集合中的元素組成的無數多個串(其實跟循環差不多)
1、正規定義式
2、識別規則
閉包:由集合中的元素組成的無數多個串(其實跟循環差不多)
消除左遞歸的方法:
eg:P ==> Pα|β
---------
P ==> βP'
P' ==> αP’|e
短語:語法樹中任意子樹節點所組成符號串
eg:P ==> Pα|β
---------
P ==> βP'
P' ==> αP’|e
短語:語法樹中任意子樹節點所組成符號串
直接短語:只有兩代的端末
句柄:由最左推導的出來的直接短語
規范規約:針對α的最左規約,即就是最右推導的逆過程
規范規約,即就是由上一步推導出下一步的過程、式子;而句柄,指的是該式子、公式推導符號的推導結果
“移進-規約”過程由4個列組成
步驟、符號串、輸入串、動作
算符優先文法的判定:
只要優先關系表中沒有多重入口
算符優先的分析過程 等價於 移進-歸約
步驟、符號串、輸入串、動作
算符優先文法的判定:
只要優先關系表中沒有多重入口
算符優先的分析過程 等價於 移進-歸約
附注語法樹,帶注釋的語法樹