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...