根據上課內容順序寫的部落格,並不是按照書的目錄來的上下文無關文法使用龍書以及編譯程式設計原理(第二版)金成植、金英編著
老師的ppt是英文的,我自己隨便翻的,不一定對
語法分析書和抽象語法樹
二義性簡單語言的語法
知識圖譜
語法分析器的功能輸入:詞法單元/詞法單元序列輸出:語法結構的內在表示式
過程:讀取詞法單元
生成語法結構——語法樹,根據語法定義(上下文無關文法)
檢查語法錯誤
語法結構
用來描述乙個明確定義的程式的結構
程式宣告
常數宣告
型別宣告
變數宣告
程式/函式宣告
主體宣告(賦值,條件語句,迴圈,函式呼叫)
表示式(算數,邏輯,布林)
語法錯誤
不同型別的語法錯誤:
處理語法錯誤:
cocke-younger-kasami演算法
earley』s 演算法
自頂向下語法分析方法(有限制,可**的)
遞迴下降法 recursive descendent parsing
ll(k) – k=1
自底向上語法分析方法(有限制,歸約)
slr(k)
lr(k)
lalr(k)
簡單優先關係法
文法是表示無窮字串集的強有力的一種有限方式文法g (vt, vn, s, p)
vt 是乙個有限的終極符集合
vn是乙個有限的非終極符集合
s是文法的開始符
p是產生式的集合
每個生成規則都有以下形式
文法的分類1型文法: 也稱為上下文有關文法。其產生式形式為:2型文法: 也稱為上下文無關文法。
3型文法: 也稱為正則文法。
上下文無關文法與正規表示式
正規表示式(a|b)*abb
文法:a0 → aa0|ba0|aa1
a1 → ba2
a2 →ba3
a3→ ε
文法的分類
描述能力
0型文法 > 1型文法 > 2型文法 > 3型文法
對應自動機
0型文法:圖靈機
1型文法:線性有界自動機
2型文法:下推自動機
3型文法:有限自動機
上下文無關文法context free grammar(cfg)
定義為四元組(vt,vn,s,p)
vt是有限的終極符集合
vn是有限的非終極符集合
s是開始符,s∈ vn
p是產生式的集合,且具有下面的形式:
a→x1x2…xn
其中a∈vn,xi∈ (vt∪vn) ,右部可空。
一些通常的符號變數
通常情況下
推導
如果有乙個產生式a→β,我們得到αaγ=>αβγ =>代表用a→β一步推導
我們可以說αβγ 是αaγ推導的
=>的含義是,使用一條規則,代替=>左邊的某個符號,產生=>右端的符號串
擴充套件巴克斯正規化
文法轉換的一些演算法
文法等價變化:l(g1)=l(g2)
增補文法(增光文法):開始符不能出現在產生式的右側
z→s消除公共字首
公共字首 a→αβ1| … | αβn | γ1 | … | γm
提取公因子 a→αa』 | γ1 | … | γm a』 → β1 | … | βn
例子1vt=vn=s=e例子2
算術表示式
vt=vn=
s=exp
p:例子3程式
vt=vn=
s=program
p:問題:推導是從開始符構造乙個句子的方法
許多推導來自同乙個句子
不能唯一地代表句子的結構
語法書:表示乙個句子的結構的方法
依舊是上面的例子
一顆使用上下文無關文法的有標號樹根必須是開始符的標號
每乙個節點都是乙個與之相關聯的符號
每個葉子必須是乙個終極符的標籤
對於每乙個與非終極符a相關的節點,都有n個兒子,從左到右他們一起與符號b1,b2,…,bn相關,必須有個產生式a→b1b2…bn
二義性文法
對於乙個文法g,如果存在乙個句子有不止一顆語法樹,g被稱為二義性文法
c0程式的結構
語法分析 編譯原理
實驗目的 對迴圈語句和條件判斷語句編寫詞法分析編譯程式,只能通過一遍掃瞄完成。用c 實現 實驗要求 1 關鍵字 for if then else while do 所有關鍵字都是小寫。2 運算子和分隔符 3 其他識別符號 id 和整型常數 num 通過以下正規式定義 id letter letter...
編譯原理 語法分析(二)
在第一篇文章中,我們介紹了如何用上下文無關文法描述一種語言的語法,和如何使用推導和規約構造一棵語法分析樹,以及如何對文法進行轉換使之能夠更適用於語法分析。在本篇文章中,我們將介紹如何使用自頂向下的方法進行語法分析,進一步的,我們將介紹一種更高效的 分析方法。為了下文需要和減少重複,我們先給出在下文中...
編譯原理簡單語法分析
一 實驗目的 了解掌握算符優先分析的基本方法 內容 學會科學思考並解決問題,提高程式設計能力。二 實驗內容與要求 用算符優先分析方法設計乙個分析解釋程式,對輸入的賦值語句 輸出語句 清除語句進行詞法分析 語法分析 表示式求值並儲存於指定變數中 若存在錯誤,提示錯誤相關資訊。三 文法表示 s v e ...