編譯原理 第二章 語言及其文法

2021-10-03 08:11:11 字數 3172 閱讀 4981

(1)基本概念

串是乙個有窮符號(symbol)序列

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

空串(empty string)是長度為0的串,用 ε(epsilon)表示:|ε|= 0

(2)基本運算

如果x和y是串,那麼x和y的連線(concatenation),是把y附加到x後面而形成的串,記作xy

注意:εs = sε = s

冪運算:s0= ε , sn= sn-1s, n ≥1

(1)基本概念

字母表∑是乙個有窮符號集合,例如:

➢二進位制字母表:

➢ascii字符集

➢unicode字符集

(2)基本運算

字母表∑1和∑2的乘積( product)即∑1∑2 =

字母表∑的n次冪( power) ∑0 = ∑n=∑n-1 ∑, n ≥ 1,長度為n的符號串構成的集合

字母表∑的正閉包( positive closure) ∑+ = ∑ ∪ ∑2 ∪ ∑3 ∪ … ,長度正數的符號串構成的集合

字母表∑的克林閉包(kleene closure) ∑*= ∑0 ∪ ∑+ = ∑0 ∪ ∑ ∪ ∑2 ∪ ∑3 ∪ … ,任意符號串(長度可以為零)構成的集合

對一組有相同左部的α產生式,可以簡記為:α→β1 | β2 | … | βn (α定義為β1,或者β2,…,或者βn )

字母表中排在後面的大寫字母(如x、y、z) 表示文法符號(即終結符或非終結符)

字母表中排在後面的小寫字母(主要是u、v、. . . 、z) 表示終結符號串(包括空串)

小寫希臘字母,如α、β、γ,表示文法符號串(包括空串)

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

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

給定文法g=(vt , vn , p , s ),如果 α→β ∈ p,那麼 可以將符號串γαδ中的α替換為β,也就是說,將γαδ 重寫(rewrite)為γβδ,記作 γαδ =>γβδ。此時,稱文法 中的符號串 γαδ 直接推導(directly derive)出 γβδ

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

α =>0 α

=>+ 表示「經過正數步推導」

=>* 表示「經過若干(可以是0)步推導」

有了文法(語言規則),如何判定某一詞串是否是該語言的句子?

如果 s=>* α,α∈(vt∪vn),則稱α是g的乙個句型

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

如果 s=>* w,w ∈vt,則稱w是g的乙個句子,句子是不包含非終結符的句型

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

無限制文法(unrestricted grammar) /短語結構文法

∀α → β∈p, α中至少包含1個非終結符

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

上下文有關文法

∀α → β∈p,|α|≤|β|

產生式的一般形式: α1aα2 → α1βα2 ( β≠ε )

上下文有關語言(1型語言):由上下文有關文法 (1型文法) g生成的語言l(g ),不包含ε-產生式

上下文無關文法

∀α → β∈p,α ∈ vn

產生式的一般形式:a→β

例:s → l | lt

t → l | d | tl | td

l → a | b | c | d |…| z

d → 0 | 1 | 2 | 3 |…| 9

上下文無關語言(2型語言):由上下文無關文法 (2型文法) g生成的語言l(g )

正則文法

正則語言(3型語言): 由正則文法 (3型文法) g生成的語言l(g )

正則文法能描述程式語言的多數單詞

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

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

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

給定乙個推導 s => α1=> α2=>…=> αn ,對於推導過程中得到的每乙個句型αi,都可以構造出乙個邊緣為αi的分析樹

推導過程:e=>-e => - ( e ) => - ( e+e ) => - ( id+e ) => - ( id+id )

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

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

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

消歧規則:每個else和最近的尚未匹配的if匹配

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

編譯原理 第二章 程式語言及其文法

1 文法 g s xsx y所識別的語言是 x n y x n 2 給定文法a ba ca,為該文法句子的是 bca 3 設有文法g s s s1 s0 sa sc a b c,下列符號串中是該文法的句子有 bc10 4 文法g產生的 句子 的全體是該文法描述的語言。5 若文法g定義的語言是無限集,...

編譯原理第二章

2.5 文法和語言的chomsky分類 直接子樹 若乙個子樹的根只有直接後繼,而無更遠代的後繼,稱這種子樹為直接子樹。二義性 若乙個文法所產生的每乙個句子都僅有一顆語法樹,則稱此文法為無二義性的。控制代碼 乙個句型的最左直接短語 即規範分析中,最先被規約的子串 稱之為句型的控制代碼。文法 的每個產生...

編譯原理第二章

2.1程式語言的定義 程式語言主要有語法和語義兩個方面定義。語法是指 一組規則可以產生乙個合式的程式,這些規則一部分是詞法規則,一部分是語法規則 也叫做產生規則 語言的單詞符號是有詞法規則確定。乙個程式語言只使用乙個有限字符集作為字母表。單詞符號是語言中具有獨立意義的最基本結構。詞法規則是指單詞符號...