編譯原理學習筆記(二)

2021-10-02 21:32:28 字數 3437 閱讀 1409

1、字母表:字母表

符號:字母、數字、標點符號、。。。例:二進位制字母表,ascii字元表、unicode字符集

2、字母表上的運算

(1)字母表的乘積

sigma1 sigma2的乘積:sigma1 sigma2 =

例: =

(2)字母表的冪運算:字母表的n次冪運算是常速為n的符號串構成的集合

sigma的0次冪:【空串】

sigma的n次冪:^3==

(3)字母表的正閉包的運算:長度為正數的符號串構成的集合

sigma^+=sigma 並 sigma^2 並 sigma^3 並 ...

例:^+=

(4)字母表的克林閉包:任意符號串(長度可以為零)構成的集合

sigma^*=sigma^0 並 sigma 並 sigma^2 並 sigma^3 並 ...

(5)串:設sigma是乙個字母表,任意sigma的克林閉包上的每乙個元素,稱為sigma的乙個串

串是字母表中符號的乙個有窮序列

串s的長度,通常記作|s|,是指s中符號的個數

空串是長度為零的串,用

(6)串上的運算:

連線:x,y->xy

空串是連線運算的單位元,集對於任何串s都有

假設x,y,z是三個字串,如果x=yz,則成y是x的字首,z是x的字尾

串的冪運算:串s的n次冪運算是將n個s連線起來

1、語法、語言的基本符號

2、文法的形式化定義:g=(vt, vn, p, s)

3、vt:終結符集合

4、vn:非終結符集合

非終結符:是用來表示語法成分的符號,有時也稱為「語法變數」,例:vn=

5、vt

6、p:產生式集合

產生式描述了將終結符和非終結符組成串的方法。

產生式的一般形式:a->b,讀作:a定義為b

(1)a屬於vt和vn的正閉包,且a中至少包含vn中的乙個元素:稱為產生式的頭或者左部

(2)b屬於vt和vn的克林閉包,稱為產生式的體或者右部

例:略7、s屬於vn。開始符號,表示的是該文法中最大的語法成分

例:g=(,,p,e)

p=約定:在不產生歧義的情況下,可以只寫產生式

8、產生式的簡寫:

對一組有相同左部的a產生式:

a->b1,a->b2,...,a->bn

可以簡記為:

a->b1 | a->b2 | ... | a->bn

讀作:a定義為b1,或者b2,...或者bn.b1...bn稱為a的候選式

9、符號約定:

終結符:字母表中排在前面的小寫字母、運算子、標點符號、數字、粗體字串,,,

非終結符:字母表中排在前面的大寫字母、字母s,小寫斜體的名字、代表程式構造的大寫字母,如e(表示式)、t(項)、f(因子)

文法符號(即終結符或非終結符):字母表中排在後面的大寫字母

終結字串(包括空串):字母表排在後面的小寫字母

文法符號串(包括空串):小寫希臘字母

除非特別說明,第乙個產生式的左部就是開始符號

1、有了文法(語言規則),如何判定乙個詞串是否是滿足文法的句子:

(1)句子的推導(派生)——從生成語言的角度

(2)句子的歸約——從識別語言的角度

2、推導和規約:

給定文法:g=(vt,vn,p,s), 如果a->b屬於p,那麼可以將符號串

簡而言之,直接推導就是用產生式的右部替換產生式的左部

經過n部推到出***(略)a0=>^n an

a=>^0a

a=>^+a

a=>^*a

3、句型和句子

如果s=>^*a,a屬於(vtuvn)*,則稱a是g的乙個句型

乙個中既可以包含終結符,又可以包含非終結符,也可能是空串

如果s=>^*w,w屬於vt*,則成w是g的乙個句子,句子是不包含非終結符的句型。

4、語言的形式化定義

由文法g的開始符號s推導出的所有句子構成的集合稱為文法g生成的語言,記為l(g),即:

l(g)=

文法解決了無窮語言的有窮表示問題

例:識別符號的文法(略)

5、語言上的運算:並、連線、冪、克林閉包、正閉包。。。

例:識別符號

l=,d=,l(lud)*

1、chomsky文法分類體系:0/1/2/3型文法

2、0型文法(無限制文法/短語文法)

任意a->b 屬於 p,a中至少包含1個非終結符

0型語言:由0型文法g生成的語言l(g)

3、1型文法(上下文有關文法csg)

進一步要求,任意a->b 屬於 p,|a|<=|b|

產生式的一般式:a1aa2->a1ba2(b不等於空)【只有a1,a2存在才有效,所以是上下文有關的】

上下文有關文法中不包含空產生式【因為空產生式的長度是0,a至少為1,所以。。。】

上下文有關語言

4、2型文法(上下文無關文法cfg)

任意a->b 屬於 p,a屬於非終結符

產生式的一般形式:a->b

上下文無關語言

5、3型文法(正則文法rg)

右線性文法:a->wb或a->w 【ab都是非終結符,w為終結符號串】

左線性文法:a->bw或a->w

例:字母打頭的字母數字串***(識別符號)

正則語言:能描述程式語言的多數單詞(第三章詞法分析中詳細介紹)

6、四種文法之間的關係

逐級限制:左部至少包含乙個非終結符->在0型基礎上,左部長度要小於右部->左部是乙個非終結符->在2型基礎上,進一步對右部限制

逐級包含

1、cfg的分析樹:

根節點的標號為文法開始符號

內部節點表示對乙個產生式的應用,該結點的標號是此產生式左部a。該結點的子結點的標號從左到右構成了產生式的右部beta

葉結點的標號既可以是非終結符,也可以是終結符,從左到右排到葉結點得到的符號串稱為是這棵樹的產出或邊緣

分析樹是推導的圖形化表示:給定乙個推到,對於推導過程中得到的每乙個句型alpha,都可以構造出乙個邊緣為alphai的分析樹

2、(句型的)短語

給定乙個句型,其中分析樹的每一棵子樹的邊緣稱為該句型的乙個短語

如果子樹只有父子兩代結點,那麼這棵子樹的邊緣稱為該句型的乙個直接短語

直接短語一定是某個產生式的右部,但是產生式的右部不一定是給定句型的直接短語

3、二義性文法

如果乙個文法可以為某個句子生成多棵分析樹,則成這個文法是二義性的

解決二義性的方法(消歧規則,例:略)

4、二義性文法的判定

對於任意乙個上下文無關文法,不存在乙個演算法,判定它是無二義性的;但能給出一組充分條件,滿足這組充分條件的文法是無二義性的,即:

滿足,肯定無二義性

不滿足,也未必就是有二義性的

編譯原理學習筆記與心得(二)

符號串 程式在程式語言之基本符號集上按照語法規則而構成的基本符號串。字母表是非空的有窮符號集合。一 語義分析 收集識別符號的屬性資訊 種屬 型別 儲存位置和長度 值 作用域 引數和返回值資訊 語義檢查 變數或過程未經過申明就使用,變數或過程重複申明,運算分量型別不匹配等。二 中間 生成 三位址碼 由...

編譯原理學習筆記 語法

高階程式語言可分為 1.強制性語言 2.作用時語言 3.基於規則的語言 4.物件導向的語言 程式語言主要由語法,語義,語用 語用 有關程式設計和語言成分的使用方法,它使語言的基本概念與外界的語言 如數學概念或計算機的物件和操作 聯絡起來。語法 語法是指這樣的一組規則,用它可以形成和產生乙個合式的程式...

編譯原理學習筆記 自上而下分析

語法分析 自上而下分析 面臨的問題 左遞迴性問題 例如 p pa 如果存在非終結符p含有左遞迴的文法將上述自上而下的分析過程陷入無限迴圈 回溯?ll 0 分析法 左遞迴的消除p p 改寫為p p p p 消除左遞迴的做法 把文法g的所有非終結符按人一種順序排列成p1,p2 pn,按此順序執行 for...