❶ 如果用正則表達式 匹配一串二進制數,其中0有偶數個,1有奇數個.接受空串
/^(?:$|(?=0*1(?:0*10*1){0,}0*$)1*(?:01*0)+1*$)/
❷ 編譯原理中的正規表達式
0+表示至少有一個0
0+10表示010、0010、00010等情形
(0+10)*表示(0+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的要求
❹ 設計一個三變數的偶校驗電路,即三個變數中,偶數個1輸出為1,用與非門
設輸入邏輯變數為A、B、C。根據輸入偶數個邏輯1輸出為1,否則輸出為0的題意,就是說A、B、C中有兩個或0個為1,其餘的為0時輸出為邏輯1, 那麼輸出邏輯表達式就應該是
以上邏輯器件全部採用4輸入與非門,不用的輸入端強制接"1"電平並用.1μ電容旁路,以提高抗干擾性能。
❺ 課本上有道題是這樣說的:用正則表達式 表示偶數個0奇數個1的字元串。我知道該如何表達
這是陳意雲老師習題集上的答案 :
even_0_even_1→(00|11)*((01|10)(00|11)*(01|10)(00|11)*)*
even_0_odd_1→1even_0_even_1|0(00|11)*(01|10)even_0_even_1
對於偶數個0和奇數個1構成的串,其第一個字元可能是0或1。
(1)如果是1,那麼剩下的部分一定是偶數個0和偶數個1
(2)如果是0,那麼經過若干個00或11,一定會出現一個01或10,才能保證0的個數是偶數,1的個數是奇數。若串還沒有結束,剩餘部分一定是偶數個0和偶數個1。
這樣,正確的正規定義是:
even_0_odd_1→1even_0_even_1|0(00|11)*(01|10)even_0_even_1
注意:*均應在其左面第一個右括弧的右上角,為書寫方便直接寫在了後面 :)
❻ 編譯原理編程
1)0*10*10*
2)0*(10+)*(1|0)
3)(0*10*10*)*
第一題跟第三題是差不多的
這時候可以發現,只要用一個count來做對錯的識別就能解決,並不是沒有用到state狀態,而是該狀態變為隱性了,如下
/**
*@fnintcheck_data(char*d_line,intn)
*@brief檢查資列串是否符合給定的正則表達式
*@return0不符;1符合
*/
intcheck_data(char*d_line,intn){
inti,count;
for(count=0,i=0;i<n;i++){//只要算出1的個數即可
if(d_line[i]=='1')count++;
}
return(1-(count&1));//當count奇數表示失敗;當count偶數成功
}
第二題的話,就會用到state來紀錄狀態,
而最後離開狀態S4還是被隱含在執行判斷的過程中
#defineS10
#defineS21
#defineS32
#defineS43
intcheck_data(char*d_line,intn){
inti,state;
state=S1;
for(i=0;i<n;i++){
switch(state){
caseS1:
if(d_line[i]=='1')state=S2;break;
caseS2:
if(d_line[i]=='1')return0;//失敗了
/*d_line[i]為'0'*/state=S3;break;
caseS3:
if(d_line[i]=='1')state=S2;break;
caseS4:break;
}
}
return1;
}
基本上上述程式對照自動機就可以比較清楚了
❼ 編譯原理:所有由偶數個0和偶數個1所組成的符號串的集合
(00|11)*((01|10)(00|11)*(01|10)(00|11)*)*
❽ 正則表達式匹配奇偶數
區分奇數和偶數其實就是在整數的基礎上看最後一位嘛
(假如不考慮正負號)
偶數:
一位偶數就是0/2/4/6/8,用正則表達式表示就是:[02468]
兩位偶數就是個位是0/2/4/6/8,十位是1-9(非0),用正則表達式表示就是:[1-9][02468]
三位偶數就是在兩位中間加一個任意數字,用正則表達式表示就是:[1-9]d[02468]
……
全部合起來之後就是:([1-9]d*)?[02468]
奇數同理。
假如開頭需要正負號,奇數直接加上就行了,而偶數中0需要單獨處理(因為不存在-0)。
❾ 編譯原理-用正則表達式表示下面的內容
(1)[a-z]
(2)^[24680]+$ 所有數字都為偶數 ^(?=[1-9])\d*[02468]$|^[02468]$ 所有偶數
(3)^(?=[a-zA-Z0-9]+).*@[^\.]+\.[a-z]+$
測試有效
❿ 編譯原理偶數個0和偶數個1轉換圖
嘛,差不多就是這樣了。思路是分析所有0和1的組合畫出存在的狀態,然後判斷轉移條件,找出可接受的狀態。