編譯原理 語法分析

2021-09-09 02:16:52 字數 3391 閱讀 9904

根據上課內容順序寫的部落格,並不是按照書的目錄來的

使用龍書以及編譯程式設計原理(第二版)金成植、金英編著

老師的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 ...