編譯原理空串啥意思
⑴ 編譯原理文法可以定義為四元集G(S)={Vn ,Vt,P,S},那麼Vn* ,Vt*和Vn+ ,Vt+,即右上角加*或+是什麼意思
右上角加*是集合的閉包,也稱為克林閉包(Kleene Closure),右上角加+是集合的正閉包
Vn* 是非終結符集的閉包,Vn+是非終結符集的正閉包
Vt* 是終結符集的閉包,Vt+是終結符集的正閉包
⑵ !!編譯原理DFA和NFA
DFA或NFA是對計算機程序的行為的抽象模型。你編寫的程序其實就對應了一個自動機。簡單舉例來說,如果a,b可以取值0或1; 程序: if(a==1) b=1; 這個程序對應了一個自動機。
對應的自動機就有狀態 (0,0), (0,1), (1,1), (1, 0)
比如你自動機的初始狀態是 (1,0)即a=1,b=0時,運行程序的下一個狀態就是(1,1)。
畫圖出來就是 這4個狀態作為頂點,並且有下面幾條邊
(0,0) --> (0,0)(自環), (1,0)-->(1,1), (1,1)-->(1,1)(自環), (0,1)-->(0,1)自環
存在的意義就是一種理論模型,也可以認為是一種編程思想。 詞法分析系也離不開 if else, 這一系列的if else和條件也就組成自動機。。。
最經典體現自動機思想的演算法就是KMP演算法,你肯定學過,字元串子串匹配的演算法。 回憶這個演算法的過程:演算法第一步構造的next表(數據結構教材的說法)其實就是根據子串的內容構造了一個自動機! 演算法第二步將原串作為自動機輸入,自動機的輸出就是匹配到的子串位置或者無匹配。
⑶ 編譯原理中無符號整數/無符號偶數的文法是什麼
無符號整數: 開頭不能為 0 的任意長度的數字串
S->TE//S表示以[1-9]開頭的任意長度的字元串,也就是無符號整數啦。
E->ED|ε//E表示任意長度數字串或空串
D->T|0//D表示[0-9]的終結符
T->1|...|9//T表示[1-9]的終結符
無符號偶數: 以0, 2, 4, 6, 8 結尾的任意長度的數字串。
S->ET//S表示以02468結尾的任意長度的數字串。
E->Ed|ε//E表示任意長度的數字串或空串。
D->0|1|2|...|9//D表示[0-9]中任意一個數字。
T->0|2|4|6|8//T表示偶數單個數字。
⑷ 編譯原理空字元ε與空集區別
不知你說的空集是為何指?據我所猜應該是指某個文法所能推導的語句的集合為空,這里的空集意思是不存在匹配該文法的句子。而ε則是指某個包含非終結符號的文法符號串的推導為空,例如A->ε。咋看上去好像差不多,其實它們卻有本質的區別,空集是面向結果的,即一個文法所有可能推導的最終語句;而ε則是面向定義的,即某個非終結符號可以推導為空,這樣的定義可以在推導過程重復使用。
最後給你來點哲學的。為什麼會存在ε?古代有句話叫,其大無外,其小無內,大小之間轉化的奧秘在編譯原理中真實的被呈現了出來,就看你有沒有發現。可以肯定的說,ε的存在正是應了無窮的需要。例如:A->aA|ε,這里ε既可以A可以表達任意多的a串,又可以動態的將其終止,不至無休止的無限下去。
你終會明白,理解了ε,就是理解了形式語言的整個靈魂。
⑸ 編譯原理這個符號表示什麼 如圖~~~~
剪頭上加一個星號:S-*->aPb
表示從S可以推出含有非終結符P的形如aPb的句型。
剪頭上加一個加號:S-+->a
表示從S可以推出終結符a。
⑹ 編譯原理 空串為什麼可以區分終態和非終態
follow集合是針對非終結符而言的;follow(U)所表達的是句型中非終結符U的所有可能的後隨終結符號的集合,特別注意一點:「#」是識別符號的後隨附。
直接收取:形如「……Ua」的組合,直接把啊收入到follow(U)中
直接收取:形如「……UP……」的組合,(P是非終態符);把firth(P)除去ε直接收入到follow(U)中。
反復傳遞:形如「P-……U」的產生式,
follow(P)的全部內容傳遞到follow(U)中,或者說是P-……UB且first(B)包含ε,則把first(B)除去ε直接收入到follow(U)中,同時吧follow(P)的全部內容傳送到follow(U)中...
⑺ 正則表達式 空串
表達式 (UltraEdit Syntax):
% 匹配行首 - 表明要搜索的字元串一定在行首.
$ 匹配行尾 - 表明要搜索的字元串一定在行尾
? 匹配除換行符外的任一單個字元.
* 匹配任意個數的字元出現任意次數(不包括換行符)
+ 匹配前導字元或者表達式出現一次或者更多次(不包括換行符)
++ 匹配前導字元或者表達式不出現或者出現一次以上(不包括換行符)
^b 匹配頁中斷符
^p 匹配DOS文件的換行符
^r 匹配MAC文件的換行符(CR Only)
^n 匹配UNIX文件的換行符 (LF Only)
^t 匹配一個製表符
[ ] 匹配方括弧中的單個的字元
刪除空行: 替換 %[ ^t]++^p 為 空串
刪除行尾空格: 替換 [ ^t]+$ 為 空串
刪除行首空格: 替換 %[ ^t]+ 為 空串
每行設置為固定的4個空格開頭: 替換 %[ ^t]++^([~ ^t^p]^) 為 " ^1"
每段設置為固定的4個空格開頭: 替換 %[ ^t]+ 為 " "
(如果一行是以空格開始的,則視之為一段的開始行)
將一段合並為一行: 替換 [ ^t]++^p^([~ ^t^p]^) 為 ^1
(注意: 此處假定文本是以DOS方式回車換行 - CR/LF)
去掉HTML TAG: 替換 ^^ 為 空串
刪除HTML中的所有<A>: 替換 <[ ]++a *[ ]++href[ ]++=*> 為 空串
刪除文本中指定的前2列字元: 替換 %?? 為 空串
在第4列後插入2列空白字元: 替換 %^(????^)^(?^) 為 "^1 ^2"
查找所有的數字: [0-9]+[.]++[0-9]+
查找所有的單詞: [a-z]+
⑻ 編譯原理中V*是什麼意思
V是一個符號集合,假設V指的是三個符號a, b, c的集合,記為 V = {a, b, c }
V* 讀作「V的閉包」,它的數學定義是V自身的任意多次自身連接(乘法)運算的積,也是一個集合。
也就是說,用V中的任意符號進行任意多次(包括0次)連接,得到的符號串,都是V*這個集合中的元素。
0次連接的結果是不含任何符號的空串,記為 ε
1次連接就是只有一個符號的符號串,比如,a,b, c
2次連接是兩個符號構成的符號串,比如,aa, ab, ac, ba, bb, bc,等等
……
n次連接是一個長度為n、由a、b、c三個符號構成的符號串,比如abaacbbac……
因此,V*包含一切由a,b,c三個符號連接而成的、任意長度的符號串(以及空串ε)
⑼ 在編譯原理中,什麼是上下文無關文法什麼是語言
二型文法如下:S->AcS->ScA->abA->aAb三型文法如下:S->aSA->bAB->cBB->cA->BbA、2型文法是上下文無關文法,表現在產生式上就是產生式的左部只有一個非終結符;3型文法從廣義上講包括左線形文法、右線形文法和正規文法。B、左線形文法產生式的右部要麼沒有非終結符,如果有非終結符也只能有一個,且必須位於產生式右部的最左端。C、右線形文法產生式的右部要麼沒有非終結符,如果有非終結符也只能有一個,且必須位於產生式右部的最右端。D、正規文法是右線形文法的一個子集,其產生式右部只有三種情況:1)空串2)只有一個終結符3)只有一個終結符後接一個非終結符E、所有的3型文法都是2型文法。