㈠ 編譯原理-用正則表達式表示下面的內容
(1)[a-z]
(2)^[24680]+$ 所有數字都為偶數 ^(?=[1-9])\d*[02468]$|^[02468]$ 所有偶數
(3)^(?=[a-zA-Z0-9]+).*@[^\.]+\.[a-z]+$
測試有效
㈡ (編譯原理) 求下述文法對應正規式: S->0A|1B A->1S|1 B->0S|0
一、簡單的推導思路
1、該文法的對應正規式為:[01|10]+
2、推導:
(1)首先,展開產生式S,可知S要麼以0開頭,要麼以1開頭;
(2)如果S按產生式S->0A展開,則S必以01開頭,因為通過產生式A->1S|1可知,A必定是以1開頭的;
(3)如果S按產生式S->1B展開,則S必以10開頭,因為產生式B必定以0開頭;
(4)綜上,可知,S是以01或10開頭的非終結符號;
(5)當A以產生式A->1展開或 B以B->0展開時,S將推導結束;
(6)當A以產生式A->1S展開或 B以B->0S展開時,產生式中的非終結符號S將重復(1)-(3)的推導步驟;
(7)綜上所述,該文法的對應正規式為:[01|10]+。
二、聯立方程組求解
假設非終結符號S、A、B都分別代表一個正規式,則正規文法的產生式集合所代表的就是關於正規式S、A、B的一個方程組。
我們將文法「|」符號替換為正規式「+」符號,可得,
S=0A+1B=0(1S+1)+1(0S+0)=01(S+ε)+10(S+ε)=(01+10)(S+ε)=(01+10)S+(01+10)。
根據方程X=rX+t有形如X=r*t的解論斷,可得,
S=(01+10)*(01+10)=[01|10]+。
㈢ 編譯原理:寫出正規式包含奇數個1或奇數個0的二進制數串
((0*10*)(0*10*))*(0*10*) | ((1*01*)(1*01*))*(1*01*)
通過(AA)*A的方式保證表達式A出現奇數次,此處的A又可以替換成0*10*和1*01*表示只含一個1或0的任意二進制串。綜合起來可以滿足只出現奇數個1或奇數個0的要求
㈣ 編譯原理的正規表達式問題:
我只曉得第三個,(0|1)*(0|1)(0|1)*。前面兩個題目都買看懂。。。
㈤ 編譯原理:用正則表達式寫出被5整除的二進制數
初看這個問題簡單,*([0|5])+
但是是二進制啊,NND 老子 從 0 ,5 ,10, ..30,...50 都寫成二進制楞是沒發現規律
估計是你們老師拿來整你們的吧? 讓抄答案都沒地方抄。
㈥ 編譯原理中的正則表達式與正規表達式有什麼區別
完全相同,是對regular expression的不同翻譯
㈦ 編譯原理與實踐中正規表達式的問題
(aa|b)*
由連續兩個a或一個b的任意序列組成的語言,比如aab,baaaabbbb.
(a|bb)*
連續兩個b或一個a的任意序列。
正則語言里,|表示任選,有時也用+號。*號表示閉包--就是說任意組合。
㈧ 編譯原理:c語言標識符的正則表達式
是缺了。這個只能匹配字母開頭、字母數字組成的標示符
LZ可以自己加上,加在letter里
㈨ 編譯原理中的正規表達式
0+表示至少有一個0
0+10表示010、0010、00010等情形
(0+10)*表示(0+10)的閉包
㈩ 編譯原理這個正規表達式是怎麼寫出來的呀
主要就是後面的兩個條件:
至少2個1,
任何2個1之間有偶數個0
abd都不滿足第2條